From 42099b3d59cf4af72e646eaed3b19171a9849349 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 13 Aug 2024 16:56:32 +0800 Subject: [PATCH 01/63] =?UTF-8?q?=E5=85=91=E6=8D=A2=E5=95=86=E5=93=81?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=95=86=E5=93=81id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocol/shop/shop.pb.go | 394 ++++++++++++++++++++------------------- protocol/shop/shop.proto | 1 + worldsrv/action_shop.go | 1 + worldsrv/shopmgr.go | 2 + 4 files changed, 206 insertions(+), 192 deletions(-) diff --git a/protocol/shop/shop.pb.go b/protocol/shop/shop.pb.go index 5a7202e..3165a5f 100644 --- a/protocol/shop/shop.pb.go +++ b/protocol/shop/shop.pb.go @@ -1262,6 +1262,7 @@ type SCShopExchange struct { RetCode OpResultCode `protobuf:"varint,1,opt,name=RetCode,proto3,enum=shop.OpResultCode" json:"RetCode,omitempty"` CreateTs int64 `protobuf:"varint,2,opt,name=CreateTs,proto3" json:"CreateTs,omitempty"` //订单创建日期 OrderId string `protobuf:"bytes,3,opt,name=OrderId,proto3" json:"OrderId,omitempty"` //订单号 + GoodsId int32 `protobuf:"varint,4,opt,name=GoodsId,proto3" json:"GoodsId,omitempty"` //商品Id } func (x *SCShopExchange) Reset() { @@ -1317,6 +1318,13 @@ func (x *SCShopExchange) GetOrderId() string { return "" } +func (x *SCShopExchange) GetGoodsId() int32 { + if x != nil { + return x.GoodsId + } + return 0 +} + //PACKET_CS_SHOP_EXCHANGELIST type CSShopExchangeList struct { state protoimpl.MessageState @@ -2593,198 +2601,200 @@ var file_shop_proto_rawDesc = []byte{ 0x12, 0x22, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x65, 0x6c, 0x49, 0x64, 0x22, 0x74, 0x0a, 0x0e, 0x53, 0x43, - 0x53, 0x68, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x07, - 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, - 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, - 0x22, 0x14, 0x0a, 0x12, 0x43, 0x53, 0x53, 0x68, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x9d, 0x04, 0x0a, 0x10, 0x53, 0x68, 0x6f, 0x70, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x52, 0x75, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x52, 0x75, 0x6c, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x44, - 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x2a, 0x0a, 0x06, 0x45, 0x78, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x06, 0x45, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x54, - 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x56, 0x49, 0x50, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x56, 0x49, 0x50, 0x44, 0x61, - 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x4e, 0x6f, 0x74, - 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, - 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x56, 0x69, 0x70, 0x53, 0x68, - 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x56, - 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x4e, - 0x6f, 0x74, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x54, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x11, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x54, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x24, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x60, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x4a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4a, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x73, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x0d, 0x54, 0x65, 0x6c, 0x43, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, - 0x6c, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x9a, 0x01, - 0x0a, 0x12, 0x53, 0x43, 0x53, 0x68, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x4f, 0x70, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x49, 0x6e, 0x66, 0x6f, 0x73, - 0x12, 0x28, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xc9, 0x01, 0x0a, 0x09, 0x43, - 0x53, 0x50, 0x61, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x6f, 0x6f, 0x64, - 0x73, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, - 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x61, 0x79, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, - 0x61, 0x79, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x42, 0x75, 0x79, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x42, 0x75, 0x79, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0x4b, 0x0a, 0x09, 0x53, 0x43, 0x50, 0x61, 0x79, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x4f, 0x70, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x55, 0x72, 0x6c, 0x22, 0x2a, 0x0a, 0x10, 0x43, 0x53, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x49, - 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, - 0x3c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x22, 0xd3, 0x01, - 0x0a, 0x0b, 0x50, 0x61, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6f, - 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, - 0x73, 0x75, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x43, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x2a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x02, 0x54, 0x73, 0x22, 0x39, 0x0a, 0x10, 0x53, 0x43, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x49, - 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x50, 0x61, 0x79, - 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x4a, - 0x0a, 0x0c, 0x43, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, - 0x0a, 0x06, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x41, 0x64, 0x64, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x38, 0x0a, 0x10, 0x53, 0x43, - 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, 0x24, - 0x0a, 0x05, 0x41, 0x64, 0x64, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x41, - 0x64, 0x64, 0x72, 0x73, 0x22, 0x2e, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x41, 0x64, 0x64, 0x72, 0x22, 0x11, 0x0a, 0x0f, 0x43, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x22, 0x59, 0x0a, 0x0f, 0x53, 0x43, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x12, 0x22, 0x0a, 0x04, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, - 0x53, 0x68, 0x6f, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x22, - 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x2a, 0x95, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, - 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x56, 0x43, 0x6f, - 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x16, 0x0a, - 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, - 0x04, 0x12, 0x18, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x74, 0x74, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x6f, 0x6c, 0x64, - 0x4f, 0x75, 0x74, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x41, 0x63, 0x63, 0x10, 0x07, - 0x12, 0x17, 0x0a, 0x13, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4a, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, - 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x08, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, - 0x75, 0x67, 0x68, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, - 0x74, 0x53, 0x49, 0x4d, 0x43, 0x6f, 0x64, 0x65, 0x10, 0x0a, 0x2a, 0x91, 0x05, 0x0a, 0x09, 0x53, - 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, - 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xc4, 0x13, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, - 0xc5, 0x13, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x41, 0x44, 0x4c, 0x4f, 0x4f, 0x4b, 0x45, 0x44, 0x10, 0xc6, 0x13, - 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, - 0x4f, 0x50, 0x5f, 0x41, 0x44, 0x4c, 0x4f, 0x4f, 0x4b, 0x45, 0x44, 0x10, 0xc7, 0x13, 0x12, 0x1d, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, - 0x5f, 0x56, 0x43, 0x50, 0x41, 0x59, 0x53, 0x48, 0x4f, 0x50, 0x10, 0xc8, 0x13, 0x12, 0x1d, 0x0a, - 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, - 0x56, 0x43, 0x50, 0x41, 0x59, 0x53, 0x48, 0x4f, 0x50, 0x10, 0xc9, 0x13, 0x12, 0x22, 0x0a, 0x1d, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x45, - 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xca, 0x13, - 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, - 0x4f, 0x50, 0x5f, 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x52, 0x45, 0x43, 0x4f, 0x52, - 0x44, 0x10, 0xcb, 0x13, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, - 0xcc, 0x13, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xcd, 0x13, - 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, - 0x4f, 0x50, 0x5f, 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x4c, 0x49, 0x53, 0x54, 0x10, - 0xce, 0x13, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0xcf, 0x13, 0x12, 0x1a, 0x0a, 0x15, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x53, 0x43, 0x5f, - 0x47, 0x49, 0x56, 0x45, 0x43, 0x4f, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xd2, 0x13, - 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x41, 0x59, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xd3, 0x13, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xd4, 0x13, 0x12, 0x1c, - 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x47, 0x45, 0x54, 0x50, 0x41, - 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xd5, 0x13, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x47, 0x45, 0x54, 0x50, 0x41, 0x59, 0x49, - 0x4e, 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xd6, 0x13, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x44, 0x44, - 0x52, 0x10, 0xd7, 0x13, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x44, 0x44, 0x52, 0x10, 0xd8, 0x13, 0x12, 0x1e, - 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, - 0x54, 0x45, 0x5f, 0x56, 0x49, 0x50, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x10, 0xd9, 0x13, 0x12, 0x1e, - 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x55, 0x50, 0x44, 0x41, - 0x54, 0x45, 0x5f, 0x56, 0x49, 0x50, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x10, 0xda, 0x13, 0x42, 0x24, - 0x5a, 0x22, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x73, 0x68, 0x6f, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x65, 0x6c, 0x49, 0x64, 0x22, 0x8e, 0x01, 0x0a, 0x0e, 0x53, + 0x43, 0x53, 0x68, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2c, 0x0a, + 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, + 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x43, + 0x53, 0x53, 0x68, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0x9d, 0x04, 0x0a, 0x10, 0x53, 0x68, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x69, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x50, 0x69, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, + 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x50, 0x6c, 0x61, + 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, + 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x45, 0x78, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x68, 0x6f, + 0x70, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, + 0x45, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, + 0x72, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, + 0x56, 0x49, 0x50, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x56, 0x49, 0x50, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, + 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x11, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, + 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, + 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0f, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x07, + 0x54, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x52, 0x07, 0x54, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x05, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x68, 0x6f, + 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x22, 0x60, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4a, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x43, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, + 0x61, 0x73, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x02, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x0d, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x6c, 0x0a, 0x0a, 0x53, 0x68, + 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x70, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x9a, 0x01, 0x0a, 0x12, 0x53, 0x43, 0x53, + 0x68, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x2c, 0x0a, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x12, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, + 0x05, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, + 0x68, 0x6f, 0x70, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x28, 0x0a, 0x06, 0x57, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x68, + 0x6f, 0x70, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x06, 0x57, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xc9, 0x01, 0x0a, 0x09, 0x43, 0x53, 0x50, 0x61, 0x79, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x61, 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x61, 0x79, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x42, 0x75, 0x79, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x42, 0x75, 0x79, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x45, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x0b, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x75, + 0x6d, 0x22, 0x4b, 0x0a, 0x09, 0x53, 0x43, 0x50, 0x61, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, + 0x0a, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x12, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x55, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x2a, + 0x0a, 0x10, 0x43, 0x53, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3c, 0x0a, 0x08, 0x49, 0x74, + 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x22, 0xd3, 0x01, 0x0a, 0x0b, 0x50, 0x61, 0x79, + 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x4e, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, + 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x08, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x54, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x39, + 0x0a, 0x10, 0x53, 0x43, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x25, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x50, 0x61, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x4a, 0x0a, 0x0c, 0x43, 0x53, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x41, 0x64, 0x64, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x38, 0x0a, 0x10, 0x53, 0x43, 0x47, 0x65, 0x74, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x05, 0x41, 0x64, 0x64, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x41, 0x64, 0x64, 0x72, 0x73, 0x22, + 0x2e, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x41, + 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x41, 0x64, 0x64, 0x72, 0x22, + 0x11, 0x0a, 0x0f, 0x43, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x69, 0x70, 0x53, 0x68, + 0x6f, 0x70, 0x22, 0x59, 0x0a, 0x0f, 0x53, 0x43, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x69, + 0x70, 0x53, 0x68, 0x6f, 0x70, 0x12, 0x22, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x68, 0x6f, 0x70, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x66, + 0x72, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2a, 0x95, 0x02, + 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, + 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, + 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, + 0x17, 0x0a, 0x13, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x56, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, + 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x03, + 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x74, 0x74, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x6f, 0x6c, 0x64, 0x4f, 0x75, 0x74, 0x10, 0x06, + 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x41, 0x63, 0x63, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x4a, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, + 0x67, 0x68, 0x10, 0x08, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x56, 0x69, 0x70, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x09, + 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x53, 0x49, 0x4d, 0x43, + 0x6f, 0x64, 0x65, 0x10, 0x0a, 0x2a, 0x91, 0x05, 0x0a, 0x09, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x48, + 0x4f, 0x50, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x49, 0x4e, 0x46, 0x4f, + 0x10, 0xc4, 0x13, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xc5, 0x13, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, + 0x41, 0x44, 0x4c, 0x4f, 0x4f, 0x4b, 0x45, 0x44, 0x10, 0xc6, 0x13, 0x12, 0x1c, 0x0a, 0x17, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x41, 0x44, + 0x4c, 0x4f, 0x4f, 0x4b, 0x45, 0x44, 0x10, 0xc7, 0x13, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x56, 0x43, 0x50, 0x41, + 0x59, 0x53, 0x48, 0x4f, 0x50, 0x10, 0xc8, 0x13, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x56, 0x43, 0x50, 0x41, 0x59, + 0x53, 0x48, 0x4f, 0x50, 0x10, 0xc9, 0x13, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, + 0x47, 0x45, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xca, 0x13, 0x12, 0x22, 0x0a, 0x1d, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x45, 0x58, + 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xcb, 0x13, 0x12, + 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, + 0x50, 0x5f, 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xcc, 0x13, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, + 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xcd, 0x13, 0x12, 0x20, 0x0a, 0x1b, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x45, 0x58, + 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xce, 0x13, 0x12, 0x20, 0x0a, + 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, + 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcf, 0x13, 0x12, + 0x1a, 0x0a, 0x15, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x49, 0x56, 0x45, 0x43, + 0x4f, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xd2, 0x13, 0x12, 0x15, 0x0a, 0x10, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, + 0xd3, 0x13, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, + 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xd4, 0x13, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x47, 0x45, 0x54, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, + 0x4c, 0x49, 0x53, 0x54, 0x10, 0xd5, 0x13, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x47, 0x45, 0x54, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x4c, 0x49, + 0x53, 0x54, 0x10, 0xd6, 0x13, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x44, 0x44, 0x52, 0x10, 0xd7, 0x13, 0x12, + 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x41, 0x44, 0x44, 0x52, 0x10, 0xd8, 0x13, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x49, + 0x50, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x10, 0xd9, 0x13, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x49, + 0x50, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x10, 0xda, 0x13, 0x42, 0x24, 0x5a, 0x22, 0x6d, 0x6f, 0x6e, + 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x68, 0x6f, 0x70, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/shop/shop.proto b/protocol/shop/shop.proto index f77211a..f54c60b 100644 --- a/protocol/shop/shop.proto +++ b/protocol/shop/shop.proto @@ -160,6 +160,7 @@ message SCShopExchange{ OpResultCode RetCode = 1; int64 CreateTs = 2;//订单创建日期 string OrderId = 3;//订单号 + int32 GoodsId = 4;//商品Id } //PACKET_CS_SHOP_EXCHANGELIST diff --git a/worldsrv/action_shop.go b/worldsrv/action_shop.go index 92a22da..ee854bc 100644 --- a/worldsrv/action_shop.go +++ b/worldsrv/action_shop.go @@ -311,6 +311,7 @@ func (this *CSShopExchangeHandler) Process(s *netlib.Session, packetid int, data if !f { pack := &shop.SCShopExchange{ RetCode: shop.OpResultCode_OPRC_ExchangeLimitAcc, + GoodsId: msg.GetGoodsId(), } p.SendToClient(int(shop.SPacketID_PACKET_SC_SHOP_EXCHANGE), pack) return nil diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index a66e524..5cce9b1 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -811,6 +811,7 @@ func (this *ShopMgr) Exchange(p *Player, goodsId int32, username, mobile, commen cdata := this.GetExchangeData(p.Platform, goodsId) pack := &shop.SCShopExchange{ RetCode: shop.OpResultCode_OPRC_VCoinNotEnough, + GoodsId: goodsId, } if cdata == nil { pack.RetCode = shop.OpResultCode_OPRC_ExchangeSoldOut @@ -913,6 +914,7 @@ func (this *ShopMgr) Exchange(p *Player, goodsId int32, username, mobile, commen }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { pack := &shop.SCShopExchange{ RetCode: shop.OpResultCode_OPRC_Error, + GoodsId: goodsId, } as := data.(*webapi_proto.SACreateExchangeOrder) // 必不为空 From da90adb309f2c4e4a4c7b74d08324cad4ffada8b Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 13 Aug 2024 16:57:45 +0800 Subject: [PATCH 02/63] update public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 682e8f3..3785ce2 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 682e8f3ccf7d1056210c3ee68c9d1db271d9069d +Subproject commit 3785ce2859fcafdcb9504b8db9a4084ce464907f From cb907ae642b56b148eeeb078d40944c6145e0b05 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 14 Aug 2024 09:25:59 +0800 Subject: [PATCH 03/63] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etcd/register.go | 1 + worldsrv/etcd.go | 60 +++++++++++++++++++++++------------------------- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/etcd/register.go b/etcd/register.go index 9041ece..dc22dc2 100644 --- a/etcd/register.go +++ b/etcd/register.go @@ -18,6 +18,7 @@ import ( // key:监听的key // msgType:数据类型 // f:数据变更回调方法, completeKey:完整键, isInit:第一次主动拉取数据,event:事件类型, data:已经反序列化的数据,类型为msgType,是指针类型 +// **isInit** 为true时,表示是第一次主动拉取数据,此时允许耗时操作。为false时,表示是监听到数据变更,此时不允许耗时操作。 func Register(key string, msgType interface{}, f func(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{})) { createFunc := func() interface{} { tp := reflect.TypeOf(msgType) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index 5817a68..8ec882e 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -5,7 +5,6 @@ import ( "encoding/json" "strconv" "strings" - "time" "go.etcd.io/etcd/client/v3" "mongo.games.com/goserver/core/basic" @@ -247,36 +246,40 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e PlatformMgrSingleton.GetConfig(config.Platform).PermitStartTs = startTs PlatformMgrSingleton.GetConfig(config.Platform).PermitEndTs = endTs } - f := func() { - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - if st.StartTs <= 0 || st.EndTs <= 0 { - return nil - } - b, err := json.Marshal(st) + f1 := func() { + if st.StartTs <= 0 || st.EndTs <= 0 { + return + } + b, err := json.Marshal(st) + if err != nil { + logger.Logger.Errorf("permit startts save error: %v", err) + } else { + logger.Logger.Infof("update permit startts: %v %v", st.StartTs, st.EndTs) + err := model.UptStrKVGameData(common.PermitStartTsKey+config.Platform, string(b)) if err != nil { - logger.Logger.Errorf("permit startts save error: %v", err) - } else { - logger.Logger.Infof("update permit startts: %v %v", st.StartTs, st.EndTs) - err := model.UptStrKVGameData(common.PermitStartTsKey+config.Platform, string(b)) - if err != nil { - logger.Logger.Errorf("permit startts update error:%v", err) - } + logger.Logger.Errorf("permit startts update error:%v", err) } - return nil - }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { - if st.StartTs > 0 { - LogChannelSingleton.WriteLog(&model.BackendPermitCycle{ - Platform: config.Platform, - StartTs: st.StartTs, - EndTs: st.EndTs - 1, - }) - } - })).StartByExecutor("permit_start_ts") + } + } + f2 := func() { + if st.StartTs > 0 { + LogChannelSingleton.WriteLog(&model.BackendPermitCycle{ + Platform: config.Platform, + StartTs: st.StartTs, + EndTs: st.EndTs - 1, + }) + } } if isInit { - time.AfterFunc(time.Second*5, f) //todo 优化 + f1() + f2() } else { - f() + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + f1() + return nil + }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { + f2() + })).StartByExecutor("permit_start_ts") } case *webapi.ItemConfig: @@ -328,11 +331,6 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e default: logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey) } - PlatformMgrSingleton.GetConfig("1").GuideConfig = &webapi.GuideConfig{ - Platform: "1", - On: common.On, - Skip: common.On, - } } func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { From 28921649c5c2baec515ec969ea29d67a5d26eafc Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 14 Aug 2024 11:12:17 +0800 Subject: [PATCH 04/63] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/action_game.go | 972 +--------------------------------------- worldsrv/player.go | 2 +- 2 files changed, 13 insertions(+), 961 deletions(-) diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 280177e..a1524f6 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1,25 +1,22 @@ package main import ( - "errors" "fmt" "math/rand" "time" - webapi_proto "mongo.games.com/game/protocol/webapi" + "mongo.games.com/goserver/core/basic" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + "mongo.games.com/goserver/core/task" "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/proto" "mongo.games.com/game/protocol/gamehall" - "mongo.games.com/game/protocol/player" "mongo.games.com/game/protocol/server" + webapiproto "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/srvdata" - "mongo.games.com/game/webapi" - "mongo.games.com/goserver/core/basic" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/netlib" - "mongo.games.com/goserver/core/task" ) type CSEnterRoomPacketFactory struct { @@ -49,7 +46,7 @@ func (this *CSEnterRoomHandler) Process(s *netlib.Session, packetid int, data in var roomId int var gameId int var gameMode int - var cfg *webapi_proto.GameFree + var cfg *webapiproto.GameFree oldPlatform := p.Platform // 进入原来的房间 @@ -199,7 +196,7 @@ func (this *CSAudienceEnterRoomHandler) Process(s *netlib.Session, packetid int, var code = gamehall.OpResultCode_Game_OPRC_Sucess_Game var sp ScenePolicy var dbGameFree *server.DB_GameFree - var cfg *webapi_proto.GameFree + var cfg *webapiproto.GameFree scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId())) if scene == nil { code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game @@ -341,906 +338,6 @@ func (this *CSReturnRoomHandler) Process(s *netlib.Session, packetid int, data i return nil } -type CSJoinGamePacketFactory struct { -} -type CSJoinGameHandler struct { -} - -func (this *CSJoinGamePacketFactory) CreatePacket() interface{} { - pack := &gamehall.CSJoinGame{} - return pack -} -func (this *CSJoinGameHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { - logger.Logger.Trace("CSJoinGameHandler Process recv ", data) - if msg, ok := data.(*gamehall.CSJoinGame); ok { - p := PlayerMgrSington.GetPlayer(sid) - if p == nil { - logger.Logger.Warn("CSJoinGameHandler p == nil") - return nil - } - if p.scene == nil { - logger.Logger.Warn("CSJoinGameHandler scene == nil") - return nil - } - - newPlayer := PlayerMgrSington.GetPlayerBySnId(msg.GetSnId()) - if newPlayer != nil { - pack := &gamehall.SCJoinGame{ - MsgType: proto.Int32(msg.GetMsgType()), - OpRetCode: gamehall.OpResultCode_Game(0), - } - if !p.scene.IsTestScene() { - // 入场限额检查 - if p.scene.dbGameFree.GetLimitCoin() != 0 && int64(p.scene.dbGameFree.GetLimitCoin()) > p.Coin { - pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_MoneyNotEnough_Game - newPlayer.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_JOINGAME), pack) - return nil - } - // 携带金币检查 - if p.scene.dbGameFree.GetMaxCoinLimit() != 0 && int64(p.scene.dbGameFree.GetMaxCoinLimit()) < p.Coin && !p.IsRob { - pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_CoinTooMore_Game - newPlayer.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_JOINGAME), pack) - return nil - } - } - // 是否还有空座位 - if p.scene.IsFull() { - pack.OpRetCode = gamehall.OpResultCode_Game(1) - newPlayer.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_JOINGAME), pack) - return nil - } - p.scene.AudienceSit(newPlayer, -1) - newPlayer.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_JOINGAME), pack) - } - } - return nil -} - -type CSGetDataLogPacketFactory struct { -} -type CSGetDataLogHandler struct { -} - -func (this *CSGetDataLogPacketFactory) CreatePacket() interface{} { - pack := &player.CSGetDataLog{} - return pack -} - -func (this *CSGetDataLogHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { - logger.Logger.Trace("CSGetDataLogHandler Process recv ", data) - if msg, ok := data.(*player.CSGetDataLog); ok { - p := PlayerMgrSington.GetPlayer(sid) - if p == nil { - logger.Logger.Warn("CSGetDataLogHandler p == nil") - return nil - } - ts := int64(msg.GetVer()) - if ts == 0 { - ts = time.Now().Unix() - } - type LogData struct { - datas []model.CoinLog - err error - } - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - datas, err := model.GetCoinLogBySnidAndLessTs(p.Platform, p.SnId, ts) - return &LogData{datas: datas, err: err} - }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { - if d, ok := data.(*LogData); ok { - if d != nil && d.err == nil { - pack := &player.SCGetDataLog{ - DataType: msg.DataType, - } - ver := msg.GetVer() - for i := 0; i < len(d.datas); i++ { - ts := d.datas[i].Time.Unix() - if int32(ts) < ver { - ver = int32(ts) - } - pack.Datas = append(pack.Datas, &player.DataLog{ - LogType: proto.Int32(d.datas[i].LogType), - ChangeCount: proto.Int64(d.datas[i].Count), - RestCount: proto.Int64(d.datas[i].RestCount), - Remark: proto.String(d.datas[i].Remark), - Ts: proto.Int32(int32(ts)), - }) - } - pack.Ver = proto.Int32(ver) - proto.SetDefaults(pack) - p.SendToClient(int(player.PlayerPacketID_PACKET_SC_GETDATALOG), pack) - } - } - }), "GetCoinLogBySnidAndLessTs").StartByFixExecutor("coinlog_r") - } - return nil -} - -// 第三方-->系统 -func _LeaveTransferThird2SystemTask(p *Player) { - - if p.thrscene == 0 { - logger.Logger.Tracef("player snid=%v TransferThird2SystemTask p.thrscene == 0 return", p.SnId) - return - } - - //if p.thrscene.sceneMode != int(common.SceneMode_Thr) { - // logger.Logger.Infof("player snid=%v TransferThird2SystemTask p.scene == thrID return", p.SnId) - // return - //} - - if p.thridBalanceRefreshReqing { - logger.Logger.Tracef("player snid=%v TransferThird2SystemTask p.thridBalanceRefreshReqing == true return", p.SnId) - return - } - gainway := common.GainWay_Transfer_Thrid2System - plt := webapi.ThridPlatformMgrSington.FindPlatformByPlatformBaseGameId(p.thrscene) - if plt == nil { - logger.Logger.Tracef("player snid=%v TransferThird2SystemTask plt == nil return", p.SnId) - return - } - - oper := plt.GetPlatformBase().Name + "2System" - amount := int64(0) - timeStamp := time.Now().UnixNano() - p.thridBalanceRefreshReqing = true - //timeout := false - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - for i := int32(0); i < model.GameParamData.ThirdPltTransferMaxTry; { - var err error - var coinLog *model.PayCoinLog - var coinlogex *model.CoinLog - //var apiHasTransfer = false - remark := plt.GetPlatformBase().Name + "转出到系统" - //allow := plt.ReqIsAllowTransfer(p.SnId, p.Platform, p.Channel) - //if !allow { - // goto Rollback - //} - err, amount = plt.ReqLeaveGame(p.SnId, fmt.Sprintf("%v", p.thrscene), p.Ip, p.Platform, p.Channel) - if err != nil { - goto Rollback - } - if amount <= 0 { - return nil - } - if plt.GetPlatformBase().TransferInteger { - amount = (amount / 100) * 100 - if amount <= 0 { - return nil - } - } - timeStamp = time.Now().UnixNano() - //如果請求超時的話資金就不能從三方出來,玩家的錢只會少 - //err, timeout = plt.ReqTransfer(p.SnId, -amount, strconv.FormatInt(timeStamp, 10), p.Platform, p.Channel, p.Ip) - //if err != nil || timeout { - // goto Rollback - //} - //apiHasTransfer = true - coinLog = model.NewPayCoinLog(timeStamp, int32(p.SnId), amount, int32(gainway), oper, model.PayCoinLogType_Coin, 0) - timeStamp = coinLog.TimeStamp - err = model.InsertPayCoinLogs(p.Platform, coinLog) - if err != nil { - goto Rollback - } - coinlogex = model.NewCoinLogEx(&model.CoinLogParam{ - Platform: p.Platform, - SnID: p.SnId, - Channel: p.Channel, - ChangeType: common.BillTypeCoin, - ChangeNum: amount, - RemainNum: p.Coin + amount, - Add: 0, - LogType: int32(gainway), - GameID: 0, - GameFreeID: 0, - BaseCoin: 0, - Operator: oper, - Remark: remark, - }) - err = model.InsertCoinLog(coinlogex) - if err != nil { - goto Rollback - } - return nil - Rollback: - if coinLog != nil { - model.RemovePayCoinLog(p.Platform, coinLog.LogId) - } - if coinlogex != nil { - model.RemoveCoinLogOne(coinlogex.Platform, coinlogex.LogId) - } - //如果發現有任何一個超時,則就不在往下執行,因為不知道數據是否正確 - /* - if timeout { - logger.Logger.Errorf("player snid=%v third->system transfer %v timeout at try %v times,then stop try!", p.SnId, -amount, i+1) - break - } - if apiHasTransfer { - err, timeout = plt.ReqTransfer(p.SnId, amount, strconv.FormatInt(time.Now().UnixNano(), 10), p.Platform, p.Channel, p.Ip) - if err != nil { - logger.Logger.Errorf("player snid=%v third->system transfer rollback fail at try %v times", p.SnId, i+1) - } - } - //如果发现有任何一個超时,則就不在往下执行,因为不知道数据是否在三方已经处理 - if timeout { - logger.Logger.Errorf("player snid=%v third->system rollback transfer %v timeout at try %v times,then stop try!", p.SnId, amount, i+1) - break - } - */ - logger.Logger.Tracef("player snid=%v third->system transfer rollback at try %v times", p.SnId, i+1) - i++ - if i < model.GameParamData.ThirdPltTransferMaxTry { - time.Sleep(time.Duration(model.GameParamData.ThirdPltTransferInterval) * time.Second) - } - } - return errors.New("third->system transfer error >max try times!") - }), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { - statePack := &gamehall.SCThridGameBalanceUpdateState{} - if data != nil { - p.thirdBalanceRefreshMark[plt.GetPlatformBase().Name] = false - p.thridBalanceReqIsSucces = false - statePack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Error_Game - logger.Logger.Trace("SCThridAccountTransferHandler third->system transfer error:", data) - } else { - p.thridBalanceReqIsSucces = true - statePack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Sucess_Game - // p.thrscene = nil - p.Coin += amount - p.SetPayTs(timeStamp) - p.thirdBalanceRefreshMark[plt.GetPlatformBase().Name] = true - //ThirdPlatformMgrSington.AddThirdPlatformCoin(p.Platform, plt.GetPlatformBase().Tag, thirdBalance) - } - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE), statePack) - p.dirty = true - - if statePack.OpRetCode == gamehall.OpResultCode_Game_OPRC_Sucess_Game { - //退出成功 重置场景状态 - if p.thrscene != 0 { - p.thrscene = 0 - p.scene = nil - } - } - - p.thridBalanceRefreshReqing = false - p.diffData.Coin = -1 //强制更新金币 - p.SendDiffData() - return - }), "ThridAccountTransfer").Start() -} - -// 进入三方 -//type CSEnterThridGamePacketFactory struct { -//} -//type CSEnterThridGameHandler struct { -//} - -//func (this *CSEnterThridGamePacketFactory) CreatePacket() interface{} { -// pack := &gamehall.CSEnterThridGame{} -// return pack -//} - -//func (this *CSEnterThridGameHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { -// logger.Logger.Trace("CSEnterThridGameHandler Process recv ", data) -// p := PlayerMgrSington.GetPlayer(sid) -// if p == nil { -// logger.Logger.Warn("CSEnterThridGameHandler p == nil") -// return nil -// } -// -// if msg, ok := data.(*gamehall.CSEnterThridGame); ok { -// // msg.ThridGameId = proto.Int32(9010001) -// returnErrorCodeFunc := func(code gamehall.OpResultCode_Game) { -// pack := &gamehall.SCEnterThridGame{} -// pack.OpRetCode = code -// pack.ThridGameId = msg.ThridGameId -// p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_ENTERTHRIDGAME), pack) -// logger.Trace(pack) -// } -// //正在请求刷新余额中不能进入三方 -// if p.thridBalanceRefreshReqing { -// logger.Logger.Warn("CSEnterThridGameHandler client req thridBalanceRefreshReqing", p.SnId) -// returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_ThirdPltProcessing_Game) -// return nil -// } -// //msg.ThridGameId=proto.Int32(430010001) -// -// //找到对应的平台 -// thridPltGameItem, plt := ThirdPltGameMappingConfig.FindThirdInfoBySystemGameId(msg.ThridGameId) -// if thridPltGameItem == nil || plt == nil { -// logger.Logger.Infof("Player %v no platform", p.SnId) -// returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_RoomHadClosed_Game) -// return nil -// } -// -// if p.thrscene != 0 && p.thrscene != plt.GetPlatformBase().BaseGameID { -// logger.Logger.Infof("Player %v in game.", p.SnId) -// returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_ThirdPltProcessing_Game) -// return nil -// } -// if p.isDelete { -// returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_RoomHadClosed_Game) -// return nil -// } -// //pt := PlatformMgrSingleton.GetPackageTag(p.PackageID) -// //if pt != nil && pt.IsForceBind == 1 { -// // if p.BeUnderAgentCode == "" || p.BeUnderAgentCode == "0" { -// // returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_MustBindPromoter_Game) -// // return nil -// // } -// //} -// -// //检测房间状态是否开启 -// gps := PlatformMgrSingleton.GetGameFree(p.Platform, msg.GetThridGameId()) -// if gps == nil { -// logger.Logger.Infof("Player %v no cfg room close", p.SnId) -// -// returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_RoomHadClosed_Game) -// return nil -// } -// dbGameFree := gps.DbGameFree -// if dbGameFree == nil { -// logger.Logger.Infof("Player %v no gamefree", p.SnId) -// returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_RoomHadClosed_Game) -// return nil -// } -// pfConfig := PlatformMgrSingleton.GetPlatform(p.Platform) -// if pfConfig == nil || pfConfig.ThirdGameMerchant == nil || pfConfig.ThirdGameMerchant[int32(plt.GetPlatformBase().BaseGameID)] == 0 { -// logger.Logger.Infof("Player %v no pfcfg", p.SnId) -// -// // returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_RoomHadClosed_Game) -// // return nil -// } -// -// //检查限额,金额不足 -// if dbGameFree.GetLimitCoin() != 0 && p.GetCoin() < int64(dbGameFree.GetLimitCoin()) { -// returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_CoinNotEnough_Game) -// return nil -// } -// -// //检查平台配额是否足够 -// /*if plt.GetPlatformBase().IsNeedCheckQuota { -// dgQuota := ThirdPlatformMgrSington.GetThirdPlatformCoin(p.Platform, plt.GetPlatformBase().Tag) -// if dgQuota <= 0 || dgQuota <= p.GetCoin() { -// logger.Logger.Infof("Player snid %v %v platfrom Quota of game not enough.", p.SnId, plt.GetPlatformBase().Name) -// returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_Dg_QuotaNotEnough_Game) -// return nil -// } -// }*/ -// -// //检查场景是否开放或者存在,预设数据 -// //scene := SceneMgrSingleton.GetThirdScene(plt) -// //if scene != nil { -// p.thrscene = plt.GetPlatformBase().BaseGameID -// //检查场景是否开放或者存在,预设数据 -// scene := SceneMgrSingleton.GetThirdScene(plt) //仅用于占位 -// if scene != nil { -// p.scene = scene -// } -// //} else { -// // logger.Logger.Infof("Player %v no scene", p.SnId) -// -// // returnErrorCodeFunc(gamehall.OpResultCode_Game_OPRC_RoomHadClosed_Game) -// // return nil -// //} -// -// AskEnterThridGame(p, plt, thridPltGameItem, s) -// } -// return nil -//} -//func AskEnterThridGame(p *Player, plt webapi.IThirdPlatform, thridPltGameItem *server.DB_ThirdPlatformGameMapping, -// s *netlib.Session) { -// pack := &gamehall.SCEnterThridGame{} -// pack.ThridGameId = thridPltGameItem.SystemGameID -// amount := p.GetCoin() -// if plt.GetPlatformBase().TransferInteger { -// amount = (amount / 100) * 100 -// } -// p.Coin = p.GetCoin() - amount -// gainway := common.GainWay_Transfer_System2Thrid -// oper := "System2" + plt.GetPlatformBase().Name -// timeStamp := time.Now().UnixNano() -// p.thridBalanceRefreshReqing = true -// transferTimeOut := false -// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { -// var err error -// //var ok bool -// url := "" -// remark := "转入" + plt.GetPlatformBase().Name + thridPltGameItem.GetDesc() -// //thridPlatformCoin := int64(0) -// var coinLog *model.PayCoinLog -// var coinlogex *model.CoinLog -// /*err = ensureThridPltUserName(plt, p, amount, s.RemoteAddr()) -// if err != nil && err != webapi.ErrNoCreated { -// goto Rollback -// }*/ -// //ok = utils.RunPanicless(func() { -// err, url = enterThridPltUserName(plt, p, amount, thridPltGameItem.GetThirdGameID(), s.RemoteAddr()) -// //err, url = plt.ReqEnterGame(p.SnId, thridGameId, s.RemoteAddr(), p.Platform, p.Channel, p.Ip) -// //}) -// if err == webapi.ErrRequestTimeout { // 超时 -// transferTimeOut = true -// } -// //ok = true -// if err != nil && !transferTimeOut { -// logger.Logger.Errorf("plt.ReqEnterGame() snid:%v error: %v", p.SnId, err) -// if thrErr, ok := err.(webapi.ThirdError); ok { -// if thrErr.IsClose() { -// pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Thr_GameClose_Game -// } else { -// pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Error_Game -// } -// } else { -// pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Error_Game -// } -// goto Rollback -// } -// coinLog = model.NewPayCoinLog(timeStamp, int32(p.SnId), -amount, int32(gainway), oper, model.PayCoinLogType_Coin, 0) -// timeStamp = coinLog.TimeStamp -// err = model.InsertPayCoinLogs(p.Platform, coinLog) -// if err != nil { -// goto Rollback -// } -// coinlogex = model.NewCoinLogEx(&model.CoinLogParam{ -// Platform: p.Platform, -// SnID: p.SnId, -// ChangeType: common.BillTypeCoin, -// ChangeNum: -amount, -// RemainNum: p.Coin, -// Add: 0, -// LogType: int32(gainway), -// GameID: 0, -// GameFreeID: 0, -// BaseCoin: 0, -// Operator: oper, -// Remark: remark, -// }) -// err = model.InsertCoinLog(coinlogex) -// if err != nil { -// goto Rollback -// } -// // -// //err, transferTimeOut = plt.ReqTransfer(p.SnId, amount, strconv.FormatInt(timeStamp, 10), p.Platform, p.Channel, p.Ip) -// if transferTimeOut { -// logger.Logger.Errorf("plt.ReqTransfer() snid:%v error:%v", p.SnId, err) -// pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Error_Game -// goto Rollback -// } -// pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Sucess_Game -// pack.ScreenOrientationType = proto.Int32(thridPltGameItem.GetScreenOrientationType()) -// pack.EnterUrl = proto.String(url) -// return nil -// Rollback: -// pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Error_Game -// if coinLog != nil { -// model.RemovePayCoinLog(p.Platform, coinLog.LogId) -// } -// if coinlogex != nil { -// if transferTimeOut { -// err2 := model.UpdateCoinLogRemark(coinlogex.Platform, coinlogex.LogId, plt.GetPlatformBase().Name+"需人工处理") -// if err2 != nil { -// logger.Logger.Errorf("thr UpdateCoinLogRemark(%v) error: %v", coinlogex.LogId, err2) -// } -// } else { -// model.RemoveCoinLogOne(coinlogex.Platform, coinlogex.LogId) -// } -// -// } -// return errors.New("system->third transfer rollback!") -// }), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { -// if pack.GetOpRetCode() == gamehall.OpResultCode_Game_OPRC_Sucess_Game { -// // ThirdPlatformMgrSington.AddThirdPlatformCoin(p.Platform, plt.GetPlatformBase().Tag, -amount) -// p.SetPayTs(timeStamp) -// } else { -// //如帐变出现问题,就在日志里面查下面的输出信息!!! -// //如果转账超时,三方的转账是否成功就是未知的,这时不能将金币再加到玩家身上。 -// //如果出现超时问题,就需要人工对账。 -// //注意:这个地方说的超时已经包含CG工程Check订单后的超时 -// if transferTimeOut { -// logger.Logger.Errorf("CSEnterThridGameHandler player snid:%v transfer %v to %v timeout:", p.SnId, amount, plt.GetPlatformBase().Name) -// } else { -// p.Coin += amount -// } -// p.thrscene = 0 -// pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Error_Game -// logger.Logger.Trace("enterThridPltUserName system->third transfer error:", data) -// } -// p.dirty = true -// p.thirdBalanceRefreshMark[plt.GetPlatformBase().Name] = false -// -// p.SendDiffData() -// p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_ENTERTHRIDGAME), pack) -// p.thridBalanceRefreshReqing = false -// logger.Logger.Trace("CSEnterThridGameHandler send client:", pack) -// return -// }), "CSEnterThridGameHandler").Start() -//} -// -//func ensureThridPltUserName(pltform webapi.IThirdPlatform, p *Player, amount int64, ip string) error { -// var err error -// err = pltform.ReqCreateAccount(p.SnId, p.Platform, p.Channel, p.GetIP()) -// if err != nil { -// if err != webapi.ErrNoCreated { -// logger.Logger.Errorf("Snid=%v Plt=%v ReqCreateAccount error:%v", p.SnId, pltform.GetPlatformBase().Name, err) -// } -// return err -// } -// return nil -//} - -//func enterThridPltUserName(pltform webapi.IThirdPlatform, p *Player, amount int64, gameId, ip string) (err error, url string) { -// // (snId int32, gameId string, clientIP string, platform, channel string, amount int64) -// err, url = pltform.ReqEnterGame(p.SnId, "", p.GetIP(), p.Platform, p.Channel, amount) -// if err != nil { -// if err != webapi.ErrNoCreated { -// logger.Logger.Errorf("Snid=%v Plt=%v ReqEnterGame error:%v", p.SnId, pltform.GetPlatformBase().Name, err) -// } -// return err, "" -// } -// return -//} - -// 离开三方 -//type CSLeaveThridGamePacketFactory struct { -//} -//type CSLeaveThridGameHandler struct { -//} -// -//func (this *CSLeaveThridGamePacketFactory) CreatePacket() interface{} { -// pack := &gamehall.CSLeaveThridGame{} -// return pack -//} -// -//func (this *CSLeaveThridGameHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { -// if _, ok := data.(*gamehall.CSLeaveThridGame); ok { -// p := PlayerMgrSington.GetPlayer(sid) -// if p == nil { -// logger.Logger.Warn("CSLeaveThridGameHandler p == nil") -// return nil -// } -// logger.Logger.Trace("CSLeaveThridGameHandler Process recv ", p.SnId) -// _LeaveTransferThird2SystemTask(p) -// pack := &gamehall.SCLeaveThridGame{} -// pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Sucess_Game -// p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_LEAVETHRIDGAME), pack) -// } -// return nil -//} - -// 刷新 -type CSThridBalanceRefreshPacketFactory struct { -} -type CSThridBalanceRefreshHandler struct { -} - -func (this *CSThridBalanceRefreshPacketFactory) CreatePacket() interface{} { - pack := &gamehall.CSThridGameBalanceUpdate{} - return pack -} -func (this *CSThridBalanceRefreshHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { - logger.Logger.Trace("CSThridBalanceRefreshHandler Process recv ", data) - if _, ok := data.(*gamehall.CSThridGameBalanceUpdate); ok { - p := PlayerMgrSington.GetPlayer(sid) - if p == nil { - logger.Logger.Warn("CSThridBalanceRefreshHandler p == nil") - return nil - } - //if p.scene != nil { - // logger.Logger.Tracef("player snid=%v CSThridBalanceRefreshHandler p.scene != nil return", p.SnId) - // return nil - //} - - //请求太快,不做处理,给API减轻一些压力 - if p.thridBalanceRefreshReqing { - logger.Logger.Warn("CSThridBalanceRefreshHandler client req too fast") - pack := &gamehall.SCThridGameBalanceUpdate{ - OpRetCode: gamehall.OpResultCode_Game_OPRC_Error_Game, - } - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATE), pack) - return nil - } - // p.thridBalanceRefreshReqing = true - RefreshTransferThird2SystemTask(p) - /* - gainway := common.GainWay_Transfer_Thrid2System - waitgroup := webapi.ThridPlatformMgrSington.AllPlatformCount() - isSucces := true - timeout := false - - webapi.ThridPlatformMgrSington.ThridPlatformMap.Range(func(key, value interface{}) bool { - plt := value.(webapi.IThirdPlatform) - if stateOk, exist := p.thirdBalanceRefreshMark[plt.GetPlatformBase().Name]; exist && stateOk { - waitgroup-- - if 0 == waitgroup { - statePack := &gamehall.SCThridGameBalanceUpdateState{} - pack := &gamehall.SCThridGameBalanceUpdate{} - pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Sucess_Game - p.thridBalanceReqIsSucces = true - statePack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Sucess_Game - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE), statePack) - pack.Coin = proto.Int64(p.Coin) - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATE), pack) - p.thridBalanceRefreshReqing = false - } - return true - } - var tsk task.Task - tsk = task.New(nil, - task.CallableWrapper(func(o *basic.Object) interface{} { - plt := tsk.GetEnv("plt").(webapi.IThirdPlatform) - tsk.PutEnv("timeStamp", time.Now().UnixNano()) - var err error - var coinLog *model.PayCoinLog - var coinlogex *model.CoinLog - var apiHasTransfer = false - remark := "刷新" + plt.GetPlatformBase().Name + "转出到系统" - thirdBalance := int64(0) - //allow := false - if plt == nil { - logger.Logger.Tracef("player snid=%v CSThridBalanceRefreshHandler plt == nil return", p.SnId) - return int64(-1) - } - - pfConfig := PlatformMgrSingleton.GetPlatform(p.Platform) - if pfConfig == nil { - return int64(0) - } - - if pfConfig.ThirdGameMerchant == nil || pfConfig.ThirdGameMerchant[int32(plt.GetPlatformBase().BaseGameID)] == 0 { - return int64(0) - } - - oper := plt.GetPlatformBase().Name + "2System" - err = ensureThridPltUserName(plt, p, thirdBalance, s.RemoteAddr()) - if err != nil { - if err == webapi.ErrNoCreated { - return int64(0) - } - logger.Logger.Tracef("player snid=%v at %v ensureThridPltUserName() err: %v", p.SnId, plt.GetPlatformBase().Name, err) - goto Rollback - } - //allow = plt.ReqIsAllowTransfer(p.SnId, p.Platform, p.Channel) - //if !allow { - // logger.Logger.Tracef("player snid=%v at %v is not allow Transfer", p.SnId, plt.GetPlatformBase().Name) - // goto Rollback - //} - err, thirdBalance = plt.ReqUserBalance(p.SnId, p.Platform, p.Channel, p.Ip) - if err != nil { - logger.Logger.Tracef("player snid=%v at %v plt.ReqUserBalance() err: %v", p.SnId, plt.GetPlatformBase().Name, err) - goto Rollback - } - if thirdBalance <= 0 { - return int64(0) - } - if plt.GetPlatformBase().TransferInteger { - thirdBalance = (thirdBalance / 100) * 100 - if thirdBalance <= 0 { - return int64(0) - } - } - err, timeout = plt.ReqTransfer(p.SnId, -thirdBalance, strconv.FormatInt(time.Now().UnixNano(), 10), p.Platform, p.Channel, p.Ip) - if err != nil || timeout { - logger.Logger.Tracef("player snid=%v at %v plt.ReqTransfer() err: %v", p.SnId, plt.GetPlatformBase().Name, err) - goto Rollback - } - apiHasTransfer = true - coinLog = model.NewPayCoinLog(time.Now().UnixNano(), int32(p.SnId), thirdBalance, int32(gainway), oper, model.PayCoinLogType_Coin, 0) - tsk.PutEnv("timeStamp", coinLog.TimeStamp) - err = model.InsertPayCoinLogs(p.Platform, coinLog) - if err != nil { - logger.Logger.Tracef("player snid=%v at %v model.InsertPayCoinLogs() err: %v", p.SnId, plt.GetPlatformBase().Name, err) - goto Rollback - } - coinlogex = model.NewCoinLogEx(p.SnId, thirdBalance, p.Coin+thirdBalance, p.SafeBoxCoin, 0, int32(gainway), - 0, oper, remark, p.Platform, p.Channel, p.BeUnderAgentCode, 0, p.PackageID, int32(plt.GetPlatformBase().VultGameID)) - err = model.InsertCoinLog(coinlogex) - if err != nil { - logger.Logger.Tracef("player snid=%v at %v model.InsertCoinLogs() err: %v", p.SnId, plt.GetPlatformBase().Name, err) - goto Rollback - } - tsk.PutEnv("plt", plt) - return thirdBalance - Rollback: - if coinLog != nil { - model.RemovePayCoinLog(p.Platform, coinLog.LogId) - } - if coinlogex != nil { - model.RemoveCoinLogOne(coinlogex.Platform, coinlogex.LogId) - } - if timeout { - logger.Logger.Errorf("player snid=%v CSThridBalanceRefreshHandler transfer %v to %v timeout!", p.SnId, -thirdBalance, plt.GetPlatformBase().Name) - return int64(-1) - } - if apiHasTransfer { - err, timeout = plt.ReqTransfer(p.SnId, thirdBalance, strconv.FormatInt(time.Now().UnixNano(), 10), p.Platform, p.Channel, p.Ip) - if timeout { - logger.Logger.Errorf("player snid=%v CSThridBalanceRefreshHandler transfer rollback %v to %v timeout!", p.SnId, thirdBalance, plt.GetPlatformBase().Name) - } - } - return int64(-1) - }), - task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { - thirdBalance := data.(int64) - plt := tsk.GetEnv("plt").(webapi.IThirdPlatform) - timeStamp := tsk.GetEnv("timeStamp").(int64) - if thirdBalance < 0 { - isSucces = false - logger.Logger.Tracef("player snid=%v at platform=%v CSThridBalanceRefreshHandler third->system transfer fail", p.SnId, plt.GetPlatformBase().Name) - } else if thirdBalance > 0 { - p.thirdBalanceRefreshMark[plt.GetPlatformBase().Name] = true - p.Coin += thirdBalance - p.SetPayTs(timeStamp) - //ThirdPlatformMgrSington.AddThirdPlatformCoin(p.Platform, plt.GetPlatformBase().Tag, thirdBalance) - p.dirty = true - logger.Logger.Tracef("player snid=%v at platform=%v CSThridBalanceRefreshHandler third->system transfer succes", p.SnId, plt.GetPlatformBase().Name) - } else { - p.thirdBalanceRefreshMark[plt.GetPlatformBase().Name] = true - } - if atomic.AddInt32(&waitgroup, -1) == 0 { - p.diffData.Coin = -1 - p.SendDiffData() - statePack := &gamehall.SCThridGameBalanceUpdateState{} - pack := &gamehall.SCThridGameBalanceUpdate{} - if isSucces { - pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Sucess_Game - p.thridBalanceReqIsSucces = true - statePack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Sucess_Game - } else { - pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Error_Game - p.thridBalanceReqIsSucces = false - statePack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Error_Game - } - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE), statePack) - pack.Coin = proto.Int64(p.Coin) - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATE), pack) - p.thridBalanceRefreshReqing = false - logger.Logger.Tracef("SendToClient() player snid=%v at CSThridBalanceRefreshHandler() pack:%v", p.SnId, pack.String()) - } - }), "ThridAccount") - tsk.PutEnv("plt", value) - tsk.Start() - return true - })*/ - } - return nil -} - -// 刷新 第三方-->系统 -func RefreshTransferThird2SystemTask(p *Player) { - - /*if p.thrscene == 0 { - logger.Logger.Tracef("player snid=%v RefreshTransferThird2SystemTask p.thrscene == 0 return", p.SnId) - return - }*/ - - if p.thridBalanceRefreshReqing { - logger.Logger.Tracef("player snid=%v RefreshTransferThird2SystemTask p.thridBalanceRefreshReqing == true return", p.SnId) - return - } - gainway := common.GainWay_Transfer_Thrid2System - - amount := int64(0) - timeStamp := time.Now().UnixNano() - p.thridBalanceRefreshReqing = true - //timeout := false - webapi.ThridPlatformMgrSington.ThridPlatformMap.Range(func(key, value interface{}) bool { - // plt := value.(webapi.IThirdPlatform) - - var tsk task.Task - tsk = task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - // plt := webapi.ThridPlatformMgrSington.FindPlatformByPlatformBaseGameId(p.thrscene) - plt := tsk.GetEnv("plt").(webapi.IThirdPlatform) - if plt == nil { - logger.Logger.Tracef("player snid=%v RefreshTransferThird2SystemTask plt == nil return", p.SnId) - return errors.New("third->system plt is nil") - } - for i := int32(0); i < model.GameParamData.ThirdPltTransferMaxTry; { - var err error - var coinLog *model.PayCoinLog - var coinlogex *model.CoinLog - - oper := plt.GetPlatformBase().Name + "2System" - remark := "刷新" + plt.GetPlatformBase().Name + "转出到系统" - err, amount = plt.ReqUserBalance(p.SnId, p.Platform, p.Channel, p.Ip) - - // err, amount = plt.ReqLeaveGame(p.SnId, fmt.Sprintf("%v", p.thrscene), p.Ip, p.Platform, p.Channel) - if err != nil { - goto Rollback - } - if amount <= 0 { - return nil - } - if plt.GetPlatformBase().TransferInteger { - amount = (amount / 100) * 100 - if amount <= 0 { - return nil - } - } - timeStamp = time.Now().UnixNano() - - coinLog = model.NewPayCoinLog(timeStamp, int32(p.SnId), amount, int32(gainway), oper, model.PayCoinLogType_Coin, 0) - timeStamp = coinLog.TimeStamp - err = model.InsertPayCoinLogs(p.Platform, coinLog) - if err != nil { - goto Rollback - } - coinlogex = model.NewCoinLogEx(&model.CoinLogParam{ - Platform: p.Platform, - SnID: p.SnId, - Channel: p.Channel, - ChangeType: common.BillTypeCoin, - ChangeNum: amount, - RemainNum: p.Coin + amount, - Add: 0, - LogType: int32(gainway), - GameID: 0, - GameFreeID: 0, - BaseCoin: 0, - Operator: oper, - Remark: remark, - }) - err = model.InsertCoinLog(coinlogex) - if err != nil { - goto Rollback - } - return nil - Rollback: - if coinLog != nil { - model.RemovePayCoinLog(p.Platform, coinLog.LogId) - } - if coinlogex != nil { - model.RemoveCoinLogOne(coinlogex.Platform, coinlogex.LogId) - } - - logger.Logger.Tracef("player snid=%v third->system transfer rollback at try %v times", p.SnId, i+1) - i++ - if i < model.GameParamData.ThirdPltTransferMaxTry { - time.Sleep(time.Duration(model.GameParamData.ThirdPltTransferInterval) * time.Duration(time.Second)) - } - } - return errors.New("third->system transfer error >max try times!") - }), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { - statePack := &gamehall.SCThridGameBalanceUpdateState{} - pack := &gamehall.SCThridGameBalanceUpdate{} - plt := tsk.GetEnv("plt").(webapi.IThirdPlatform) - if data != nil { - p.thirdBalanceRefreshMark[plt.GetPlatformBase().Name] = false - p.thridBalanceReqIsSucces = false - statePack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Error_Game - pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Error_Game - logger.Logger.Trace("SCThridAccountTransferHandler third->system transfer error:", data) - } else { - p.thridBalanceReqIsSucces = true - statePack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Sucess_Game - pack.OpRetCode = gamehall.OpResultCode_Game_OPRC_Sucess_Game - // p.thrscene = nil - p.Coin += amount - p.SetPayTs(timeStamp) - p.thirdBalanceRefreshMark[plt.GetPlatformBase().Name] = true - //ThirdPlatformMgrSington.AddThirdPlatformCoin(p.Platform, plt.GetPlatformBase().Tag, thirdBalance) - } - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE), statePack) - - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE), statePack) - pack.Coin = proto.Int64(p.Coin) - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATE), pack) - p.dirty = true - - //这个地方虽然说拉取失败,但是为了不影响玩家玩其他的游戏,还是可以进入其它场景 - //后面玩家自己通过手动刷新余额 - if p.thrscene != 0 { - p.thrscene = 0 - p.scene = nil - } - p.thridBalanceRefreshReqing = false - p.diffData.Coin = -1 //强制更新金币 - p.SendDiffData() - return - }), "ThridAccountRefresh") - tsk.PutEnv("plt", value) - tsk.Start() - return true - }) -} - type CSQueryRoomInfoPacketFactory struct { } type CSQueryRoomInfoHandler struct { @@ -1324,30 +421,6 @@ func (this *CSQueryRoomInfoHandler) ProcessLocalGame(s *netlib.Session, packetid return nil } -type CSLotteryLogPacketFactory struct { -} -type CSLotteryLogHandler struct { -} - -func (this *CSLotteryLogPacketFactory) CreatePacket() interface{} { - pack := &gamehall.CSLotteryLog{} - return pack -} - -func (this *CSLotteryLogHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { - logger.Logger.Trace("CSLotteryLogHandler Process recv ", data) - //if msg, ok := data.(*gamehall.CSLotteryLog); ok { - // p := PlayerMgrSington.GetPlayer(sid) - // if p == nil { - // logger.Logger.Warn("CSLotteryLogHandler p == nil") - // return nil - // } - // - // LotteryMgrSington.FetchLotteryLog(p, msg.GetGameFreeId()) - //} - return nil -} - // 获取指定游戏配置 包括分场信息 type CSGetGameConfigPacketFactory struct { } @@ -1754,7 +827,7 @@ func (this *CSCreateRoomHandler) ProcessLocalGame(s *netlib.Session, packetid in var gameSite int32 var csp *CoinScenePool var baseScore int32 - var gps *webapi_proto.GameFree + var gps *webapiproto.GameFree //根据携带金额取可创房间 DB_Createroom arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr @@ -1907,7 +980,7 @@ func (this *CSCreateRoomHandler) ProcessThirteen(s *netlib.Session, packetid int var baseScore = msg.GetBaseCoin() var sp ScenePolicy var gamefreeId = msg.GetId() - var gps *webapi_proto.GameFree + var gps *webapiproto.GameFree var maxPlayerNum = int(msg.GetMaxPlayerNum()) var csp *CoinScenePool var roomId int @@ -2157,27 +1230,9 @@ func init() { // 返回房间 common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_RETURNROOM), &CSReturnRoomHandler{}) netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_RETURNROOM), &CSReturnRoomPacketFactory{}) - - common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_JOINGAME), &CSJoinGameHandler{}) - netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_JOINGAME), &CSJoinGamePacketFactory{}) - - common.RegisterHandler(int(player.PlayerPacketID_PACKET_CS_GETDATALOG), &CSGetDataLogHandler{}) - netlib.RegisterFactory(int(player.PlayerPacketID_PACKET_CS_GETDATALOG), &CSGetDataLogPacketFactory{}) - - //common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_ENTERTHRIDGAME), &CSEnterThridGameHandler{}) - //netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_ENTERTHRIDGAME), &CSEnterThridGamePacketFactory{}) - - //common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_LEAVETHRIDGAME), &CSLeaveThridGameHandler{}) - //netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_LEAVETHRIDGAME), &CSLeaveThridGamePacketFactory{}) - - //common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_THRIDGAMEBALANCEUPDATE), &CSThridBalanceRefreshHandler{}) - //netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_THRIDGAMEBALANCEUPDATE), &CSThridBalanceRefreshPacketFactory{}) - - //common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_GETPRIVATEROOMHISTORY), &CSGetPrivateRoomHistoryHandler{}) - //netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_GETPRIVATEROOMHISTORY), &CSGetPrivateRoomHistoryPacketFactory{}) - - common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_LOTTERYLOG), &CSLotteryLogHandler{}) - netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_LOTTERYLOG), &CSLotteryLogPacketFactory{}) + //观众坐下 + common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCESIT), &CSAudienceSitHandler{}) + netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCESIT), &CSAudienceSitPacketFactory{}) //获取指定游戏配置 包括分场信息 common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_GETGAMECONFIG), &CSGetGameConfigHandler{}) netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_GETGAMECONFIG), &CSGetGameConfigPacketFactory{}) @@ -2196,9 +1251,6 @@ func init() { //查询公共房间列表 common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_QUERYROOMINFO), &CSQueryRoomInfoHandler{}) netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_QUERYROOMINFO), &CSQueryRoomInfoPacketFactory{}) - //观众坐下 - common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCESIT), &CSAudienceSitHandler{}) - netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCESIT), &CSAudienceSitPacketFactory{}) //我的游戏信息及平台公告 common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_COMNOTICE), &CSRecordAndNoticeHandler{}) netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_COMNOTICE), &CSRecordAndNoticePacketFactory{}) diff --git a/worldsrv/player.go b/worldsrv/player.go index 9d9f81e..883a4d0 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -1594,7 +1594,7 @@ func (this *Player) DgGameLogout() { } func (this *Player) ThirdGameLogout() { - _LeaveTransferThird2SystemTask(this) + } func (this *Player) IsOnLine() bool { From 514d6fdf37e5524b0672cb92d1771c4eed92b5eb Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sun, 18 Aug 2024 00:03:03 +0800 Subject: [PATCH 05/63] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=AF=94=E8=B5=9B?= =?UTF-8?q?=E5=9C=BA=E5=A5=96=E5=8A=B1=E9=A2=86=E5=8F=96=E6=AC=A1=E6=95=B0?= =?UTF-8?q?=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/l_matchawardlog.go | 95 ++++++++++++++++++------------- model/matchawardlog.go | 25 ++++---- worldsrv/awardlogmgr.go | 1 + worldsrv/tournament.go | 101 ++++++++++++++++++++------------- 4 files changed, 129 insertions(+), 93 deletions(-) diff --git a/dbproxy/svc/l_matchawardlog.go b/dbproxy/svc/l_matchawardlog.go index 9539fcb..bbc8dfd 100644 --- a/dbproxy/svc/l_matchawardlog.go +++ b/dbproxy/svc/l_matchawardlog.go @@ -2,17 +2,26 @@ package svc import ( "errors" + "net/rpc" + + "github.com/globalsign/mgo" "github.com/globalsign/mgo/bson" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/dbproxy/mongo" "mongo.games.com/game/model" - "net/rpc" ) var ( - MatchAwardLogDBErr = errors.New("log_matchawardlog db open failed.") + MatchAwardDBErr = errors.New("log_matchawardlog db open failed") ) -func MatchAwardLogCollection(plt string) *mongo.Collection { +type MatchAwardLog struct { + AwardNum map[string]map[int32]int32 // 奖励数量 + Platform string +} + +func MatchAwardCollection(plt string) *mongo.Collection { s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, model.MatchAwardLogDBName) if s != nil { c, _ := s.DB().C(model.MatchAwardLogCollName) @@ -21,47 +30,55 @@ func MatchAwardLogCollection(plt string) *mongo.Collection { return nil } -func InsertOrUpdateMatchAwardLog(logs ...*model.MatchAwardLog) (err error) { - for _, log := range logs { - clog := MatchAwardLogCollection(log.Platform) - if clog == nil { - return - } - _, err = clog.Upsert(nil, log) - if err != nil { - // 处理错误 - return err - } - } - return +type MatchAwardSvc struct { } -type MatchAwardLogSvc struct { -} +func (svc *MatchAwardSvc) UpsertMatchAward(req *model.MatchAward, ret *bool) (err error) { + c := MatchAwardCollection(req.Platform) + if c == nil { + return MatchAwardDBErr + } -func (svc *MatchAwardLogSvc) InsertOrUpdateMatchAwardLog(args []*model.MatchAwardLog, ret *bool) (err error) { - err = InsertOrUpdateMatchAwardLog(args...) - if err == nil { - *ret = true - } - return -} -func GetMatchAward(plt string, ret *model.MatchAwardLog) (err error) { - clog := MatchAwardLogCollection(plt) - if clog == nil { - return nil - } - selecter := bson.M{"platform": plt} - err = clog.Find(selecter).One(&ret) + _, err = c.Upsert(nil, req) if err != nil { - return nil + logger.Logger.Errorf("UpsertMatchAward err:%v", err) } - return -} -func (svc *MatchAwardLogSvc) GetMatchAward(Plt string, ret *model.MatchAwardLog) (err error) { - err = GetMatchAward(Plt, ret) return err } -func init() { - rpc.Register(new(MatchAwardLogSvc)) + +func (svc *MatchAwardSvc) GetMatchAward(plt string, ret *model.MatchAward) (err error) { + c := MatchAwardCollection(plt) + if c == nil { + return MatchAwardDBErr + } + + // 旧数据 + old := &MatchAwardLog{} + err = c.Find(bson.M{"platform": "1"}).One(old) + if err == nil { + for k, v := range old.AwardNum { + d := &model.MatchAward{ + Platform: k, + Award: make(map[int32]int32), + } + for kk, vv := range v { + d.Award[kk] = vv + } + var b bool + svc.UpsertMatchAward(d, &b) + } + c.Remove(bson.M{"platform": "1"}) + } + // 旧数据 + + err = nil + err = c.Find(nil).One(ret) + if err != nil && err != mgo.ErrNotFound { + logger.Logger.Errorf("GetMatchAward err:%v", err) + } + return err +} + +func init() { + rpc.Register(new(MatchAwardSvc)) } diff --git a/model/matchawardlog.go b/model/matchawardlog.go index 07dcb94..448e106 100644 --- a/model/matchawardlog.go +++ b/model/matchawardlog.go @@ -4,30 +4,29 @@ import ( "time" ) -// 比赛详情 -type MatchAwardLog struct { - AwardNum map[string]map[int32]int32 // 奖励数量 - Platform string -} - var ( MatchAwardLogDBName = "log" MatchAwardLogCollName = "log_matchawardlog" ) -func NewMatchAwardLog() *MatchAwardLog { - return &MatchAwardLog{} +type MatchAward struct { + Platform string `bson:"-"` + Award map[int32]int32 } -func InsertOrUpdateMatchAwardLog(logs ...*MatchAwardLog) (err error) { +func UpsertMatchAward(data *MatchAward) error { if rpcCli == nil { return ErrRPClientNoConn } var ret bool - return rpcCli.CallWithTimeout("MatchAwardLogSvc.InsertOrUpdateMatchAwardLog", logs, &ret, time.Second*30) + return rpcCli.CallWithTimeout("MatchAwardSvc.UpsertMatchAward", data, &ret, time.Second*30) } -func GetMatchAwardLog(platform string) (ret MatchAwardLog, err error) { - err = rpcCli.CallWithTimeout("MatchAwardLogSvc.GetMatchAward", platform, &ret, time.Second*30) - return ret, err +func GetMatchAward(platform string) (ret *MatchAward, err error) { + if rpcCli == nil { + return nil, ErrRPClientNoConn + } + ret = new(MatchAward) + err = rpcCli.CallWithTimeout("MatchAwardSvc.GetMatchAward", platform, ret, time.Second*30) + return } diff --git a/worldsrv/awardlogmgr.go b/worldsrv/awardlogmgr.go index 6c9f71d..298f59c 100644 --- a/worldsrv/awardlogmgr.go +++ b/worldsrv/awardlogmgr.go @@ -128,6 +128,7 @@ func (this *AwardLogManager) Update() { func (this *AwardLogManager) Shutdown() { this.Save() + module.UnregisteModule(this) } func (this *AwardLogManager) OnHourTimer() { diff --git a/worldsrv/tournament.go b/worldsrv/tournament.go index 66755db..7ca1cc9 100644 --- a/worldsrv/tournament.go +++ b/worldsrv/tournament.go @@ -24,13 +24,8 @@ import ( "mongo.games.com/game/webapi" ) -func init() { - module.RegisteModule(TournamentMgr, time.Second, 0) - ClockMgrSington.RegisteSinker(TournamentMgr) -} - +// 如果这里比赛类型没有,默认是锦标赛 const ( - // 如果这里比赛类型没有,默认是锦标赛 MatchTypeNormal = iota + 1 // 锦标赛 MatchTypeChampion // 冠军赛/实物赛 MatchTypeVIP // vip比赛 @@ -54,6 +49,11 @@ const ( DaiDing = 2 // 待定 ) +func init() { + module.RegisteModule(TournamentMgr, time.Second, 0) + ClockMgrSington.RegisteSinker(TournamentMgr) +} + var TournamentMgr = NewTournament() type PerRankInfo struct { @@ -78,8 +78,8 @@ type SignupInfo struct { type PlayerRoundInfo struct { players []*PlayerMatchContext // 本轮结算信息 - ranks []*PlayerMatchContext // 本来排名 - num int // 本来完成人数 + ranks []*PlayerMatchContext // 本轮排名 + num int // 本轮完成人数 } type Tournament struct { @@ -91,7 +91,7 @@ type Tournament struct { playerWaitStart map[int32]int64 // 等待时间 玩家Id:等待时长秒 matches map[int32]map[int64]*TmMatch // 开始比赛的数据,比赛配置Id:比赛顺序序号:一场开始的比赛数据 players map[int64]map[int32]*PlayerMatchContext // 比赛中玩家 比赛顺序序号:玩家id:玩家信息 - roundPlayers map[int64]map[int32]*PlayerRoundInfo // 每轮比赛数据 比赛顺序序号:第几轮 + roundPlayers map[int64]map[int32]*PlayerRoundInfo // 每轮比赛数据备份 比赛顺序序号:第几轮 finalPerRank map[int64][]*PerRankInfo // 本场比赛排名,每淘汰一位记录一位,最后记录决赛玩家 比赛顺序序号 MatchAwardNum map[string]map[int32]int32 // 比赛配置Id:比赛奖励次數 } @@ -146,6 +146,7 @@ func (this *Tournament) checkData(cfg *webapiproto.GameMatchDate) bool { return true } +// 记录淘汰人员 func (this *Tournament) addFinalPlayer(sortId int64, p *PerRankInfo) { if this.finalPerRank[sortId] == nil { this.finalPerRank[sortId] = []*PerRankInfo{} @@ -153,6 +154,7 @@ func (this *Tournament) addFinalPlayer(sortId int64, p *PerRankInfo) { this.finalPerRank[sortId] = append(this.finalPerRank[sortId], p) } +// 查询一场比赛某轮的历史数据 func (this *Tournament) getRoundPlayer(sortId int64, round int32) *PlayerRoundInfo { _, ok := this.roundPlayers[sortId] if !ok { @@ -168,6 +170,8 @@ func (this *Tournament) getRoundPlayer(sortId int64, round int32) *PlayerRoundIn return v } +// GetSignUpPlayers 获取报名人员 +// id 比赛配置id func (this *Tournament) GetSignUpPlayers(platform string, id int32) map[int32]*TmPlayer { v, ok := this.signupPlayers[platform] if !ok { @@ -194,7 +198,7 @@ func (this *Tournament) UpdateData(init bool, data *webapiproto.GameMatchDateLis this.FixMatchTimeStamp(v) configs[v.Id] = v } else { - logger.Logger.Error("GameMatchDate error: ", v) + logger.Logger.Errorf("GameMatchDate check error: %v", v) } } @@ -239,14 +243,6 @@ func (this *Tournament) UpdateData(init bool, data *webapiproto.GameMatchDateLis } } this.GameMatchDateList[data.Platform] = configs - //拉取数据 - if this.MatchAwardNum == nil { - ret, err := model.GetMatchAwardLog(data.Platform) - logger.Logger.Tracef("ret = %v,err = %v", ret, err) - if err == nil { - this.MatchAwardNum = ret.AwardNum - } - } // 通知平台玩家数据更新 if !init { //todo 优化 @@ -796,6 +792,7 @@ func (this *Tournament) CreatePlayerMatchContext(p *Player, m *TmMatch, seq int) return nil } +// 是否淘汰 func (this *Tournament) isOut(sortId int64, snid int32) bool { if this.finalPerRank[sortId] != nil { for _, info := range this.finalPerRank[sortId] { @@ -1608,6 +1605,20 @@ func (this *Tournament) ModuleName() string { func (this *Tournament) Init() { logger.Logger.Trace("Tournament Init") + for _, v := range PlatformMgrSingleton.GetPlatforms() { + if v == nil || v.IdStr == "0" { + continue + } + ret, err := model.GetMatchAward(v.IdStr) + if err != nil { + logger.Logger.Tracef("GetMatchAward error %v", err) + continue + } + if this.MatchAwardNum == nil { + this.MatchAwardNum = make(map[string]map[int32]int32) + } + this.MatchAwardNum[v.IdStr] = ret.Award + } } func (this *Tournament) Update() { @@ -1650,35 +1661,42 @@ func (this *Tournament) Update() { } } } + func (this *Tournament) OnDayTimer() { - this.MatchAwardNum = make(map[string]map[int32]int32) - this.Save() - logger.Logger.Trace("比赛场每日库存清理!!!") + for k := range this.MatchAwardNum { + this.MatchAwardNum[k] = make(map[int32]int32) + } + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + this.SaveMatchAward() + return nil + }), nil, "save_match_award_times").Start() } + func (this *Tournament) Shutdown() { - // 保存数据 - this.Save() + this.SaveMatchAward() + module.UnregisteModule(this) } -func (this *Tournament) Save() { - logger.Logger.Info("保存比赛场每日奖励数据!!!!", this.MatchAwardNum) + +func (this *Tournament) SaveMatchAward() { if this.MatchAwardNum == nil { return } - for platform, _ := range this.MatchAwardNum { - matchAwardLog := model.NewMatchAwardLog() - matchAwardLog.AwardNum = this.MatchAwardNum - matchAwardLog.Platform = platform - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - err := model.InsertOrUpdateMatchAwardLog(matchAwardLog) - if err != nil { - logger.Logger.Error("saveMatchAwardLog error %v", err) - return err - } - return nil - }), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { - })).StartByFixExecutor("saveMatchAwardLogTask") + logger.Logger.Tracef("保存比赛场奖励领取次数") + for platform, v := range this.MatchAwardNum { + d := &model.MatchAward{ + Platform: platform, + Award: make(map[int32]int32), + } + for k, vv := range v { + d.Award[k] = vv + } + err := model.UpsertMatchAward(d) + if err != nil { + logger.Logger.Errorf("SaveMatchAward error %v", err) + } } } + func (this *Tournament) getWeekDay() int { getWeekNum := func(t time.Time) int { strWeek := []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} @@ -1711,7 +1729,7 @@ func (this *Tournament) FixMatchTimeStamp(d *webapiproto.GameMatchDate) { week := this.getWeekDay() st := time.Unix(d.MatchTimeStamp[0], 0).In(l) et := time.Unix(d.MatchTimeStamp[1], 0).In(l) - logger.Logger.Tracef("FixMatchTimeStamp 1 id:%v now:%v week:%v start:%v end:%v", d.Id, bTs, bTs.Weekday(), st, et) + //logger.Logger.Tracef("FixMatchTimeStamp 1 id:%v now:%v week:%v start:%v end:%v", d.Id, bTs, bTs.Weekday(), st, et) // 重复时间段比赛时间 for _, v := range d.MatchTimeWeek { if v == int32(week) { @@ -1723,8 +1741,7 @@ func (this *Tournament) FixMatchTimeStamp(d *webapiproto.GameMatchDate) { st = time.Unix(d.MatchTimeStamp[0], 0).In(l) et = time.Unix(d.MatchTimeStamp[1], 0).In(l) - logger.Logger.Tracef("FixMatchTimeStamp 2 id:%v now:%v week:%v start:%v end:%v", d.Id, bTs, bTs.Weekday(), st, et) - + //logger.Logger.Tracef("FixMatchTimeStamp 2 id:%v now:%v week:%v start:%v end:%v", d.Id, bTs, bTs.Weekday(), st, et) break } } @@ -1738,6 +1755,8 @@ func (this *Tournament) OnHourTimer() { } } +// GetMatchAwardNum 剩余奖励数量 +// id 比赛配置id func (this *Tournament) GetMatchAwardNum(platform string, id int32) int32 { var num int32 if this.MatchAwardNum != nil && this.MatchAwardNum[platform] != nil { From e93616dcc9780ca94c1b5042db33e5eb2f886c80 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 15 Aug 2024 14:01:18 +0800 Subject: [PATCH 06/63] =?UTF-8?q?=E6=AF=94=E8=B5=9B=E8=A7=82=E6=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/gameparam.json | 2 +- etcd/keyconf.go | 1 + model/config.go | 17 + protocol/doc.md | 2 +- protocol/tournament/tournament.pb.go | 984 +++++++++++++++++---- protocol/tournament/tournament.proto | 58 ++ protocol/webapi/common.pb.go | 1198 ++++++++++++++------------ protocol/webapi/common.proto | 8 + worldsrv/action_game.go | 10 +- worldsrv/action_tournament.go | 134 ++- worldsrv/coinscenemgr.go | 1 + worldsrv/etcd.go | 9 + worldsrv/matchscenemgr.go | 1 - worldsrv/scene.go | 15 + worldsrv/scenemgr.go | 13 + worldsrv/tmmatch.go | 6 + worldsrv/tournament.go | 162 ++++ 17 files changed, 1915 insertions(+), 706 deletions(-) diff --git a/data/gameparam.json b/data/gameparam.json index d0956de..73b931f 100644 --- a/data/gameparam.json +++ b/data/gameparam.json @@ -6,7 +6,7 @@ "VerifyClientVersion":true, "SrvMaintain":false, "WhiteHttpAddr": [], - "HundredScenePreCreate":true, + "HundredScenePreCreate":false, "WriteEventLog": true, "SpreadAccountQPT":100, "FakeVerifyCode":"123456", diff --git a/etcd/keyconf.go b/etcd/keyconf.go index 8482f5d..f28940f 100644 --- a/etcd/keyconf.go +++ b/etcd/keyconf.go @@ -39,4 +39,5 @@ const ( ETCDKEY_RANK_TYPE = "/game/RankType" // 排行榜奖励配置 ETCDKEY_AWARD_CONFIG = "/game/awardlog_config" //获奖记录 ETCDKEY_GUIDE = "/game/guide_config" //新手引导配置 + ETCDKEY_MatchAudience = "/game/match_audience" //比赛观众 ) diff --git a/model/config.go b/model/config.go index ce926e0..3d47312 100644 --- a/model/config.go +++ b/model/config.go @@ -135,6 +135,7 @@ type AllConfig struct { *webapi.AwardLogConfig // 新手引导配置 *webapi.GuideConfig + MatchAudience map[int32]*webapi.MatchAudience // 比赛观众列表 } type GlobalConfig struct { @@ -163,6 +164,7 @@ func (cm *ConfigMgr) GetConfig(platform string) *AllConfig { EntrySwitch: make(map[int32]*webapi.EntrySwitch), ShopInfos: make(map[int32]*ShopInfo), ChannelSwitch: make(map[int32]*webapi.ChannelSwitchConfig), + MatchAudience: make(map[int32]*webapi.MatchAudience), } cm.platform[platform] = c } @@ -356,3 +358,18 @@ func (cm *ConfigMgr) GetSkinSkillMaxLevel(plt string, skinId int32) int32 { } return level } + +func (cm *ConfigMgr) AddMatchAudience(d *webapi.MatchAudience) { + cfg := cm.GetConfig(d.Platform) + cfg.MatchAudience[d.GetSnId()] = d +} + +func (cm *ConfigMgr) DelMatchAudience(d *webapi.MatchAudience) { + delete(cm.GetConfig(d.Platform).MatchAudience, d.GetSnId()) +} + +// IsMatchAudience 是不是比赛场观众 +func (cm *ConfigMgr) IsMatchAudience(plt string, snId int32) bool { + _, ok := cm.GetConfig(plt).MatchAudience[snId] + return ok +} diff --git a/protocol/doc.md b/protocol/doc.md index 2f86c0b..6d8f4f4 100644 --- a/protocol/doc.md +++ b/protocol/doc.md @@ -66,7 +66,7 @@ - 2720~2739 #### tournament(锦标赛) -- 2740~2759 +- 2740~2779 #### RankMatch 排位赛 - 2780~2800 diff --git a/protocol/tournament/tournament.pb.go b/protocol/tournament/tournament.pb.go index eeb30bb..1b84ad3 100644 --- a/protocol/tournament/tournament.pb.go +++ b/protocol/tournament/tournament.pb.go @@ -39,6 +39,10 @@ const ( TOURNAMENTID_PACKET_TM_SCTMSeasonRank TOURNAMENTID = 2754 //赛季排行榜 TOURNAMENTID_PACKET_TM_CSTMSeasonAward TOURNAMENTID = 2755 //领取赛季奖励 TOURNAMENTID_PACKET_TM_SCTMSeasonAward TOURNAMENTID = 2756 //领取赛季奖励 + TOURNAMENTID_PACKET_TM_CSMatchList TOURNAMENTID = 2757 // 比赛列表 + TOURNAMENTID_PACKET_TM_SCMatchList TOURNAMENTID = 2758 // 比赛列表 + TOURNAMENTID_PACKET_TM_CSRoomList TOURNAMENTID = 2759 // 比赛房间列表 + TOURNAMENTID_PACKET_TM_SCRoomList TOURNAMENTID = 2760 // 比赛房间列表 ) // Enum value maps for TOURNAMENTID. @@ -60,6 +64,10 @@ var ( 2754: "PACKET_TM_SCTMSeasonRank", 2755: "PACKET_TM_CSTMSeasonAward", 2756: "PACKET_TM_SCTMSeasonAward", + 2757: "PACKET_TM_CSMatchList", + 2758: "PACKET_TM_SCMatchList", + 2759: "PACKET_TM_CSRoomList", + 2760: "PACKET_TM_SCRoomList", } TOURNAMENTID_value = map[string]int32{ "PACKET_TM_ZERO": 0, @@ -78,6 +86,10 @@ var ( "PACKET_TM_SCTMSeasonRank": 2754, "PACKET_TM_CSTMSeasonAward": 2755, "PACKET_TM_SCTMSeasonAward": 2756, + "PACKET_TM_CSMatchList": 2757, + "PACKET_TM_SCMatchList": 2758, + "PACKET_TM_CSRoomList": 2759, + "PACKET_TM_SCRoomList": 2760, } ) @@ -400,9 +412,10 @@ type TMInfo struct { AwardShow string `protobuf:"bytes,18,opt,name=AwardShow,proto3" json:"AwardShow,omitempty"` //主要奖励展示 Rule string `protobuf:"bytes,19,opt,name=Rule,proto3" json:"Rule,omitempty"` SortId int32 `protobuf:"varint,20,opt,name=SortId,proto3" json:"SortId,omitempty"` - OnChannelName []string `protobuf:"bytes,21,rep,name=OnChannelName,proto3" json:"OnChannelName,omitempty"` //在哪个渠道开启 - ShowId int32 `protobuf:"varint,22,opt,name=ShowId,proto3" json:"ShowId,omitempty"` // 比赛区分 - AwardNum int32 `protobuf:"varint,23,opt,name=AwardNum,proto3" json:"AwardNum,omitempty"` //比赛奖励剩余数量 + OnChannelName []string `protobuf:"bytes,21,rep,name=OnChannelName,proto3" json:"OnChannelName,omitempty"` //在哪个渠道开启 + ShowId int32 `protobuf:"varint,22,opt,name=ShowId,proto3" json:"ShowId,omitempty"` // 比赛区分 + AwardNum int32 `protobuf:"varint,23,opt,name=AwardNum,proto3" json:"AwardNum,omitempty"` //比赛奖励剩余数量 + AudienceSwitch int32 `protobuf:"varint,27,opt,name=AudienceSwitch,proto3" json:"AudienceSwitch,omitempty"` // 观战开关 1开启 2关闭 } func (x *TMInfo) Reset() { @@ -598,6 +611,13 @@ func (x *TMInfo) GetAwardNum() int32 { return 0 } +func (x *TMInfo) GetAudienceSwitch() int32 { + if x != nil { + return x.AudienceSwitch + } + return 0 +} + type MatchTypeInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1683,6 +1703,521 @@ func (x *SCTMSeasonAward) GetCode() int32 { return 0 } +//PACKET_TM_CSMatchList +type CSMatchList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MatchId int64 `protobuf:"varint,1,opt,name=MatchId,proto3" json:"MatchId,omitempty"` // 比赛id 0表示所有比赛场 + Tp int32 `protobuf:"varint,2,opt,name=Tp,proto3" json:"Tp,omitempty"` // 房间类型 0所有房间 1可观战房间 +} + +func (x *CSMatchList) Reset() { + *x = CSMatchList{} + if protoimpl.UnsafeEnabled { + mi := &file_tournament_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSMatchList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSMatchList) ProtoMessage() {} + +func (x *CSMatchList) ProtoReflect() protoreflect.Message { + mi := &file_tournament_proto_msgTypes[22] + 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 CSMatchList.ProtoReflect.Descriptor instead. +func (*CSMatchList) Descriptor() ([]byte, []int) { + return file_tournament_proto_rawDescGZIP(), []int{22} +} + +func (x *CSMatchList) GetMatchId() int64 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *CSMatchList) GetTp() int32 { + if x != nil { + return x.Tp + } + return 0 +} + +type MatchPlayer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家id + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` // 玩家名字 + HeadUrl string `protobuf:"bytes,3,opt,name=HeadUrl,proto3" json:"HeadUrl,omitempty"` //头像地址 + UseRoleId int32 `protobuf:"varint,4,opt,name=UseRoleId,proto3" json:"UseRoleId,omitempty"` //使用的人物模型id + UseSkinId int32 `protobuf:"varint,5,opt,name=UseSkinId,proto3" json:"UseSkinId,omitempty"` // 皮肤id + Rank int32 `protobuf:"varint,6,opt,name=Rank,proto3" json:"Rank,omitempty"` //排名 + Score int32 `protobuf:"varint,7,opt,name=Score,proto3" json:"Score,omitempty"` //分数 +} + +func (x *MatchPlayer) Reset() { + *x = MatchPlayer{} + if protoimpl.UnsafeEnabled { + mi := &file_tournament_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchPlayer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchPlayer) ProtoMessage() {} + +func (x *MatchPlayer) ProtoReflect() protoreflect.Message { + mi := &file_tournament_proto_msgTypes[23] + 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 MatchPlayer.ProtoReflect.Descriptor instead. +func (*MatchPlayer) Descriptor() ([]byte, []int) { + return file_tournament_proto_rawDescGZIP(), []int{23} +} + +func (x *MatchPlayer) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *MatchPlayer) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *MatchPlayer) GetHeadUrl() string { + if x != nil { + return x.HeadUrl + } + return "" +} + +func (x *MatchPlayer) GetUseRoleId() int32 { + if x != nil { + return x.UseRoleId + } + return 0 +} + +func (x *MatchPlayer) GetUseSkinId() int32 { + if x != nil { + return x.UseSkinId + } + return 0 +} + +func (x *MatchPlayer) GetRank() int32 { + if x != nil { + return x.Rank + } + return 0 +} + +func (x *MatchPlayer) GetScore() int32 { + if x != nil { + return x.Score + } + return 0 +} + +type MatchInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MatchId int64 `protobuf:"varint,1,opt,name=MatchId,proto3" json:"MatchId,omitempty"` // 比赛id + InstanceId int64 `protobuf:"varint,2,opt,name=InstanceId,proto3" json:"InstanceId,omitempty"` // 本场比赛id + Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"` // 比赛名字 + Round int32 `protobuf:"varint,4,opt,name=Round,proto3" json:"Round,omitempty"` // 当前第几轮 + TotalRound int32 `protobuf:"varint,5,opt,name=TotalRound,proto3" json:"TotalRound,omitempty"` // 总轮数 + RemainNum int32 `protobuf:"varint,6,opt,name=RemainNum,proto3" json:"RemainNum,omitempty"` // 剩余人数 + Players []*MatchPlayer `protobuf:"bytes,7,rep,name=Players,proto3" json:"Players,omitempty"` // 玩家列表 +} + +func (x *MatchInfo) Reset() { + *x = MatchInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_tournament_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchInfo) ProtoMessage() {} + +func (x *MatchInfo) ProtoReflect() protoreflect.Message { + mi := &file_tournament_proto_msgTypes[24] + 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 MatchInfo.ProtoReflect.Descriptor instead. +func (*MatchInfo) Descriptor() ([]byte, []int) { + return file_tournament_proto_rawDescGZIP(), []int{24} +} + +func (x *MatchInfo) GetMatchId() int64 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *MatchInfo) GetInstanceId() int64 { + if x != nil { + return x.InstanceId + } + return 0 +} + +func (x *MatchInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *MatchInfo) GetRound() int32 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *MatchInfo) GetTotalRound() int32 { + if x != nil { + return x.TotalRound + } + return 0 +} + +func (x *MatchInfo) GetRemainNum() int32 { + if x != nil { + return x.RemainNum + } + return 0 +} + +func (x *MatchInfo) GetPlayers() []*MatchPlayer { + if x != nil { + return x.Players + } + return nil +} + +type SCTMMatchList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + List []*MatchInfo `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` + MatchId int64 `protobuf:"varint,2,opt,name=MatchId,proto3" json:"MatchId,omitempty"` + Tp int32 `protobuf:"varint,3,opt,name=Tp,proto3" json:"Tp,omitempty"` +} + +func (x *SCTMMatchList) Reset() { + *x = SCTMMatchList{} + if protoimpl.UnsafeEnabled { + mi := &file_tournament_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCTMMatchList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCTMMatchList) ProtoMessage() {} + +func (x *SCTMMatchList) ProtoReflect() protoreflect.Message { + mi := &file_tournament_proto_msgTypes[25] + 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 SCTMMatchList.ProtoReflect.Descriptor instead. +func (*SCTMMatchList) Descriptor() ([]byte, []int) { + return file_tournament_proto_rawDescGZIP(), []int{25} +} + +func (x *SCTMMatchList) GetList() []*MatchInfo { + if x != nil { + return x.List + } + return nil +} + +func (x *SCTMMatchList) GetMatchId() int64 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *SCTMMatchList) GetTp() int32 { + if x != nil { + return x.Tp + } + return 0 +} + +//PACKET_TM_CSRoomList +type CSRoomList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int64 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 本场比赛id 0表示所有房间 + Tp int32 `protobuf:"varint,2,opt,name=Tp,proto3" json:"Tp,omitempty"` // 房间类型 0所有房间 1可观战房间 +} + +func (x *CSRoomList) Reset() { + *x = CSRoomList{} + if protoimpl.UnsafeEnabled { + mi := &file_tournament_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSRoomList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSRoomList) ProtoMessage() {} + +func (x *CSRoomList) ProtoReflect() protoreflect.Message { + mi := &file_tournament_proto_msgTypes[26] + 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 CSRoomList.ProtoReflect.Descriptor instead. +func (*CSRoomList) Descriptor() ([]byte, []int) { + return file_tournament_proto_rawDescGZIP(), []int{26} +} + +func (x *CSRoomList) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *CSRoomList) GetTp() int32 { + if x != nil { + return x.Tp + } + return 0 +} + +type MatchRoom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId int64 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` // 房间id + MatchId int64 `protobuf:"varint,2,opt,name=MatchId,proto3" json:"MatchId,omitempty"` // 比赛id + InstanceId int64 `protobuf:"varint,3,opt,name=InstanceId,proto3" json:"InstanceId,omitempty"` // 本场比赛id + Round int32 `protobuf:"varint,4,opt,name=Round,proto3" json:"Round,omitempty"` // 当前第几轮 + TotalRound int32 `protobuf:"varint,5,opt,name=TotalRound,proto3" json:"TotalRound,omitempty"` // 总轮数 + Players []*MatchPlayer `protobuf:"bytes,7,rep,name=Players,proto3" json:"Players,omitempty"` // 玩家列表 +} + +func (x *MatchRoom) Reset() { + *x = MatchRoom{} + if protoimpl.UnsafeEnabled { + mi := &file_tournament_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchRoom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchRoom) ProtoMessage() {} + +func (x *MatchRoom) ProtoReflect() protoreflect.Message { + mi := &file_tournament_proto_msgTypes[27] + 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 MatchRoom.ProtoReflect.Descriptor instead. +func (*MatchRoom) Descriptor() ([]byte, []int) { + return file_tournament_proto_rawDescGZIP(), []int{27} +} + +func (x *MatchRoom) GetRoomId() int64 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *MatchRoom) GetMatchId() int64 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *MatchRoom) GetInstanceId() int64 { + if x != nil { + return x.InstanceId + } + return 0 +} + +func (x *MatchRoom) GetRound() int32 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *MatchRoom) GetTotalRound() int32 { + if x != nil { + return x.TotalRound + } + return 0 +} + +func (x *MatchRoom) GetPlayers() []*MatchPlayer { + if x != nil { + return x.Players + } + return nil +} + +type SCRoomList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + List []*MatchRoom `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` + Id int64 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` + Tp int32 `protobuf:"varint,3,opt,name=Tp,proto3" json:"Tp,omitempty"` +} + +func (x *SCRoomList) Reset() { + *x = SCRoomList{} + if protoimpl.UnsafeEnabled { + mi := &file_tournament_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCRoomList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCRoomList) ProtoMessage() {} + +func (x *SCRoomList) ProtoReflect() protoreflect.Message { + mi := &file_tournament_proto_msgTypes[28] + 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 SCRoomList.ProtoReflect.Descriptor instead. +func (*SCRoomList) Descriptor() ([]byte, []int) { + return file_tournament_proto_rawDescGZIP(), []int{28} +} + +func (x *SCRoomList) GetList() []*MatchRoom { + if x != nil { + return x.List + } + return nil +} + +func (x *SCRoomList) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *SCRoomList) GetTp() int32 { + if x != nil { + return x.Tp + } + return 0 +} + var File_tournament_proto protoreflect.FileDescriptor var file_tournament_proto_rawDesc = []byte{ @@ -1706,7 +2241,7 @@ var file_tournament_proto_rawDesc = []byte{ 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x44, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb2, 0x06, + 0x28, 0x05, 0x52, 0x09, 0x44, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xda, 0x06, 0x0a, 0x06, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, @@ -1758,140 +2293,206 @@ var file_tournament_proto_rawDesc = []byte{ 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4e, - 0x75, 0x6d, 0x22, 0x5b, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, - 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x4f, 0x6e, 0x12, - 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, - 0x6e, 0x0a, 0x09, 0x53, 0x43, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x2a, 0x0a, 0x06, - 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, - 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x06, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x35, 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x6f, 0x75, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x22, 0x0a, 0x0c, 0x43, 0x53, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x54, 0x4d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, - 0x4d, 0x49, 0x64, 0x22, 0x5a, 0x0a, 0x06, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x16, 0x0a, - 0x06, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, - 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x57, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x57, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x22, - 0x6c, 0x0a, 0x0c, 0x53, 0x43, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x54, 0x4d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, - 0x4d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x54, - 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x06, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x22, 0x38, 0x0a, - 0x0a, 0x43, 0x53, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4f, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x4d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x54, 0x4d, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x0a, 0x53, 0x43, 0x53, 0x69, 0x67, - 0x6e, 0x52, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x57, 0x61, 0x69, 0x74, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x57, 0x61, 0x69, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x49, 0x0a, - 0x0d, 0x53, 0x43, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x78, 0x53, - 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, - 0x78, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, 0x22, 0x25, 0x0a, 0x09, 0x53, 0x43, 0x54, 0x4d, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, - 0x6b, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x30, 0x0a, 0x08, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x22, 0x88, 0x03, 0x0a, - 0x0f, 0x53, 0x43, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x43, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, - 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x09, 0x52, 0x61, 0x6e, - 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, - 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x39, 0x0a, 0x0b, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x10, 0x0a, 0x0e, 0x43, 0x53, 0x54, 0x4d, 0x53, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x8c, 0x01, 0x0a, 0x0e, 0x53, 0x43, - 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, - 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0f, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x54, 0x69, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x4c, 0x76, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x4c, 0x76, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x61, 0x73, 0x74, 0x4c, 0x76, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x61, 0x73, 0x74, 0x4c, 0x76, 0x12, 0x18, - 0x0a, 0x07, 0x49, 0x73, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x49, 0x73, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x58, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x4c, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4c, 0x76, 0x12, 0x12, - 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, - 0x6e, 0x6b, 0x22, 0x10, 0x0a, 0x0e, 0x43, 0x53, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x52, 0x61, 0x6e, 0x6b, 0x22, 0x4a, 0x0a, 0x0e, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x38, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x52, 0x61, 0x6e, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x6f, - 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, - 0x61, 0x6e, 0x6b, 0x52, 0x0b, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x73, - 0x22, 0x21, 0x0a, 0x0f, 0x43, 0x53, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x4c, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x4c, 0x76, 0x22, 0x35, 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x4c, 0x76, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x4c, 0x76, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x2a, 0xd9, 0x03, 0x0a, 0x0c, 0x54, - 0x4f, 0x55, 0x52, 0x4e, 0x41, 0x4d, 0x45, 0x4e, 0x54, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x0e, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, - 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xb4, 0x15, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x10, - 0xb5, 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, - 0x43, 0x53, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xb6, 0x15, 0x12, - 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, - 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xb7, 0x15, 0x12, 0x19, 0x0a, 0x14, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x53, 0x69, 0x67, 0x6e, - 0x52, 0x61, 0x63, 0x65, 0x10, 0xb8, 0x15, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x61, 0x63, 0x65, 0x10, - 0xb9, 0x15, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, - 0x53, 0x43, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, 0x10, 0xba, 0x15, - 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, - 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xbb, 0x15, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, - 0x54, 0x4d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x10, 0xbc, 0x15, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, + 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x41, 0x75, 0x64, 0x69, + 0x65, 0x6e, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x5b, 0x0a, 0x0d, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x09, 0x53, 0x43, 0x54, 0x4d, 0x49, + 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x35, 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x54, + 0x79, 0x70, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x22, 0x0a, 0x0c, 0x43, 0x53, 0x54, 0x4d, 0x52, + 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x4d, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x4d, 0x49, 0x64, 0x22, 0x5a, 0x0a, 0x06, 0x54, + 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x57, 0x69, 0x6e, + 0x6e, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x57, 0x69, + 0x6e, 0x6e, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x22, 0x6c, 0x0a, 0x0c, 0x53, 0x43, 0x54, 0x4d, 0x52, + 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x4d, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x4d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x54, + 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x54, 0x4d, 0x52, + 0x61, 0x6e, 0x6b, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x06, 0x54, + 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x22, 0x38, 0x0a, 0x0a, 0x43, 0x53, 0x53, 0x69, 0x67, 0x6e, 0x52, + 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, + 0x4d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x4d, 0x49, 0x64, 0x22, + 0x64, 0x0a, 0x0a, 0x53, 0x43, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, + 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x24, 0x0a, 0x0d, 0x57, 0x61, 0x69, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x57, 0x61, 0x69, 0x74, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x49, 0x0a, 0x0d, 0x53, 0x43, 0x53, 0x79, 0x6e, 0x63, 0x53, + 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, + 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, + 0x22, 0x25, 0x0a, 0x09, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x6b, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x49, 0x74, + 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, + 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, + 0x6d, 0x6f, 0x6e, 0x64, 0x22, 0x88, 0x03, 0x0a, 0x0f, 0x53, 0x43, 0x50, 0x72, 0x6f, 0x6d, 0x6f, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x6e, + 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x52, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x61, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x3f, + 0x0a, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x43, 0x50, 0x72, + 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x33, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x09, 0x52, 0x61, 0x6e, + 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x10, 0x0a, 0x0e, 0x43, 0x53, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x22, 0x8c, 0x01, 0x0a, 0x0e, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0f, 0x53, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, + 0x0a, 0x02, 0x4c, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4c, 0x76, 0x12, 0x16, + 0x0a, 0x06, 0x4c, 0x61, 0x73, 0x74, 0x4c, 0x76, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x4c, 0x61, 0x73, 0x74, 0x4c, 0x76, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x22, 0x58, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4c, 0x76, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x4c, 0x76, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x22, 0x10, 0x0a, 0x0e, 0x43, 0x53, + 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x22, 0x4a, 0x0a, 0x0e, + 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x38, + 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x0b, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x73, 0x22, 0x21, 0x0a, 0x0f, 0x43, 0x53, 0x54, 0x4d, + 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x4c, + 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4c, 0x76, 0x22, 0x35, 0x0a, 0x0f, 0x53, + 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x0e, + 0x0a, 0x02, 0x4c, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4c, 0x76, 0x12, 0x12, + 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, + 0x64, 0x65, 0x22, 0x37, 0x0a, 0x0b, 0x43, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, + 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, 0xb5, 0x01, 0x0a, 0x0b, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x1c, 0x0a, + 0x09, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x55, + 0x73, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x55, 0x73, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, + 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, + 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x22, 0xe0, 0x01, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x4e, + 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, + 0x4e, 0x75, 0x6d, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x07, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x64, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x4d, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, + 0x54, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, 0x2c, 0x0a, 0x0a, + 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, 0xc6, 0x01, 0x0a, 0x09, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x22, 0x57, 0x0a, 0x0a, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, + 0x54, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x2a, 0xc7, 0x04, 0x0a, + 0x0c, 0x54, 0x4f, 0x55, 0x52, 0x4e, 0x41, 0x4d, 0x45, 0x4e, 0x54, 0x49, 0x44, 0x12, 0x12, 0x0a, + 0x0e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, + 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, + 0x53, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xb4, 0x15, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, + 0x73, 0x10, 0xb5, 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, + 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xb6, + 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, + 0x43, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xb7, 0x15, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x53, 0x69, + 0x67, 0x6e, 0x52, 0x61, 0x63, 0x65, 0x10, 0xb8, 0x15, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x61, 0x63, + 0x65, 0x10, 0xb9, 0x15, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, + 0x4d, 0x5f, 0x53, 0x43, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, 0x10, + 0xba, 0x15, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, + 0x53, 0x43, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, + 0xbb, 0x15, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, + 0x53, 0x43, 0x54, 0x4d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x10, 0xbc, 0x15, 0x12, 0x1d, 0x0a, 0x18, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x53, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xbf, 0x15, 0x12, 0x1d, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xc0, 0x15, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xbf, 0x15, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x10, 0xc1, 0x15, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xc0, 0x15, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x10, 0xc2, 0x15, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x52, 0x61, 0x6e, 0x6b, 0x10, 0xc1, 0x15, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, - 0x61, 0x6e, 0x6b, 0x10, 0xc2, 0x15, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x10, 0xc3, 0x15, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x10, 0xc4, 0x15, 0x2a, 0xa2, 0x01, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x52, + 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xc3, 0x15, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xc4, 0x15, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x69, 0x73, + 0x74, 0x10, 0xc5, 0x15, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, + 0x4d, 0x5f, 0x53, 0x43, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xc6, 0x15, + 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, + 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xc7, 0x15, 0x12, 0x19, 0x0a, 0x14, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, + 0x69, 0x73, 0x74, 0x10, 0xc8, 0x15, 0x2a, 0xa2, 0x01, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, @@ -1920,7 +2521,7 @@ func file_tournament_proto_rawDescGZIP() []byte { } var file_tournament_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_tournament_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_tournament_proto_msgTypes = make([]protoimpl.MessageInfo, 30) var file_tournament_proto_goTypes = []interface{}{ (TOURNAMENTID)(0), // 0: tournament.TOURNAMENTID (SignRaceCode)(0), // 1: tournament.SignRaceCode @@ -1946,7 +2547,14 @@ var file_tournament_proto_goTypes = []interface{}{ (*SCTMSeasonRank)(nil), // 21: tournament.SCTMSeasonRank (*CSTMSeasonAward)(nil), // 22: tournament.CSTMSeasonAward (*SCTMSeasonAward)(nil), // 23: tournament.SCTMSeasonAward - nil, // 24: tournament.SCPromotionInfo.RecordEntry + (*CSMatchList)(nil), // 24: tournament.CSMatchList + (*MatchPlayer)(nil), // 25: tournament.MatchPlayer + (*MatchInfo)(nil), // 26: tournament.MatchInfo + (*SCTMMatchList)(nil), // 27: tournament.SCTMMatchList + (*CSRoomList)(nil), // 28: tournament.CSRoomList + (*MatchRoom)(nil), // 29: tournament.MatchRoom + (*SCRoomList)(nil), // 30: tournament.SCRoomList + nil, // 31: tournament.SCPromotionInfo.RecordEntry } var file_tournament_proto_depIdxs = []int32{ 3, // 0: tournament.MatchInfoAward.ItemInfo:type_name -> tournament.ItemInfo @@ -1956,14 +2564,18 @@ var file_tournament_proto_depIdxs = []int32{ 6, // 4: tournament.SCTMInfos.TypeList:type_name -> tournament.MatchTypeInfo 9, // 5: tournament.SCTMRankList.TMRank:type_name -> tournament.TMRank 3, // 6: tournament.RankAward.ItemInfo:type_name -> tournament.ItemInfo - 24, // 7: tournament.SCPromotionInfo.Record:type_name -> tournament.SCPromotionInfo.RecordEntry + 31, // 7: tournament.SCPromotionInfo.Record:type_name -> tournament.SCPromotionInfo.RecordEntry 15, // 8: tournament.SCPromotionInfo.RankAward:type_name -> tournament.RankAward 19, // 9: tournament.SCTMSeasonRank.ReasonRanks:type_name -> tournament.SeasonRank - 10, // [10:10] is the sub-list for method output_type - 10, // [10:10] is the sub-list for method input_type - 10, // [10:10] is the sub-list for extension type_name - 10, // [10:10] is the sub-list for extension extendee - 0, // [0:10] is the sub-list for field type_name + 25, // 10: tournament.MatchInfo.Players:type_name -> tournament.MatchPlayer + 26, // 11: tournament.SCTMMatchList.List:type_name -> tournament.MatchInfo + 25, // 12: tournament.MatchRoom.Players:type_name -> tournament.MatchPlayer + 29, // 13: tournament.SCRoomList.List:type_name -> tournament.MatchRoom + 14, // [14:14] is the sub-list for method output_type + 14, // [14:14] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_tournament_proto_init() } @@ -2236,6 +2848,90 @@ func file_tournament_proto_init() { return nil } } + file_tournament_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSMatchList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tournament_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchPlayer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tournament_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tournament_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCTMMatchList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tournament_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSRoomList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tournament_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tournament_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCRoomList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -2243,7 +2939,7 @@ func file_tournament_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_tournament_proto_rawDesc, NumEnums: 2, - NumMessages: 23, + NumMessages: 30, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/tournament/tournament.proto b/protocol/tournament/tournament.proto index 514bcbe..7c4086e 100644 --- a/protocol/tournament/tournament.proto +++ b/protocol/tournament/tournament.proto @@ -20,6 +20,10 @@ enum TOURNAMENTID{ PACKET_TM_SCTMSeasonRank = 2754;//赛季排行榜 PACKET_TM_CSTMSeasonAward = 2755;//领取赛季奖励 PACKET_TM_SCTMSeasonAward = 2756;//领取赛季奖励 + PACKET_TM_CSMatchList = 2757;// 比赛列表 + PACKET_TM_SCMatchList = 2758;// 比赛列表 + PACKET_TM_CSRoomList = 2759; // 比赛房间列表 + PACKET_TM_SCRoomList = 2760; // 比赛房间列表 } //比赛场场次 //PACKET_TM_CSTMInfo @@ -65,6 +69,7 @@ message TMInfo{ repeated string OnChannelName = 21;//在哪个渠道开启 int32 ShowId = 22; // 比赛区分 int32 AwardNum = 23; //比赛奖励剩余数量 + int32 AudienceSwitch = 27; // 观战开关 1开启 2关闭 } message MatchTypeInfo{ @@ -187,4 +192,57 @@ message CSTMSeasonAward { message SCTMSeasonAward { int32 Lv = 1;//段位 int32 Code = 2;//0成功 1失败 +} + +//PACKET_TM_CSMatchList +message CSMatchList{ + int64 MatchId = 1; // 比赛id 0表示所有比赛场 + int32 Tp = 2; // 房间类型 0所有房间 1可观战房间 +} + +message MatchPlayer{ + int32 SnId = 1; // 玩家id + string Name = 2; // 玩家名字 + string HeadUrl = 3;//头像地址 + int32 UseRoleId = 4;//使用的人物模型id + int32 UseSkinId = 5; // 皮肤id + int32 Rank = 6;//排名 + int32 Score = 7;//分数 +} + +message MatchInfo{ + int64 MatchId = 1; // 比赛id + int64 InstanceId = 2; // 本场比赛id + string Name = 3; // 比赛名字 + int32 Round = 4; // 当前第几轮 + int32 TotalRound = 5; // 总轮数 + int32 RemainNum = 6; // 剩余人数 + repeated MatchPlayer Players = 7; // 玩家列表 +} + +message SCTMMatchList{ + repeated MatchInfo List = 1; + int64 MatchId = 2; + int32 Tp = 3; +} + +//PACKET_TM_CSRoomList +message CSRoomList{ + int64 Id = 1; // 本场比赛id 0表示所有房间 + int32 Tp = 2; // 房间类型 0所有房间 1可观战房间 +} + +message MatchRoom{ + int64 RoomId = 1; // 房间id + int64 MatchId = 2; // 比赛id + int64 InstanceId = 3; // 本场比赛id + int32 Round = 4; // 当前第几轮 + int32 TotalRound = 5; // 总轮数 + repeated MatchPlayer Players = 7; // 玩家列表 +} + +message SCRoomList{ + repeated MatchRoom List = 1; + int64 Id = 2; + int32 Tp = 3; } \ No newline at end of file diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index 37d0471..d95387b 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -4115,12 +4115,13 @@ type GameMatchDate struct { AwardShow string `protobuf:"bytes,18,opt,name=AwardShow,proto3" json:"AwardShow,omitempty"` //主要奖励展示 Rule string `protobuf:"bytes,19,opt,name=Rule,proto3" json:"Rule,omitempty"` SortId int32 `protobuf:"varint,20,opt,name=SortId,proto3" json:"SortId,omitempty"` - UseRobot int32 `protobuf:"varint,21,opt,name=UseRobot,proto3" json:"UseRobot,omitempty"` //0机器人有参与 1纯真人 - MatchLevel int32 `protobuf:"varint,22,opt,name=MatchLevel,proto3" json:"MatchLevel,omitempty"` // 难度等级 - OnChannelName []string `protobuf:"bytes,23,rep,name=OnChannelName,proto3" json:"OnChannelName,omitempty"` // 开启的渠道名称 - CardType int32 `protobuf:"varint,24,opt,name=CardType,proto3" json:"CardType,omitempty"` // 手机卡类型 - ShowId int32 `protobuf:"varint,25,opt,name=ShowId,proto3" json:"ShowId,omitempty"` // 比赛区分 - AwardNum int32 `protobuf:"varint,26,opt,name=AwardNum,proto3" json:"AwardNum,omitempty"` //比赛奖励剩余数量 + UseRobot int32 `protobuf:"varint,21,opt,name=UseRobot,proto3" json:"UseRobot,omitempty"` //0机器人有参与 1纯真人 + MatchLevel int32 `protobuf:"varint,22,opt,name=MatchLevel,proto3" json:"MatchLevel,omitempty"` // 难度等级 + OnChannelName []string `protobuf:"bytes,23,rep,name=OnChannelName,proto3" json:"OnChannelName,omitempty"` // 开启的渠道名称 + CardType int32 `protobuf:"varint,24,opt,name=CardType,proto3" json:"CardType,omitempty"` // 手机卡类型 + ShowId int32 `protobuf:"varint,25,opt,name=ShowId,proto3" json:"ShowId,omitempty"` // 比赛区分 + AwardNum int32 `protobuf:"varint,26,opt,name=AwardNum,proto3" json:"AwardNum,omitempty"` //比赛奖励剩余数量 + AudienceSwitch int32 `protobuf:"varint,27,opt,name=AudienceSwitch,proto3" json:"AudienceSwitch,omitempty"` // 观战开关 1开启 2关闭 } func (x *GameMatchDate) Reset() { @@ -4337,6 +4338,13 @@ func (x *GameMatchDate) GetAwardNum() int32 { return 0 } +func (x *GameMatchDate) GetAudienceSwitch() int32 { + if x != nil { + return x.AudienceSwitch + } + return 0 +} + // etcd /game/game_match type GameMatchDateList struct { state protoimpl.MessageState @@ -8137,6 +8145,70 @@ func (x *GuideConfig) GetSkip() int32 { return 0 } +// etcd /game/match_audience +type MatchAudience struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台 + SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家ID + Ts int64 `protobuf:"varint,3,opt,name=Ts,proto3" json:"Ts,omitempty"` // 时间戳 +} + +func (x *MatchAudience) Reset() { + *x = MatchAudience{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchAudience) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchAudience) ProtoMessage() {} + +func (x *MatchAudience) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[86] + 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 MatchAudience.ProtoReflect.Descriptor instead. +func (*MatchAudience) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{86} +} + +func (x *MatchAudience) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *MatchAudience) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *MatchAudience) GetTs() int64 { + if x != nil { + return x.Ts + } + return 0 +} + var File_common_proto protoreflect.FileDescriptor var file_common_proto_rawDesc = []byte{ @@ -8844,7 +8916,7 @@ var file_common_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x44, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x89, 0x07, 0x0a, 0x0d, + 0x52, 0x09, 0x44, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb1, 0x07, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, @@ -8901,530 +8973,537 @@ var file_common_proto_rawDesc = []byte{ 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x22, 0x5a, 0x0a, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, - 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, - 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x22, 0x5b, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, - 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x4f, 0x6e, - 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, - 0x22, 0x56, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x64, 0x0a, 0x0b, 0x57, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x5f, 0x49, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0x4f, - 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, - 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x22, - 0x2a, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x74, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x18, - 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, - 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x52, 0x61, - 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, - 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, 0x74, 0x65, 0x52, 0x08, 0x52, 0x61, 0x74, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x61, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x55, - 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, 0x12, 0x31, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x55, - 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, - 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x22, 0x48, 0x0a, 0x12, 0x41, - 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x44, 0x61, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0xc9, 0x02, 0x0a, 0x10, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, - 0x65, 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x04, - 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, - 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, - 0x04, 0x44, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, - 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, - 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, - 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x41, 0x64, 0x64, - 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x12, 0x44, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, - 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, - 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x10, 0x41, 0x64, 0x64, - 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x12, 0x42, 0x0a, - 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, - 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, - 0x65, 0x22, 0x78, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, - 0x6e, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x4c, 0x69, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, - 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0xdb, 0x01, 0x0a, 0x0c, - 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, - 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, - 0x73, 0x75, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, - 0x69, 0x63, 0x65, 0x32, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x17, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x5f, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xa3, 0x01, 0x0a, 0x17, 0x57, 0x65, - 0x6c, 0x66, 0x61, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, - 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x69, - 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x77, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x41, 0x75, 0x64, 0x69, 0x65, + 0x6e, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0e, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, + 0x5a, 0x0a, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x61, 0x6d, 0x65, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x5b, 0x0a, 0x0d, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, + 0x22, 0x64, 0x0a, 0x0b, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, + 0x07, 0x49, 0x74, 0x65, 0x6d, 0x5f, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, + 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x27, + 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, + 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, + 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x52, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x52, + 0x61, 0x74, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x18, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, + 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x30, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, + 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, + 0x74, 0x65, 0x52, 0x08, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, + 0x22, 0x61, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, + 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, + 0x12, 0x31, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, + 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, + 0x61, 0x74, 0x65, 0x22, 0x48, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, + 0x32, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0xc9, 0x02, + 0x0a, 0x10, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, + 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x44, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, + 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, + 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, + 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, + 0x70, 0x44, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, + 0x74, 0x65, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, + 0x61, 0x74, 0x65, 0x52, 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x12, + 0x44, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, + 0x61, 0x74, 0x65, 0x52, 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, + 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, + 0x32, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, + 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, 0x65, 0x22, 0x78, 0x0a, 0x14, 0x57, 0x65, 0x6c, + 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, + 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x69, 0x6e, - 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x69, 0x6e, 0x49, 0x64, 0x22, - 0xc5, 0x01, 0x0a, 0x0c, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, - 0x61, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, - 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x56, - 0x49, 0x50, 0x45, 0x58, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x49, 0x50, 0x45, - 0x58, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x12, 0x1a, 0x0a, 0x08, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8d, 0x01, 0x0a, 0x17, 0x57, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, - 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x22, 0xa8, 0x01, 0x0a, 0x1c, 0x57, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x6f, 0x75, 0x73, 0x50, 0x61, 0x79, - 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, - 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, 0x52, 0x04, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, - 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x42, 0x72, 0x65, 0x61, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x42, 0x72, 0x65, - 0x61, 0x6b, 0x22, 0xa2, 0x07, 0x0a, 0x06, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x12, 0x14, 0x0a, - 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x69, - 0x70, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, - 0x66, 0x67, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x69, 0x70, 0x45, 0x78, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x69, 0x70, 0x45, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, - 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, - 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, - 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, 0x18, 0x07, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, - 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, - 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, - 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, - 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x18, 0x0b, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, - 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, - 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, - 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x44, 0x18, 0x0e, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, 0x69, - 0x6e, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x18, 0x12, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, - 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, - 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x70, 0x0a, 0x0e, 0x56, 0x49, 0x50, 0x63, 0x66, - 0x67, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x04, 0x4c, 0x69, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x6f, 0x6e, - 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x4d, - 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x22, 0x95, 0x01, 0x0a, 0x09, 0x57, 0x62, - 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, - 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, - 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x73, 0x22, 0x57, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x08, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x64, 0x0a, 0x0f, 0x43, 0x68, - 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, - 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, - 0x22, 0x75, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x63, 0x66, 0x67, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, 0x65, - 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, - 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0xb4, 0x03, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x51, 0x75, 0x44, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x51, 0x75, 0x44, 0x75, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, - 0x64, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, - 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, - 0x73, 0x4d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x55, 0x70, 0x70, 0x65, - 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x77, 0x65, - 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x77, - 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, - 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x6f, - 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x46, 0x69, - 0x67, 0x68, 0x74, 0x55, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x46, 0x69, 0x67, - 0x68, 0x74, 0x55, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x77, - 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x46, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, - 0x77, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x79, 0x55, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x50, 0x61, 0x79, 0x55, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x44, - 0x6f, 0x77, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x79, 0x44, 0x6f, - 0x77, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x52, 0x61, 0x74, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x52, 0x61, - 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0xc8, - 0x01, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x69, - 0x4b, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x69, 0x4b, 0x75, 0x12, - 0x16, 0x0a, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x46, 0x65, 0x6e, 0x43, 0x68, - 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x46, 0x65, - 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x6f, 0x6f, - 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, - 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x22, 0x4f, 0x0a, 0x19, 0x57, 0x65, 0x6c, - 0x66, 0x61, 0x72, 0x65, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x4a, 0x0a, 0x14, 0x57, 0x65, - 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, - 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x67, 0x0a, 0x13, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, - 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x45, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x03, 0x45, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0x8e, 0x03, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x50, 0x61, - 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x08, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x52, 0x61, - 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, - 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, - 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x32, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x2b, 0x0a, - 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x61, - 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x91, 0x01, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, - 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, - 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x31, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x31, 0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x22, 0xea, 0x01, 0x0a, 0x14, - 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, - 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, - 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x47, 0x61, - 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x64, 0x0a, 0x10, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x45, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, - 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xec, - 0x01, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x12, 0x3b, 0x0a, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x44, 0x0a, - 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x92, 0x01, - 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, - 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x79, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x44, 0x61, 0x79, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, - 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, - 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x22, 0x68, 0x0a, 0x15, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x22, 0x3d, 0x0a, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x18, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, - 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, - 0x37, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, - 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x52, - 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x70, 0x0a, 0x14, 0x44, 0x69, 0x61, 0x6d, - 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, - 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x4c, - 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x22, 0x53, 0x0a, 0x0a, 0x49, 0x74, - 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x74, 0x63, 0x68, 0x22, 0xdb, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, + 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, + 0x69, 0x63, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x12, 0x1a, 0x0a, 0x08, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, + 0x5f, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x22, 0xa3, 0x01, 0x0a, 0x17, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x42, 0x6c, 0x69, + 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, + 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x4d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x0c, 0x57, 0x65, 0x6c, 0x66, + 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x74, + 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x49, + 0x74, 0x65, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x49, 0x50, 0x45, 0x58, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x56, 0x49, 0x50, 0x45, 0x58, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, + 0x73, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, + 0x75, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, + 0x63, 0x65, 0x32, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0x8d, 0x01, 0x0a, 0x17, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, + 0x50, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, 0x52, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, 0x63, + 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x22, + 0xa8, 0x01, 0x0a, 0x1c, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x69, + 0x6e, 0x75, 0x6f, 0x75, 0x73, 0x50, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, + 0x70, 0x72, 0x65, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, + 0x0a, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, + 0x79, 0x63, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x22, 0xa2, 0x07, 0x0a, 0x06, 0x56, + 0x49, 0x50, 0x63, 0x66, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, + 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x56, 0x69, 0x70, 0x45, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x69, 0x70, + 0x45, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, + 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, + 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x38, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, + 0x69, 0x6e, 0x65, 0x49, 0x44, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, + 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, + 0x37, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, + 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, + 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, + 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, + 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x70, 0x0a, 0x0e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x22, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x52, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, + 0x6f, 0x22, 0x95, 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, + 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, + 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, + 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, + 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x57, 0x0a, 0x0b, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, - 0x47, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, - 0x83, 0x01, 0x0a, 0x0d, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0xb3, 0x01, 0x0a, 0x0c, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, - 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, - 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x4f, 0x66, 0x66, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x4f, 0x66, 0x66, 0x12, 0x2b, - 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x56, 0x0a, 0x0e, 0x52, - 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x28, 0x0a, 0x04, 0x49, 0x6e, 0x66, - 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0xed, 0x01, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x35, 0x0a, 0x06, 0x55, 0x70, 0x49, 0x74, 0x65, - 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x55, 0x70, 0x49, 0x74, 0x65, - 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, - 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, - 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, - 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x55, 0x70, 0x49, 0x74, - 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0xa6, 0x02, 0x0a, 0x08, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, - 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, - 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x43, 0x0a, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x55, 0x70, 0x67, 0x72, 0x61, - 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x49, 0x73, 0x55, 0x70, 0x67, 0x72, - 0x61, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x29, 0x0a, 0x06, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x1a, 0x3e, 0x0a, 0x10, - 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x0a, - 0x53, 0x6b, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x08, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x22, 0x64, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, + 0x27, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, + 0x74, 0x65, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x75, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x73, + 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x63, 0x66, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x05, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, + 0xb4, 0x03, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, + 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x6f, + 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x51, 0x75, + 0x44, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x51, 0x75, 0x44, 0x75, 0x12, 0x1c, + 0x0a, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, + 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, + 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, + 0x0a, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, + 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x46, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x46, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x12, 0x1c, 0x0a, 0x09, + 0x46, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x46, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, + 0x79, 0x55, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x79, 0x55, 0x70, + 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x50, 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x69, + 0x61, 0x6e, 0x48, 0x75, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0xc8, 0x01, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, + 0x6e, 0x48, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, + 0x75, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x69, 0x4b, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x50, 0x61, 0x69, 0x4b, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, + 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x12, + 0x20, 0x0a, 0x0b, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, + 0x61, 0x22, 0x4f, 0x0a, 0x19, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x50, 0x68, 0x6f, 0x6e, + 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x22, 0x4a, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x26, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, - 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x9c, - 0x01, 0x0a, 0x0e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x30, 0x0a, - 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, - 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x12, - 0x3c, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, - 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x22, 0x70, 0x0a, - 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, - 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, - 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, - 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, - 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x22, - 0x60, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, - 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, - 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, - 0x70, 0x65, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x0b, 0x47, 0x75, 0x69, 0x64, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, - 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6b, 0x69, 0x70, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x67, + 0x0a, 0x13, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0x8e, + 0x03, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1c, + 0x0a, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0d, + 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, + 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, + 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x50, 0x61, 0x79, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x07, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, + 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x32, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, + 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x73, 0x33, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x91, 0x01, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, + 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x32, 0x22, 0xea, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, + 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, + 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, + 0x6f, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, + 0x22, 0x64, 0x0a, 0x10, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x06, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, + 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x44, 0x0a, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0a, 0x52, + 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, + 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x92, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x50, 0x65, 0x72, + 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x44, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x44, + 0x61, 0x79, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, + 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, + 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, + 0x65, 0x22, 0x68, 0x0a, 0x15, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, + 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x3d, 0x0a, 0x09, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x12, 0x44, + 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x49, + 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, + 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x4d, + 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, + 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x44, 0x69, 0x61, + 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, + 0x22, 0x70, 0x0a, 0x14, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, + 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, + 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, + 0x74, 0x61, 0x22, 0x53, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x05, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x52, 0x61, 0x6e, 0x6b, + 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, + 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, + 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x61, 0x6e, 0x6b, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, + 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0xb3, 0x01, + 0x0a, 0x0c, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x54, 0x75, 0x72, 0x6e, 0x4f, 0x66, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, + 0x75, 0x72, 0x6e, 0x4f, 0x66, 0x66, 0x12, 0x2b, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, + 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, + 0x61, 0x72, 0x64, 0x22, 0x56, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x28, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xed, 0x01, 0x0a, 0x09, + 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, + 0x35, 0x0a, 0x06, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x2e, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x1a, 0x39, 0x0a, 0x0b, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa6, 0x02, 0x0a, 0x08, + 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, + 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x55, 0x6e, + 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, + 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x2e, + 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x1c, 0x0a, + 0x09, 0x49, 0x73, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x49, 0x73, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, + 0x6b, 0x69, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x26, + 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, + 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x12, 0x3c, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, + 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, + 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, + 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x22, 0x70, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, + 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, + 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, + 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x22, 0x60, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, + 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x41, 0x6e, + 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, + 0x65, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x0b, + 0x47, 0x75, 0x69, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x22, 0x4f, 0x0a, 0x0d, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, + 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x42, 0x26, 0x5a, 0x24, + 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9439,7 +9518,7 @@ func file_common_proto_rawDescGZIP() []byte { return file_common_proto_rawDescData } -var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 96) +var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 97) var file_common_proto_goTypes = []interface{}{ (*MysqlDbSetting)(nil), // 0: webapi.MysqlDbSetting (*MongoDbSetting)(nil), // 1: webapi.MongoDbSetting @@ -9527,32 +9606,33 @@ var file_common_proto_goTypes = []interface{}{ (*AwardLogInfo)(nil), // 83: webapi.AwardLogInfo (*AnnouncerLogInfo)(nil), // 84: webapi.AnnouncerLogInfo (*GuideConfig)(nil), // 85: webapi.GuideConfig - nil, // 86: webapi.Platform.BindTelRewardEntry - nil, // 87: webapi.PlayerData.RankScoreEntry - nil, // 88: webapi.ItemShop.AwardEntry - nil, // 89: webapi.VIPcfg.AwardEntry - nil, // 90: webapi.VIPcfg.Privilege1Entry - nil, // 91: webapi.VIPcfg.Privilege7Entry - nil, // 92: webapi.VIPcfg.Privilege9Entry - nil, // 93: webapi.ActInviteConfig.PayScoreEntry - nil, // 94: webapi.SkinLevel.UpItemEntry - nil, // 95: webapi.SkinItem.UnlockParamEntry - (*server.DB_GameFree)(nil), // 96: server.DB_GameFree - (*server.DB_GameItem)(nil), // 97: server.DB_GameItem + (*MatchAudience)(nil), // 86: webapi.MatchAudience + nil, // 87: webapi.Platform.BindTelRewardEntry + nil, // 88: webapi.PlayerData.RankScoreEntry + nil, // 89: webapi.ItemShop.AwardEntry + nil, // 90: webapi.VIPcfg.AwardEntry + nil, // 91: webapi.VIPcfg.Privilege1Entry + nil, // 92: webapi.VIPcfg.Privilege7Entry + nil, // 93: webapi.VIPcfg.Privilege9Entry + nil, // 94: webapi.ActInviteConfig.PayScoreEntry + nil, // 95: webapi.SkinLevel.UpItemEntry + nil, // 96: webapi.SkinItem.UnlockParamEntry + (*server.DB_GameFree)(nil), // 97: server.DB_GameFree + (*server.DB_GameItem)(nil), // 98: server.DB_GameItem } var file_common_proto_depIdxs = []int32{ 2, // 0: webapi.Platform.Leaderboard:type_name -> webapi.RankSwitch 3, // 1: webapi.Platform.ClubConfig:type_name -> webapi.ClubConfig 4, // 2: webapi.Platform.ThirdGameMerchant:type_name -> webapi.ThirdGame - 86, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry + 87, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry 6, // 4: webapi.GameConfigGlobal.GameStatus:type_name -> webapi.GameStatus - 96, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree + 97, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree 8, // 6: webapi.PlatformGameConfig.DbGameFrees:type_name -> webapi.GameFree 0, // 7: webapi.PlatformDbConfig.Mysql:type_name -> webapi.MysqlDbSetting 1, // 8: webapi.PlatformDbConfig.MongoDb:type_name -> webapi.MongoDbSetting 1, // 9: webapi.PlatformDbConfig.MongoDbLog:type_name -> webapi.MongoDbSetting - 96, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree - 87, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry + 97, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree + 88, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry 32, // 12: webapi.PlayerData.Items:type_name -> webapi.ItemInfo 14, // 13: webapi.PlayerData.RoleUnlockList:type_name -> webapi.ModInfo 14, // 14: webapi.PlayerData.PetUnlockList:type_name -> webapi.ModInfo @@ -9565,7 +9645,7 @@ var file_common_proto_depIdxs = []int32{ 32, // 21: webapi.ExchangeShop.Items:type_name -> webapi.ItemInfo 25, // 22: webapi.ExchangeShopList.List:type_name -> webapi.ExchangeShop 29, // 23: webapi.ExchangeShopList.Weight:type_name -> webapi.ShopWeight - 88, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry + 89, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry 30, // 25: webapi.ItemShopList.List:type_name -> webapi.ItemShop 32, // 26: webapi.MatchInfoAward.ItemId:type_name -> webapi.ItemInfo 33, // 27: webapi.GameMatchDate.Award:type_name -> webapi.MatchInfoAward @@ -9586,14 +9666,14 @@ var file_common_proto_depIdxs = []int32{ 38, // 42: webapi.WelfareSpree.Item:type_name -> webapi.WelfareDate 48, // 43: webapi.WelfareFirstPayDataList.List:type_name -> webapi.WelfareSpree 48, // 44: webapi.WelfareContinuousPayDataList.List:type_name -> webapi.WelfareSpree - 89, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry - 90, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry - 91, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry - 92, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry + 90, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry + 91, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry + 92, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry + 93, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry 51, // 49: webapi.VIPcfgDataList.List:type_name -> webapi.VIPcfg 38, // 50: webapi.ChessRankConfig.Item:type_name -> webapi.WelfareDate 55, // 51: webapi.ChessRankcfgData.Datas:type_name -> webapi.ChessRankConfig - 93, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry + 94, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry 62, // 53: webapi.ActInviteConfig.Awards1:type_name -> webapi.RankAward 62, // 54: webapi.ActInviteConfig.Awards2:type_name -> webapi.RankAward 62, // 55: webapi.ActInviteConfig.Awards3:type_name -> webapi.RankAward @@ -9610,12 +9690,12 @@ var file_common_proto_depIdxs = []int32{ 69, // 66: webapi.DiamondLotteryData.Info:type_name -> webapi.DiamondLotteryInfo 70, // 67: webapi.DiamondLotteryData.Players:type_name -> webapi.DiamondLotteryPlayers 72, // 68: webapi.DiamondLotteryConfig.LotteryData:type_name -> webapi.DiamondLotteryData - 97, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem + 98, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem 32, // 70: webapi.RankAwardInfo.Item:type_name -> webapi.ItemInfo 75, // 71: webapi.RankTypeInfo.Award:type_name -> webapi.RankAwardInfo 76, // 72: webapi.RankTypeConfig.Info:type_name -> webapi.RankTypeInfo - 94, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry - 95, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry + 95, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry + 96, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry 78, // 75: webapi.SkinItem.Levels:type_name -> webapi.SkinLevel 79, // 76: webapi.SkinConfig.Items:type_name -> webapi.SkinItem 82, // 77: webapi.AwardLogConfig.AwardLog:type_name -> webapi.AwardLogData @@ -10666,6 +10746,18 @@ func file_common_proto_init() { return nil } } + file_common_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchAudience); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -10673,7 +10765,7 @@ func file_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_common_proto_rawDesc, NumEnums: 0, - NumMessages: 96, + NumMessages: 97, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto index a62f0da..cc75710 100644 --- a/protocol/webapi/common.proto +++ b/protocol/webapi/common.proto @@ -490,6 +490,7 @@ message GameMatchDate { int32 CardType = 24; // 手机卡类型 int32 ShowId = 25; // 比赛区分 int32 AwardNum = 26; //比赛奖励剩余数量 + int32 AudienceSwitch = 27; // 观战开关 1开启 2关闭 } // etcd /game/game_match @@ -889,4 +890,11 @@ message GuideConfig { string Platform = 1; // 平台 int32 On = 2; // 引导开关 1开启 2关闭 int32 Skip = 3; // 引导跳过开关 1开启 2关闭 +} + +// etcd /game/match_audience +message MatchAudience { + string Platform = 1; // 平台 + int32 SnId = 2; // 玩家ID + int64 Ts = 3; // 时间戳 } \ No newline at end of file diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index a1524f6..c50c9a0 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -203,9 +203,15 @@ func (this *CSAudienceEnterRoomHandler) Process(s *netlib.Session, packetid int, logger.Logger.Trace("CSAudienceEnterRoomHandler scene == nil") goto failed } - if scene.IsMatchScene() { + if !scene.CanAudience() { code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game - logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.IsMatchScene() %v", scene.sceneId) + logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.CanAudience() %v", scene.sceneId) + goto failed + } + + if scene.IsMatchScene() && !PlatformMgrSingleton.IsMatchAudience(p.Platform, p.SnId) { + code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game + logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.IsMatchAudience() %v", scene.sceneId) goto failed } if p.scene != nil { diff --git a/worldsrv/action_tournament.go b/worldsrv/action_tournament.go index 3d44e47..f55d5d7 100644 --- a/worldsrv/action_tournament.go +++ b/worldsrv/action_tournament.go @@ -1,11 +1,11 @@ package main import ( - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/netlib" - "mongo.games.com/game/common" "mongo.games.com/game/protocol/tournament" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + "sort" ) func CSTMInfo(s *netlib.Session, packetid int, data interface{}, sid int64) error { @@ -94,9 +94,135 @@ func CSSignRace(s *netlib.Session, packetid int, data interface{}, sid int64) er return nil } +func CSMatchList(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSMatchList ", data) + msg, ok := data.(*tournament.CSMatchList) + if !ok { + return nil + } + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + logger.Logger.Warnf("CSMatchList p == nil.") + return nil + } + pack := &tournament.SCTMMatchList{ + MatchId: msg.GetMatchId(), + Tp: msg.GetTp(), + } + + audience := msg.GetTp() == 1 + list := TournamentMgr.GetTmMatch(p.Platform, int32(msg.GetMatchId()), p.LastChannel, audience, 0) + + // 开始时间排序 + sort.Slice(list, func(i, j int) bool { + return list[i].StartTime < list[j].StartTime + }) + + for _, v := range list { + round := TournamentMgr.GetRound(v.SortId) + d := &tournament.MatchInfo{ + MatchId: int64(v.TMId), + InstanceId: v.SortId, + Name: v.gmd.MatchName, + Round: round, + TotalRound: v.GetTotalRound(), + RemainNum: TournamentMgr.GetRemainNum(v.SortId), + } + for _, v := range TournamentMgr.GetRemainPlayer(v.SortId) { + var name, headUrl string + p := PlayerMgrSington.GetPlayerBySnId(v.SnId) + if p != nil { + name = p.Name + headUrl = p.HeadUrl + } + d.Players = append(d.Players, &tournament.MatchPlayer{ + SnId: v.SnId, + Name: name, + HeadUrl: headUrl, + UseRoleId: v.RoleId, + UseSkinId: v.SkinId, + Rank: v.Rank, + Score: v.Grade, + }) + } + + sort.Slice(d.Players, func(i, j int) bool { + if d.Players[i].Score > d.Players[j].Score { + return true + } + if d.Players[i].Score < d.Players[j].Score { + return false + } + return d.Players[i].SnId < d.Players[j].SnId + }) + + pack.List = append(pack.List, d) + } + + p.SendToClient(int(tournament.TOURNAMENTID_PACKET_TM_SCMatchList), pack) + logger.Logger.Tracef("SCMatchList %v", pack) + return nil +} + +func CSRoomList(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSRoomList ", data) + msg, ok := data.(*tournament.CSRoomList) + if !ok { + return nil + } + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + logger.Logger.Warnf("CSRoomList p == nil.") + return nil + } + pack := &tournament.SCRoomList{ + Id: msg.GetId(), + Tp: msg.GetTp(), + } + + audience := msg.GetTp() == 1 + scenes := TournamentMgr.GetTmRoom(p.Platform, 0, p.LastChannel, audience, msg.GetId()) + for _, v := range scenes { + tm := TournamentMgr.GetTm(v.matchId) + if tm == nil { + continue + } + room := &tournament.MatchRoom{ + RoomId: int64(v.sceneId), + MatchId: int64(tm.TMId), + InstanceId: tm.SortId, + Round: TournamentMgr.GetRound(tm.SortId), + TotalRound: tm.GetTotalRound(), + } + for _, v := range v.players { + if v.matchCtx == nil { + continue + } + d := &tournament.MatchPlayer{ + SnId: v.matchCtx.copySnid, + Name: v.Name, + HeadUrl: v.HeadUrl, + UseRoleId: v.matchCtx.copyRoleId, + UseSkinId: v.matchCtx.copySkinId, + Rank: v.matchCtx.rank, + Score: v.matchCtx.grade, + } + room.Players = append(room.Players, d) + } + pack.List = append(pack.List, room) + } + p.SendToClient(int(tournament.TOURNAMENTID_PACKET_TM_SCRoomList), pack) + logger.Logger.Tracef("SCRoomList %v", pack) + return nil +} + func init() { - // 比赛信息列表 + // 比赛配置列表 common.Register(int(tournament.TOURNAMENTID_PACKET_TM_CSTMInfo), tournament.CSTMInfo{}, CSTMInfo) // 比赛报名 common.Register(int(tournament.TOURNAMENTID_PACKET_TM_CSSignRace), tournament.CSSignRace{}, CSSignRace) + // 比赛中比赛列表 + common.Register(int(tournament.TOURNAMENTID_PACKET_TM_CSMatchList), tournament.CSMatchList{}, CSMatchList) + // 比赛中房间列表 + common.Register(int(tournament.TOURNAMENTID_PACKET_TM_CSRoomList), tournament.CSRoomList{}, CSRoomList) } diff --git a/worldsrv/coinscenemgr.go b/worldsrv/coinscenemgr.go index 809e9f8..a51a4d5 100644 --- a/worldsrv/coinscenemgr.go +++ b/worldsrv/coinscenemgr.go @@ -148,6 +148,7 @@ func (csm *CoinSceneMgr) PlayerEnter(p *Player, id int32, roomId int32, exclude } // AudienceEnter 观众进入房间 +// id 场次id func (csm *CoinSceneMgr) AudienceEnter(p *Player, id int32, roomId int32, exclude []int32, ischangeroom bool) hall_proto.OpResultCode { //多平台支持 platform := p.GetPlatform() diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index 5817a68..08601cf 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -90,6 +90,8 @@ func init() { etcd.Register(etcd.ETCDKEY_AWARD_CONFIG, webapi.AwardLogConfig{}, platformConfigEvent) // 新手引导 etcd.Register(etcd.ETCDKEY_GUIDE, webapi.GuideConfig{}, platformConfigEvent) + // 比赛观众 + etcd.Register(etcd.ETCDKEY_MatchAudience, webapi.MatchAudience{}, handlerEvent) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { @@ -397,6 +399,13 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c if isInit || event.Type == clientv3.EventTypePut { ActMgrSington.AddGiveConfig(config, config.Platform) } + case *webapi.MatchAudience: + switch event.Type { + case clientv3.EventTypePut: + PlatformMgrSingleton.AddMatchAudience(config) + case clientv3.EventTypeDelete: + PlatformMgrSingleton.DelMatchAudience(config) + } default: logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey) diff --git a/worldsrv/matchscenemgr.go b/worldsrv/matchscenemgr.go index a5e3285..1675d58 100644 --- a/worldsrv/matchscenemgr.go +++ b/worldsrv/matchscenemgr.go @@ -97,7 +97,6 @@ func (ms *MatchSceneMgr) MatchStart(tm *TmMatch) { } // 填充机器人 if scene != nil && !scene.IsFull() { - tm.RobotGradesDecline(1) needRobotNum := scene.playerNum - len(scene.players) logger.Logger.Trace("MatchStart 填充机器人", needRobotNum) pack := &server.WGInviteMatchRob{ diff --git a/worldsrv/scene.go b/worldsrv/scene.go index b01394c..3a7e554 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -1024,6 +1024,7 @@ func (this *Scene) GetSceneName() string { } return "[unknow scene name]" } + func (this *Scene) RandRobotCnt() { if len(this.paramsEx) > 0 { gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.paramsEx[0]) @@ -1263,3 +1264,17 @@ func (this *Scene) TryForceDelectMatchInfo() { } } } + +// CanAudience 是否允许观战 +func (this *Scene) CanAudience() bool { + switch { + case this.matchId > 0: // 比赛场 + tm := TournamentMgr.GetTm(this.matchId) + if tm != nil { + return tm.gmd.GetAudienceSwitch() == 1 + } + return false + default: + return true + } +} diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index bed66fe..c4f742f 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -115,6 +115,19 @@ func (m *SceneMgr) GetScenesByGameFreeId(gameFreeId int32) []*Scene { return scenes } +func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene { + var scenes []*Scene + for _, value := range m.scenes { + if value.matchId == sortId { + s := m.GetScene(value.sceneId) + if s != nil { + scenes = append(scenes, value) + } + } + } + return scenes +} + // MarshalAllRoom 获取房间列表 func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode, clubId, sceneMode, sceneId int, gameFreeId, snId int32, start, end, pageSize int32) ([]*webapi2.RoomInfo, int32, int32) { diff --git a/worldsrv/tmmatch.go b/worldsrv/tmmatch.go index 3c2d6a2..05398c0 100644 --- a/worldsrv/tmmatch.go +++ b/worldsrv/tmmatch.go @@ -74,6 +74,8 @@ func (tm *TmMatch) Start() { tm.BroadcastMessage(int(tournament.TOURNAMENTID_PACKET_TM_SCTMStart), pack) logger.Logger.Trace("SCTMStart ", pack) + tm.RobotGradesDecline(1) + //创建房间 timer.StartTimer(timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool { MatchSceneMgrSingleton.MatchStart(tm) @@ -87,6 +89,10 @@ func (tm *TmMatch) Stop() { logger.Logger.Trace("(this *TmMatch) Stop()") } +func (tm *TmMatch) GetTotalRound() int32 { + return int32(len(tm.gmd.GetMatchPromotion()) - 1) +} + func (tm *TmMatch) BroadcastMessage(packetId int, rawPack interface{}) { mgs := make(map[*netlib.Session][]*srvproto.MCSessionUnion) for _, tmp := range tm.TmPlayer { diff --git a/worldsrv/tournament.go b/worldsrv/tournament.go index 7ca1cc9..1cb12ed 100644 --- a/worldsrv/tournament.go +++ b/worldsrv/tournament.go @@ -170,6 +170,94 @@ func (this *Tournament) getRoundPlayer(sortId int64, round int32) *PlayerRoundIn return v } +// GetRemainNum 剩余比赛人数 +func (this *Tournament) GetRemainNum(sortId int64) int32 { + tm := this.GetTm(sortId) + if tm == nil { + return 0 + } + + round := this.GetRound(sortId) + l := tm.gmd.GetMatchPromotion() + if round <= int32(len(l)) { + return l[round-1] + } + return 0 +} + +type MatchPlayerInfo struct { + SnId int32 + RoleId int32 + SkinId int32 + Rank int32 + Grade int32 +} + +// GetRemainPlayer 未淘汰的人 +func (this *Tournament) GetRemainPlayer(sortId int64) []*MatchPlayerInfo { + tm := this.GetTm(sortId) + if tm == nil { + return nil + } + round := this.GetRound(sortId) + useRobot := this.IsRobotOn(tm.gmd) + + var ret []*MatchPlayerInfo + + realPlayer := func() { + for _, v := range tm.TmPlayer { + p := PlayerMgrSington.GetPlayerBySnId(v.SnId) + if p != nil { + ret = append(ret, &MatchPlayerInfo{ + SnId: v.SnId, + RoleId: p.GetRoleId(), + SkinId: p.Skin.ModId, + Grade: 1000, + }) + } + } + } + + robotPlayer := func(n int) { + for _, v := range tm.robotGrades[n] { + ret = append(ret, &MatchPlayerInfo{ + SnId: v.copySnid, + RoleId: v.copyRoleId, + SkinId: v.CopySkinId, + Grade: v.grade, + }) + } + } + + if round <= 1 { + if useRobot { + robotPlayer(0) + realPlayer() + } else { + realPlayer() + } + } else { + if useRobot { + robotPlayer(int(round - 1)) + } else { + if this.roundPlayers[sortId] != nil { + d := this.roundPlayers[sortId][round-1] + if d != nil { + for _, v := range d.ranks { + ret = append(ret, &MatchPlayerInfo{ + SnId: v.copySnid, + RoleId: v.copyRoleId, + SkinId: v.copySkinId, + Grade: v.grade, + }) + } + } + } + } + } + return ret +} + // GetSignUpPlayers 获取报名人员 // id 比赛配置id func (this *Tournament) GetSignUpPlayers(platform string, id int32) map[int32]*TmPlayer { @@ -1513,6 +1601,72 @@ func (this *Tournament) GetSCTMInfosPack(platform, channelName string) *tourname return pack } +// GetTmMatch 查询比赛中的比赛 +func (this *Tournament) GetTmMatch(plt string, matchId int32, channelName string, audience bool, sortId int64) []*TmMatch { + matches := this.GetAllMatchInfo(plt) + if matches == nil { + return nil + } + + var ids []int32 + for id, info := range matches { + if info == nil || info.MatchSwitch != 1 { + continue + } + if matchId > 0 && id != matchId { + continue + } + if channelName != "" && !common.InMatchChannel(info.OnChannelName, channelName) { + continue + } + if info.GetAudienceSwitch() == 1 != audience { + continue + } + ids = append(ids, id) + } + + var ret []*TmMatch + if sortId > 0 { + for _, v := range ids { + d := this.matches[v] + if d != nil { + r, ok := d[sortId] + if ok && r != nil { + return []*TmMatch{r} + } + } + } + return ret + } + + for _, v := range ids { + for _, vv := range this.matches[v] { + ret = append(ret, vv) + } + } + + return ret +} + +func (this *Tournament) GetTmRoom(plt string, matchId int32, channelName string, audience bool, sortId int64) []*Scene { + tm := this.GetTmMatch(plt, matchId, channelName, audience, sortId) + + sort.Slice(tm, func(i, j int) bool { + return tm[i].SortId < tm[j].SortId + }) + + var ret []*Scene + for _, v := range tm { + d := SceneMgrSingleton.GetMatchRoom(v.SortId) + sort.Slice(d, func(i, j int) bool { + return d[i].createTime.Before(d[j].createTime) + }) + ret = append(ret, d...) + } + + return ret +} + func (this *Tournament) MakeMatchLog(platform string, tmId int32, sortId int64) *model.MatchLog { gameMatchDate := this.GetMatchInfo(platform, tmId, sortId) if gameMatchDate == nil { @@ -1780,3 +1934,11 @@ func (this *Tournament) GetMatchAwardNum(platform string, id int32) int32 { } return num } + +func (this *Tournament) GetRound(sortId int64) int32 { + d, ok := this.roundPlayers[sortId] + if !ok || d == nil { + return 1 + } + return int32(len(d)) +} From 821f3d7274259933b1eb46b434da88b234be4606 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 15 Aug 2024 16:30:53 +0800 Subject: [PATCH 07/63] update public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 3785ce2..70e09ba 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 3785ce2859fcafdcb9504b8db9a4084ce464907f +Subproject commit 70e09ba50291dd290c3ff6aadb89d127ef4a0f9a From eba92ed00b5845f36f31d972ebdd2c49fe5d7613 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 16 Aug 2024 09:51:35 +0800 Subject: [PATCH 08/63] =?UTF-8?q?=E4=BF=AE=E6=94=B9ChannelId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mgrsrv/api/webapi_worldsrv.go | 2 +- worldsrv/trascate_webapi.go | 128 +++++++++++++++++----------------- 2 files changed, 64 insertions(+), 66 deletions(-) diff --git a/mgrsrv/api/webapi_worldsrv.go b/mgrsrv/api/webapi_worldsrv.go index 121270b..1745f1e 100644 --- a/mgrsrv/api/webapi_worldsrv.go +++ b/mgrsrv/api/webapi_worldsrv.go @@ -243,7 +243,7 @@ func init() { admin.MyAdminApp.Route("/api/player/update_tel", WorldSrvApi) // 删除账号 admin.MyAdminApp.Route("/api/player/delete", WorldSrvApi) - //添加道具 + // 添加道具 admin.MyAdminApp.Route("/api/player/AddItem", WorldSrvApi) } diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index a882271..1620b44 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -1964,6 +1964,65 @@ func init() { pack.Msg = "no any data" return common.ResponseTag_Ok, pack } + + f := func(plt string, snid int32) { + var alipayAcc, alipayAccName, bankAccount, bankAccName, channelId string + if val, ok := playerMap["AlipayAccount"]; ok { + if str, ok := val.(string); ok { + alipayAcc = str + } + } + if val, ok := playerMap["AlipayAccName"]; ok { + if str, ok := val.(string); ok { + alipayAccName = str + } + } + if val, ok := playerMap["BankAccount"]; ok { + if str, ok := val.(string); ok { + bankAccount = str + } + } + if val, ok := playerMap["BankAccName"]; ok { + if str, ok := val.(string); ok { + bankAccName = str + } + } + if val, ok := playerMap["ChannelId"]; ok { + if str, ok := val.(string); ok { + channelId = str + } + } + + if alipayAcc != "" || alipayAccName != "" { + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + model.NewBankBindLog(msg.SnId, msg.Platform, model.BankBindLogType_Ali, + alipayAccName, alipayAcc, 2) + return nil + }), nil, "NewBankBindLog").Start() + } + if bankAccount != "" || bankAccName != "" { + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + model.NewBankBindLog(msg.SnId, msg.Platform, model.BankBindLogType_Bank, + bankAccName, bankAccount, 2) + return nil + }), nil, "NewBankBindLog").Start() + } + if channelId != "" { + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + a, err := model.GetAccountBySnid(plt, snid) + if err != nil { + logger.Logger.Errorf("GetAccountBySnid error: %v", err) + return nil + } + a.ChannelId = channelId + if err = model.UpdateAccount(a); err != nil { + logger.Logger.Errorf("UpdateAccount error: %v", err) + } + return nil + }), nil).StartByExecutor("UpdateChannelId") + } + } + pack.Tag = webapiproto.TagCode_SUCCESS player := PlayerMgrSington.GetPlayerBySnId(msg.SnId) if player != nil { @@ -1985,7 +2044,7 @@ func init() { if v.FieldByName(k).CanInterface() { switch f.Type.Kind() { case reflect.Int64, reflect.Int32: - a, _ := strconv.ParseInt((fmt.Sprintf("%v", n)), 10, 64) + a, _ := strconv.ParseInt(fmt.Sprintf("%v", n), 10, 64) s.FieldByName(k).SetInt(a) case reflect.Bool: s.FieldByName(k).SetBool(n.(bool)) @@ -2002,42 +2061,8 @@ func init() { pd = SetInfo(pd, *pd, playerMap) player.dirty = true player.SendDiffData() - var alipayAcc, alipayAccName, bankAccount, bankAccName string - if val, ok := playerMap["AlipayAccount"]; ok { - if str, ok := val.(string); ok { - alipayAcc = str - } - } - if val, ok := playerMap["AlipayAccName"]; ok { - if str, ok := val.(string); ok { - alipayAccName = str - } - } - if val, ok := playerMap["BankAccount"]; ok { - if str, ok := val.(string); ok { - bankAccount = str - } - } - if val, ok := playerMap["BankAccName"]; ok { - if str, ok := val.(string); ok { - bankAccName = str - } - } - if alipayAcc != "" || alipayAccName != "" { - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - model.NewBankBindLog(msg.SnId, msg.Platform, model.BankBindLogType_Ali, - alipayAccName, alipayAcc, 2) - return nil - }), nil, "NewBankBindLog").Start() - } - if bankAccount != "" || bankAccName != "" { - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - model.NewBankBindLog(msg.SnId, msg.Platform, model.BankBindLogType_Bank, - bankAccName, bankAccount, 2) - return nil - }), nil, "NewBankBindLog").Start() - } pack.Msg = "success" + f(pd.Platform, pd.SnId) return common.ResponseTag_Ok, pack } } else { @@ -2053,35 +2078,7 @@ func init() { //直接操作数据库 err := model.UpdatePlayerElement(msg.Platform, msg.SnId, playerMap) if err == nil { - var alipayAcc, alipayAccName, bankAccount, bankAccName string - if val, ok := playerMap["AlipayAccount"]; ok { - if str, ok := val.(string); ok { - alipayAcc = str - } - } - if val, ok := playerMap["AlipayAccName"]; ok { - if str, ok := val.(string); ok { - alipayAccName = str - } - } - if val, ok := playerMap["BankAccount"]; ok { - if str, ok := val.(string); ok { - bankAccount = str - } - } - if val, ok := playerMap["BankAccName"]; ok { - if str, ok := val.(string); ok { - bankAccName = str - } - } - if alipayAcc != "" || alipayAccName != "" { - model.NewBankBindLog(msg.SnId, msg.Platform, model.BankBindLogType_Ali, - alipayAccName, alipayAcc, 2) - } - if bankAccount != "" || bankAccName != "" { - model.NewBankBindLog(msg.SnId, msg.Platform, model.BankBindLogType_Bank, - bankAccName, bankAccount, 2) - } + f(msg.Platform, msg.SnId) } else if err != nil { logger.Logger.Error("UpdatePlayerElement task marshal data error:", err) } @@ -3730,6 +3727,7 @@ func init() { })).StartByExecutor(fmt.Sprint(msg.GetSnid())) return common.ResponseTag_TransactYield, pack })) + WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/player/AddItem", WebAPIHandlerWrapper( func(tNode *transact.TransNode, params []byte) (int, proto.Message) { pack := &webapiproto.SAAddItemById{} From e5b80fda166b5c078d4b59171c171caaa5744cc7 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 16 Aug 2024 10:23:48 +0800 Subject: [PATCH 09/63] =?UTF-8?q?=E5=B0=8F=E7=B2=BE=E7=81=B5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etcd/keyconf.go | 1 + model/config.go | 2 + protocol/player/player.pb.go | 1038 +++++++++++++++++++++------------- protocol/player/player.proto | 23 +- protocol/webapi/common.pb.go | 144 ++++- protocol/webapi/common.proto | 7 + public | 2 +- worldsrv/etcd.go | 47 +- worldsrv/player.go | 20 +- 9 files changed, 821 insertions(+), 463 deletions(-) diff --git a/etcd/keyconf.go b/etcd/keyconf.go index f28940f..1dc4fd5 100644 --- a/etcd/keyconf.go +++ b/etcd/keyconf.go @@ -40,4 +40,5 @@ const ( ETCDKEY_AWARD_CONFIG = "/game/awardlog_config" //获奖记录 ETCDKEY_GUIDE = "/game/guide_config" //新手引导配置 ETCDKEY_MatchAudience = "/game/match_audience" //比赛观众 + ETCDKEY_Spirit = "/game/spirit" // 小精灵配置 ) diff --git a/model/config.go b/model/config.go index 3d47312..cce71af 100644 --- a/model/config.go +++ b/model/config.go @@ -136,6 +136,8 @@ type AllConfig struct { // 新手引导配置 *webapi.GuideConfig MatchAudience map[int32]*webapi.MatchAudience // 比赛观众列表 + // 小精灵配置 + *webapi.SpiritConfig } type GlobalConfig struct { diff --git a/protocol/player/player.pb.go b/protocol/player/player.pb.go index 4b725cd..d6670e6 100644 --- a/protocol/player/player.pb.go +++ b/protocol/player/player.pb.go @@ -412,6 +412,7 @@ const ( PlayerPacketID_PACKET_CSUpdateAttribute PlayerPacketID = 2840 //请求更新属性 PlayerPacketID_PACKET_SCUpdateAttribute PlayerPacketID = 2841 //返回更新属性 PlayerPacketID_PACKET_SCGuideConfig PlayerPacketID = 2842 //返回引导配置 + PlayerPacketID_PACKET_SCDataConfig PlayerPacketID = 2843 //通知配置更新 ) // Enum value maps for PlayerPacketID. @@ -558,6 +559,7 @@ var ( 2840: "PACKET_CSUpdateAttribute", 2841: "PACKET_SCUpdateAttribute", 2842: "PACKET_SCGuideConfig", + 2843: "PACKET_SCDataConfig", } PlayerPacketID_value = map[string]int32{ "PACKET_PLAYERPACKET_ZERO": 0, @@ -701,6 +703,7 @@ var ( "PACKET_CSUpdateAttribute": 2840, "PACKET_SCUpdateAttribute": 2841, "PACKET_SCGuideConfig": 2842, + "PACKET_SCDataConfig": 2843, } ) @@ -10893,6 +10896,169 @@ func (x *SCGuideConfig) GetSkip() int32 { return 0 } +type Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Tp 类型: + // 1:小精灵快捷入口 On开关 Value地址 + // 2: ... + // ... + Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` + On bool `protobuf:"varint,2,opt,name=On,proto3" json:"On,omitempty"` + Value string `protobuf:"bytes,3,opt,name=Value,proto3" json:"Value,omitempty"` + Num int64 `protobuf:"varint,4,opt,name=Num,proto3" json:"Num,omitempty"` + Values []string `protobuf:"bytes,5,rep,name=Values,proto3" json:"Values,omitempty"` + Nums []int64 `protobuf:"varint,6,rep,packed,name=Nums,proto3" json:"Nums,omitempty"` + Ons []bool `protobuf:"varint,7,rep,packed,name=Ons,proto3" json:"Ons,omitempty"` + Map map[int64]int64 `protobuf:"bytes,8,rep,name=Map,proto3" json:"Map,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapStr map[string]string `protobuf:"bytes,9,rep,name=MapStr,proto3" json:"MapStr,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Config) Reset() { + *x = Config{} + if protoimpl.UnsafeEnabled { + mi := &file_player_proto_msgTypes[156] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Config) ProtoMessage() {} + +func (x *Config) ProtoReflect() protoreflect.Message { + mi := &file_player_proto_msgTypes[156] + 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 Config.ProtoReflect.Descriptor instead. +func (*Config) Descriptor() ([]byte, []int) { + return file_player_proto_rawDescGZIP(), []int{156} +} + +func (x *Config) GetTp() int32 { + if x != nil { + return x.Tp + } + return 0 +} + +func (x *Config) GetOn() bool { + if x != nil { + return x.On + } + return false +} + +func (x *Config) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *Config) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 +} + +func (x *Config) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +func (x *Config) GetNums() []int64 { + if x != nil { + return x.Nums + } + return nil +} + +func (x *Config) GetOns() []bool { + if x != nil { + return x.Ons + } + return nil +} + +func (x *Config) GetMap() map[int64]int64 { + if x != nil { + return x.Map + } + return nil +} + +func (x *Config) GetMapStr() map[string]string { + if x != nil { + return x.MapStr + } + return nil +} + +//PACKET_SCDataConfig +type SCDataConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cfg []*Config `protobuf:"bytes,1,rep,name=Cfg,proto3" json:"Cfg,omitempty"` +} + +func (x *SCDataConfig) Reset() { + *x = SCDataConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_player_proto_msgTypes[157] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCDataConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCDataConfig) ProtoMessage() {} + +func (x *SCDataConfig) ProtoReflect() protoreflect.Message { + mi := &file_player_proto_msgTypes[157] + 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 SCDataConfig.ProtoReflect.Descriptor instead. +func (*SCDataConfig) Descriptor() ([]byte, []int) { + return file_player_proto_rawDescGZIP(), []int{157} +} + +func (x *SCDataConfig) GetCfg() []*Config { + if x != nil { + return x.Cfg + } + return nil +} + var File_player_proto protoreflect.FileDescriptor var file_player_proto_rawDesc = []byte{ @@ -12008,390 +12174,417 @@ var file_player_proto_rawDesc = []byte{ 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x33, 0x0a, 0x0d, 0x53, 0x43, 0x47, 0x75, 0x69, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x2a, 0x87, 0x0f, 0x0a, 0x0c, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x10, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x10, 0xe8, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x5f, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x61, 0x6d, 0x65, 0x10, 0xef, 0x07, 0x12, 0x1c, 0x0a, - 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0xf1, 0x07, 0x12, 0x12, 0x0a, 0x0d, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x10, 0xf5, 0x07, 0x12, - 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x52, 0x65, 0x73, 0x56, - 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, 0x10, 0x94, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x49, 0x73, 0x4c, - 0x6f, 0x77, 0x10, 0x95, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, - 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0xa0, 0x08, 0x12, 0x14, - 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x69, 0x63, 0x6b, 0x49, 0x73, 0x4e, 0x75, 0x6c, - 0x6c, 0x10, 0xa4, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x69, 0x63, - 0x6b, 0x49, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0xa5, 0x08, 0x12, 0x14, 0x0a, 0x0f, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x10, 0xa6, - 0x08, 0x12, 0x13, 0x0a, 0x0e, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x63, 0x6f, 0x6e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x10, 0xa7, 0x08, 0x12, 0x12, 0x0a, 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, - 0x65, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xa8, 0x08, 0x12, 0x12, 0x0a, 0x0d, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x54, 0x65, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xa9, 0x08, 0x12, 0x17, - 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x10, 0xaa, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xab, 0x08, 0x12, 0x14, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x54, 0x65, 0x6c, 0x49, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0xac, 0x08, 0x12, 0x1e, - 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xae, 0x08, 0x12, 0x17, - 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x65, 0x6c, 0x49, 0x73, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x10, 0xaf, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x49, 0x6e, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xb0, 0x08, 0x12, 0x16, - 0x0a, 0x11, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x69, 0x63, 0x6b, 0x49, 0x73, 0x54, 0x6f, 0x6f, - 0x4c, 0x65, 0x6e, 0x10, 0xb1, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x10, 0xb2, 0x08, 0x12, - 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x69, 0x63, 0x6b, 0x49, 0x73, 0x49, 0x6c, - 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, 0xbb, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0xbc, 0x08, - 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x61, 0x64, 0x53, 0x70, 0x72, 0x65, - 0x61, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x49, 0x64, 0x10, 0xc2, 0x08, 0x12, 0x1b, - 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0xc3, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x53, 0x70, 0x72, 0x65, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x64, 0x46, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x10, 0xc4, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x10, 0xc5, 0x08, - 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x70, 0x72, 0x65, 0x61, 0x64, 0x42, - 0x69, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x4c, 0x6f, 0x6f, 0x70, 0x10, 0xc6, 0x08, - 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0xc7, - 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x69, 0x63, 0x6b, 0x49, 0x73, - 0x43, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x10, 0xd0, 0x08, 0x12, 0x14, 0x0a, - 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x6f, 0x72, - 0x10, 0xd4, 0x08, 0x12, 0x14, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0xd5, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x43, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x69, 0x6e, 0x64, 0x10, 0xd6, - 0x08, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x65, 0x72, 0x48, 0x61, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x10, 0xd7, 0x08, 0x12, 0x1c, 0x0a, 0x17, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4e, 0x6f, 0x50, - 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x10, 0xd8, 0x08, 0x12, 0x28, 0x0a, 0x23, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, - 0x6c, 0x10, 0xd3, 0x0f, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, - 0x64, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x10, 0xd5, 0x0f, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x42, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x41, 0x63, 0x63, 0x4e, 0x61, - 0x6d, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x10, 0xd6, 0x0f, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x53, 0x61, 0x66, 0x65, 0x62, 0x6f, 0x78, 0x5f, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, 0xd7, 0x0f, 0x12, 0x1c, 0x0a, - 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x4e, - 0x61, 0x6d, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x10, 0xd8, 0x0f, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x10, 0xd9, 0x0f, 0x12, 0x1f, 0x0a, 0x1a, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x41, 0x63, - 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x10, 0xda, 0x0f, 0x12, 0x1e, 0x0a, - 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x4e, - 0x61, 0x6d, 0x65, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, 0xdb, 0x0f, 0x12, 0x21, 0x0a, - 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, 0xdc, 0x0f, - 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, 0x6e, - 0x6b, 0x5f, 0x41, 0x63, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, - 0x10, 0xdd, 0x0f, 0x12, 0x23, 0x0a, 0x1e, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, - 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6c, - 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, 0xde, 0x0f, 0x12, 0x23, 0x0a, 0x1e, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x41, 0x63, 0x63, 0x4e, - 0x61, 0x6d, 0x65, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, 0xdf, 0x0f, 0x12, 0x22, 0x0a, - 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, - 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xe0, - 0x0f, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, - 0x6e, 0x6b, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x10, 0xe1, 0x0f, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x49, 0x50, 0x5f, 0x54, 0x6f, 0x6f, 0x4d, 0x61, 0x6e, 0x79, 0x52, 0x65, - 0x67, 0x10, 0xe2, 0x0f, 0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, - 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x10, 0xe3, 0x0f, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, - 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x10, 0xe4, 0x0f, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x61, 0x6e, - 0x6b, 0x41, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x5f, 0x4e, 0x6f, 0x74, 0x53, 0x61, 0x6d, 0x65, 0x10, - 0xe5, 0x0f, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, - 0x61, 0x6e, 0x6b, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0xe6, 0x0f, 0x12, 0x15, 0x0a, 0x10, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x4a, 0x79, 0x62, 0x5f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x10, - 0xb4, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4a, 0x79, 0x62, 0x5f, 0x43, - 0x6f, 0x64, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0xb5, 0x10, 0x12, 0x15, 0x0a, 0x10, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x4a, 0x79, 0x62, 0x5f, 0x54, 0x69, 0x6d, 0x65, 0x45, 0x72, 0x72, 0x10, - 0xb6, 0x10, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4a, 0x79, 0x62, 0x5f, 0x43, - 0x6f, 0x64, 0x65, 0x45, 0x72, 0x72, 0x10, 0xb7, 0x10, 0x12, 0x26, 0x0a, 0x21, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x5f, 0x59, 0x6f, 0x75, 0x48, 0x61, 0x64, - 0x42, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xd9, - 0x36, 0x12, 0x29, 0x0a, 0x24, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, - 0x64, 0x5f, 0x59, 0x6f, 0x75, 0x48, 0x61, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x43, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xda, 0x36, 0x12, 0x1a, 0x0a, 0x15, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x75, 0x69, 0x64, 0x65, 0x53, 0x74, 0x65, 0x70, 0x5f, 0x46, - 0x69, 0x6e, 0x69, 0x73, 0x68, 0x10, 0xc1, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x47, 0x75, 0x69, 0x64, 0x65, 0x53, 0x74, 0x65, 0x70, 0x5f, 0x46, 0x72, 0x6f, 0x6e, 0x74, - 0x10, 0xc2, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x75, 0x69, 0x64, - 0x65, 0x53, 0x74, 0x65, 0x70, 0x5f, 0x45, 0x6e, 0x64, 0x10, 0xc3, 0x3e, 0x12, 0x15, 0x0a, 0x10, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x75, 0x69, 0x64, 0x65, 0x5f, 0x43, 0x6c, 0x6f, 0x73, 0x65, - 0x10, 0xc4, 0x3e, 0x12, 0x14, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x75, 0x69, 0x64, - 0x65, 0x5f, 0x53, 0x6b, 0x69, 0x70, 0x10, 0xc5, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x47, 0x75, 0x69, 0x64, 0x65, 0x5f, 0x53, 0x6b, 0x69, 0x70, 0x43, 0x6c, 0x6f, 0x73, - 0x65, 0x10, 0xc6, 0x3e, 0x2a, 0xad, 0x20, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, - 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xb4, 0x10, - 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xb5, 0x10, 0x12, 0x18, 0x0a, 0x13, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x41, 0x59, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x45, 0x10, 0xb6, 0x10, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x54, 0x48, 0x49, 0x52, 0x44, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, - 0x54, 0x41, 0x10, 0xb7, 0x10, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x54, 0x48, 0x49, 0x52, 0x44, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, - 0x54, 0x41, 0x10, 0xb8, 0x10, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0xb9, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x45, 0x58, - 0x10, 0xba, 0x10, 0x12, 0x14, 0x0a, 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x50, 0x4d, 0x43, 0x4d, 0x44, 0x10, 0xbb, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x43, 0x48, 0x47, 0x44, - 0x41, 0x54, 0x41, 0x10, 0xbc, 0x10, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x57, 0x45, 0x43, 0x48, 0x41, 0x54, - 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0xbd, 0x10, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x57, 0x45, 0x43, - 0x48, 0x41, 0x54, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0xbe, 0x10, 0x12, 0x17, 0x0a, 0x12, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, - 0x49, 0x44, 0x10, 0xbf, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x49, 0x44, 0x10, 0xc0, 0x10, 0x12, 0x17, - 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, - 0x47, 0x41, 0x4d, 0x45, 0x10, 0xc1, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xc2, 0x10, - 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x50, - 0x52, 0x45, 0x41, 0x44, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xc3, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x50, 0x52, 0x45, 0x41, 0x44, 0x42, - 0x49, 0x4e, 0x44, 0x10, 0xc4, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x4e, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x4f, 0x4b, - 0x45, 0x4e, 0x10, 0xc7, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x47, 0x45, 0x4e, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x4f, 0x4b, 0x45, - 0x4e, 0x10, 0xc8, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x4e, 0x45, 0x57, 0x4d, 0x53, 0x47, 0x10, 0xc9, - 0x10, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, - 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x4e, 0x45, 0x57, 0x4d, 0x53, 0x47, 0x41, 0x43, 0x4b, 0x10, 0xca, - 0x10, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, - 0x52, 0x56, 0x4d, 0x53, 0x47, 0x10, 0xcb, 0x10, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, - 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xcc, 0x10, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, - 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xcd, 0x10, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, - 0x54, 0x44, 0x41, 0x54, 0x41, 0x10, 0xce, 0x10, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, - 0x54, 0x44, 0x41, 0x54, 0x41, 0x10, 0xcf, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, - 0x4e, 0x44, 0x10, 0xd0, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x50, 0x52, 0x4f, 0x4d, 0x4f, 0x54, 0x45, 0x52, 0x10, - 0xd1, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x42, 0x49, 0x4e, 0x44, 0x50, 0x52, 0x4f, 0x4d, 0x4f, 0x54, 0x45, 0x52, 0x10, 0xd2, 0x10, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x42, 0x49, 0x4e, - 0x44, 0x50, 0x52, 0x4f, 0x4d, 0x4f, 0x54, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xd3, - 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, - 0x65, 0x74, 0x53, 0x70, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x57, 0x49, 0x73, 0x4f, 0x70, 0x65, 0x6e, - 0x10, 0xd4, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x47, 0x65, 0x74, 0x53, 0x70, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x57, 0x49, 0x73, 0x4f, 0x70, - 0x65, 0x6e, 0x10, 0xd5, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x50, 0x61, 0x79, 0x41, 0x63, 0x74, 0x5f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, - 0xd6, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x4e, 0x49, 0x43, 0x4b, 0x10, 0xdc, 0x10, 0x12, 0x19, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, - 0x45, 0x4e, 0x49, 0x43, 0x4b, 0x10, 0xdd, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x49, 0x43, 0x4f, 0x4e, - 0x10, 0xde, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x49, 0x43, 0x4f, 0x4e, 0x10, 0xdf, 0x10, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x45, 0x53, 0x45, 0x58, 0x10, 0xe0, 0x10, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x45, 0x58, 0x10, - 0xe1, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0xe2, - 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x55, - 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0xe3, 0x10, - 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x42, 0x49, - 0x4e, 0x44, 0x41, 0x4c, 0x49, 0x50, 0x41, 0x59, 0x10, 0xe4, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x41, 0x4c, 0x49, - 0x50, 0x41, 0x59, 0x10, 0xe5, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x42, 0x41, 0x4e, 0x4b, 0x10, 0xe6, 0x10, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x42, 0x49, 0x4e, - 0x44, 0x42, 0x41, 0x4e, 0x4b, 0x10, 0xe7, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x43, 0x4f, - 0x49, 0x4e, 0x10, 0xe8, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x43, 0x4f, 0x49, 0x4e, 0x10, - 0xe9, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0xea, - 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0xeb, 0x10, - 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x56, 0x45, - 0x52, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x10, 0xec, - 0x10, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x56, - 0x45, 0x52, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x43, 0x4f, 0x44, 0x45, 0x10, - 0xed, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x49, 0x4e, 0x4c, 0x4f, 0x47, 0x10, 0xee, - 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, - 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x49, 0x4e, 0x4c, 0x4f, 0x47, 0x10, 0xef, 0x10, - 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, - 0x54, 0x53, 0x41, 0x46, 0x45, 0x42, 0x4f, 0x58, 0x43, 0x4f, 0x49, 0x4e, 0x4c, 0x4f, 0x47, 0x10, - 0xf0, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x47, 0x45, 0x54, 0x53, 0x41, 0x46, 0x45, 0x42, 0x4f, 0x58, 0x43, 0x4f, 0x49, 0x4e, 0x4c, 0x4f, - 0x47, 0x10, 0xf1, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x10, 0xf2, 0x10, 0x12, 0x17, 0x0a, - 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, - 0x54, 0x45, 0x52, 0x10, 0xf3, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x4f, 0x55, 0x54, 0x4c, 0x49, 0x4e, 0x45, 0x10, - 0xf4, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x48, 0x45, 0x41, 0x44, 0x4f, 0x55, 0x54, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0xf5, 0x10, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x49, 0x4e, 0x56, 0x49, - 0x54, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x10, 0xf6, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x4f, 0x44, - 0x45, 0x10, 0xf7, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x57, 0x45, 0x42, 0x41, 0x50, 0x49, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, - 0x41, 0x53, 0x53, 0x10, 0xf8, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x42, 0x41, 0x50, 0x49, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x50, 0x41, 0x53, 0x53, 0x10, 0xf9, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x42, 0x41, 0x50, 0x49, 0x5f, 0x53, 0x59, 0x53, - 0x54, 0x45, 0x4d, 0x50, 0x41, 0x53, 0x53, 0x10, 0xfa, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x42, 0x41, 0x50, 0x49, 0x5f, 0x53, - 0x59, 0x53, 0x54, 0x45, 0x4d, 0x50, 0x41, 0x53, 0x53, 0x10, 0xfb, 0x10, 0x12, 0x21, 0x0a, 0x1c, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x49, 0x4d, 0x41, - 0x47, 0x45, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x43, 0x4f, 0x44, 0x45, 0x10, 0xfc, 0x10, 0x12, - 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, - 0x49, 0x4d, 0x41, 0x47, 0x45, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x43, 0x4f, 0x44, 0x45, 0x10, - 0xfd, 0x10, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x47, 0x45, 0x54, 0x53, 0x4c, 0x49, 0x44, 0x45, 0x52, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x43, - 0x4f, 0x44, 0x45, 0x10, 0xfe, 0x10, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x53, 0x4c, 0x49, 0x44, 0x45, 0x52, 0x56, 0x45, 0x52, - 0x49, 0x46, 0x59, 0x43, 0x4f, 0x44, 0x45, 0x10, 0xff, 0x10, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x49, 0x4f, 0x53, 0x49, 0x4e, 0x53, 0x54, 0x41, - 0x4c, 0x4c, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x80, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x49, 0x4f, 0x53, 0x49, 0x4e, 0x53, 0x54, - 0x41, 0x4c, 0x4c, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x81, 0x11, 0x12, 0x1a, 0x0a, 0x15, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0x82, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x10, 0x83, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x47, 0x45, 0x54, 0x44, 0x41, 0x54, 0x41, 0x4c, 0x4f, 0x47, 0x10, 0x84, 0x11, 0x12, - 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, - 0x44, 0x41, 0x54, 0x41, 0x4c, 0x4f, 0x47, 0x10, 0x85, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, - 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x41, 0x4e, 0x53, 0x57, 0x45, 0x52, 0x10, 0x86, 0x11, 0x12, - 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x87, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x4f, - 0x49, 0x4e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x88, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x45, - 0x53, 0x48, 0x49, 0x50, 0x54, 0x49, 0x50, 0x53, 0x10, 0x89, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, - 0x47, 0x10, 0x8a, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x47, 0x41, 0x4d, 0x45, 0x45, 0x58, 0x44, 0x52, 0x4f, 0x50, 0x49, 0x54, 0x45, 0x4d, 0x53, - 0x10, 0x8b, 0x11, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x56, 0x49, 0x50, 0x42, 0x55, 0x59, 0x10, 0x8c, 0x11, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x56, 0x49, 0x50, 0x42, 0x55, 0x59, 0x10, 0x8d, - 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, - 0x52, 0x41, 0x57, 0x56, 0x49, 0x50, 0x47, 0x49, 0x46, 0x54, 0x10, 0x8e, 0x11, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x52, 0x41, 0x57, 0x56, - 0x49, 0x50, 0x47, 0x49, 0x46, 0x54, 0x10, 0x8f, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x50, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x90, - 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x56, - 0x49, 0x50, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x91, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x57, 0x45, 0x4c, 0x46, 0x41, 0x52, 0x45, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0x92, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x50, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x93, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x56, 0x49, 0x50, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x94, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x41, 0x59, 0x47, 0x4f, 0x4f, 0x44, 0x53, 0x49, 0x4e, - 0x46, 0x4f, 0x10, 0x95, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x96, 0x11, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4c, 0x49, 0x45, - 0x4e, 0x54, 0x5f, 0x4c, 0x4f, 0x47, 0x10, 0x97, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x4f, - 0x47, 0x10, 0x98, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x10, 0x99, 0x11, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48, 0x54, 0x54, 0x50, - 0x5f, 0x50, 0x41, 0x53, 0x53, 0x10, 0x9a, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x79, 0x43, 0x6f, 0x64, 0x65, 0x10, 0x9b, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x79, 0x43, 0x6f, 0x64, 0x65, 0x10, 0x9c, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x10, 0xf1, 0x15, - 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48, 0x65, - 0x61, 0x64, 0x55, 0x72, 0x6c, 0x10, 0xf2, 0x15, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55, 0x6e, 0x50, 0x6f, - 0x77, 0x65, 0x72, 0x10, 0xf3, 0x15, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55, 0x6e, 0x50, 0x6f, 0x77, 0x65, - 0x72, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xf4, 0x15, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55, 0x70, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x10, 0xf5, 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x64, 0x65, - 0x10, 0xf6, 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x64, 0x65, 0x10, 0xf7, 0x15, - 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x42, 0x69, 0x6e, - 0x64, 0x54, 0x65, 0x6c, 0x10, 0xf8, 0x15, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x10, 0xf9, 0x15, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x42, 0x69, 0x6e, 0x64, 0x54, - 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x15, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x10, 0xfb, 0x15, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x42, 0x69, 0x6c, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xfc, 0x15, 0x12, 0x16, 0x0a, 0x11, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x42, 0x69, 0x6c, 0x6c, 0x4c, 0x69, 0x73, - 0x74, 0x10, 0xfd, 0x15, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x53, 0x61, 0x76, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x10, - 0xfe, 0x15, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x53, - 0x61, 0x76, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xff, 0x15, - 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x68, - 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x80, - 0x16, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, - 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x10, - 0x81, 0x16, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x10, 0x82, 0x16, 0x12, - 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x68, 0x6f, - 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x10, 0x83, 0x16, 0x12, 0x20, 0x0a, 0x1b, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, - 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0x84, 0x16, 0x12, 0x11, - 0x0a, 0x0c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x41, 0x44, 0x56, 0x10, 0x85, - 0x16, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x41, 0x44, - 0x56, 0x10, 0x86, 0x16, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x47, 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x43, 0x61, 0x72, 0x64, 0x41, 0x77, 0x61, 0x72, - 0x79, 0x10, 0x87, 0x16, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x50, 0x69, 0x67, 0x42, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x88, 0x16, 0x12, - 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x10, 0x89, 0x16, 0x12, 0x1d, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x10, 0x8a, 0x16, 0x12, 0x17, 0x0a, - 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x10, 0x8b, 0x16, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x8c, 0x16, 0x12, - 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x10, - 0x8d, 0x16, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, - 0x66, 0x6f, 0x10, 0x8e, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, - 0x79, 0x10, 0x8f, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, - 0x10, 0x90, 0x16, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x4c, 0x75, - 0x63, 0x6b, 0x79, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0x91, 0x16, 0x12, 0x26, 0x0a, 0x21, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, - 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x10, 0x92, 0x16, 0x12, 0x12, 0x0a, 0x0d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x49, 0x74, 0x65, 0x6d, 0x10, 0x93, 0x16, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x10, 0x94, 0x16, 0x12, - 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x4c, 0x6f, 0x67, 0x10, 0x95, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x50, 0x6f, 0x70, 0x55, 0x70, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x96, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x6f, 0x70, 0x55, 0x70, 0x57, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x97, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x10, 0x98, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x10, 0x99, 0x16, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x47, 0x75, 0x69, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x10, 0x9a, 0x16, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x22, 0xe0, 0x02, 0x0a, 0x06, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4e, + 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, + 0x06, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x75, 0x6d, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x03, 0x52, 0x04, 0x4e, 0x75, 0x6d, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x4f, 0x6e, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x08, 0x52, 0x03, 0x4f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x03, 0x4d, + 0x61, 0x70, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x03, 0x4d, 0x61, 0x70, 0x12, 0x32, 0x0a, 0x06, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x2e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x1a, 0x36, 0x0a, 0x08, 0x4d, 0x61, + 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x30, 0x0a, + 0x0c, 0x53, 0x43, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, + 0x03, 0x43, 0x66, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x2a, + 0x87, 0x0f, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, + 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, + 0x01, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0xe8, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x61, 0x6d, 0x65, 0x10, + 0xef, 0x07, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0xf1, 0x07, + 0x12, 0x12, 0x0a, 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 0x10, 0xf5, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x59, 0x6f, 0x75, + 0x72, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, 0x10, 0x94, 0x08, 0x12, + 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, 0x70, 0x70, 0x56, + 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, 0x10, 0x95, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, + 0x10, 0xa0, 0x08, 0x12, 0x14, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x69, 0x63, 0x6b, + 0x49, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x10, 0xa4, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x4e, 0x69, 0x63, 0x6b, 0x49, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0xa5, 0x08, + 0x12, 0x14, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x74, 0x6c, 0x79, 0x10, 0xa6, 0x08, 0x12, 0x13, 0x0a, 0x0e, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, + 0x63, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xa7, 0x08, 0x12, 0x12, 0x0a, 0x0d, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x53, 0x65, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xa8, 0x08, 0x12, + 0x12, 0x0a, 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x65, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x10, 0xa9, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x55, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xaa, 0x08, 0x12, 0x1f, 0x0a, 0x1a, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xab, 0x08, 0x12, 0x14, 0x0a, + 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x65, 0x6c, 0x49, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, + 0x10, 0xac, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x61, 0x66, 0x65, + 0x42, 0x6f, 0x78, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x10, 0xae, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x65, 0x6c, 0x49, + 0x73, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x10, 0xaf, 0x08, 0x12, 0x15, 0x0a, 0x10, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x6e, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, + 0x10, 0xb0, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x69, 0x63, 0x6b, + 0x49, 0x73, 0x54, 0x6f, 0x6f, 0x4c, 0x65, 0x6e, 0x10, 0xb1, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x45, 0x71, 0x75, 0x61, + 0x6c, 0x10, 0xb2, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x69, 0x63, + 0x6b, 0x49, 0x73, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, 0xbb, 0x08, 0x12, 0x16, 0x0a, + 0x11, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x10, 0xbc, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x61, + 0x64, 0x53, 0x70, 0x72, 0x65, 0x61, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x49, 0x64, + 0x10, 0xc2, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x72, 0x49, 0x64, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0xc3, 0x08, + 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x70, 0x72, 0x65, 0x61, 0x64, 0x42, + 0x69, 0x6e, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0xc4, 0x08, 0x12, 0x17, 0x0a, 0x12, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x42, 0x69, + 0x6e, 0x64, 0x10, 0xc5, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x70, + 0x72, 0x65, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x4c, 0x6f, + 0x6f, 0x70, 0x10, 0xc6, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x10, 0xc7, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, + 0x69, 0x63, 0x6b, 0x49, 0x73, 0x43, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x10, + 0xd0, 0x08, 0x12, 0x14, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x50, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x6f, 0x72, 0x10, 0xd4, 0x08, 0x12, 0x14, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x4e, 0x6f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x10, 0xd5, 0x08, 0x12, 0x16, + 0x0a, 0x11, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, + 0x69, 0x6e, 0x64, 0x10, 0xd6, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, + 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x48, 0x61, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x10, 0xd7, + 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x4e, 0x6f, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x10, 0xd8, 0x08, 0x12, + 0x28, 0x0a, 0x23, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x49, + 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, 0xd3, 0x0f, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x10, 0xd5, 0x0f, 0x12, 0x21, 0x0a, 0x1c, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, + 0x41, 0x63, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x10, 0xd6, 0x0f, 0x12, + 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x61, 0x66, 0x65, 0x62, 0x6f, 0x78, 0x5f, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, + 0xd7, 0x0f, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, + 0x61, 0x6e, 0x6b, 0x5f, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x10, 0xd8, 0x0f, + 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, 0x6e, + 0x6b, 0x5f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x10, 0xd9, + 0x0f, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, + 0x6e, 0x6b, 0x5f, 0x41, 0x63, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x10, + 0xda, 0x0f, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, + 0x61, 0x6e, 0x6b, 0x5f, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, + 0xdb, 0x0f, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, + 0x61, 0x6e, 0x6b, 0x5f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6c, 0x6c, 0x65, 0x67, + 0x61, 0x6c, 0x10, 0xdc, 0x0f, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, + 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x41, 0x63, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6c, + 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, 0xdd, 0x0f, 0x12, 0x23, 0x0a, 0x1e, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, 0xde, 0x0f, 0x12, 0x23, 0x0a, + 0x1e, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, + 0x5f, 0x41, 0x63, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x10, + 0xdf, 0x0f, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x41, + 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x10, 0xe0, 0x0f, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, + 0x69, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xe1, 0x0f, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x49, 0x50, 0x5f, 0x54, 0x6f, 0x6f, 0x4d, + 0x61, 0x6e, 0x79, 0x52, 0x65, 0x67, 0x10, 0xe2, 0x0f, 0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x5f, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0xe3, 0x0f, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0xe4, 0x0f, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x42, 0x61, 0x6e, 0x6b, 0x41, 0x6e, 0x64, 0x41, 0x6c, 0x69, 0x5f, 0x4e, 0x6f, 0x74, + 0x53, 0x61, 0x6d, 0x65, 0x10, 0xe5, 0x0f, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x42, 0x69, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x41, 0x6c, 0x69, 0x70, 0x61, 0x79, 0x5f, 0x4e, + 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0xe6, 0x0f, + 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4a, 0x79, 0x62, 0x5f, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x10, 0xb4, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x4a, 0x79, 0x62, 0x5f, 0x43, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0xb5, 0x10, + 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4a, 0x79, 0x62, 0x5f, 0x54, 0x69, 0x6d, + 0x65, 0x45, 0x72, 0x72, 0x10, 0xb6, 0x10, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x4a, 0x79, 0x62, 0x5f, 0x43, 0x6f, 0x64, 0x65, 0x45, 0x72, 0x72, 0x10, 0xb7, 0x10, 0x12, 0x26, + 0x0a, 0x21, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x5f, 0x59, + 0x6f, 0x75, 0x48, 0x61, 0x64, 0x42, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x10, 0xd9, 0x36, 0x12, 0x29, 0x0a, 0x24, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, + 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x5f, 0x59, 0x6f, 0x75, 0x48, 0x61, 0x64, 0x42, 0x61, 0x6e, + 0x6b, 0x65, 0x72, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xda, + 0x36, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x75, 0x69, 0x64, 0x65, 0x53, + 0x74, 0x65, 0x70, 0x5f, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x10, 0xc1, 0x3e, 0x12, 0x19, 0x0a, + 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x75, 0x69, 0x64, 0x65, 0x53, 0x74, 0x65, 0x70, 0x5f, + 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x10, 0xc2, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x47, 0x75, 0x69, 0x64, 0x65, 0x53, 0x74, 0x65, 0x70, 0x5f, 0x45, 0x6e, 0x64, 0x10, 0xc3, + 0x3e, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x75, 0x69, 0x64, 0x65, 0x5f, + 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x10, 0xc4, 0x3e, 0x12, 0x14, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x47, 0x75, 0x69, 0x64, 0x65, 0x5f, 0x53, 0x6b, 0x69, 0x70, 0x10, 0xc5, 0x3e, 0x12, 0x19, + 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x75, 0x69, 0x64, 0x65, 0x5f, 0x53, 0x6b, 0x69, + 0x70, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x10, 0xc6, 0x3e, 0x2a, 0xc7, 0x20, 0x0a, 0x0e, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, + 0x54, 0x41, 0x10, 0xb4, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xb5, 0x10, + 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x41, + 0x59, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xb6, 0x10, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x49, 0x52, 0x44, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xb7, 0x10, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x49, 0x52, 0x44, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xb8, 0x10, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, + 0x54, 0x41, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xb9, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, + 0x41, 0x54, 0x41, 0x45, 0x58, 0x10, 0xba, 0x10, 0x12, 0x14, 0x0a, 0x0f, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4d, 0x43, 0x4d, 0x44, 0x10, 0xbb, 0x10, 0x12, 0x1b, + 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x52, 0x4f, 0x42, 0x4f, + 0x54, 0x43, 0x48, 0x47, 0x44, 0x41, 0x54, 0x41, 0x10, 0xbc, 0x10, 0x12, 0x21, 0x0a, 0x1c, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x57, + 0x45, 0x43, 0x48, 0x41, 0x54, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0xbd, 0x10, 0x12, 0x21, + 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, + 0x47, 0x45, 0x57, 0x45, 0x43, 0x48, 0x41, 0x54, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0xbe, + 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, + 0x55, 0x54, 0x48, 0x45, 0x4e, 0x49, 0x44, 0x10, 0xbf, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x49, 0x44, + 0x10, 0xc0, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xc1, 0x10, 0x12, 0x17, 0x0a, 0x12, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x47, 0x41, + 0x4d, 0x45, 0x10, 0xc2, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x53, 0x50, 0x52, 0x45, 0x41, 0x44, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xc3, 0x10, + 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x50, + 0x52, 0x45, 0x41, 0x44, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xc4, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x4e, 0x43, 0x55, 0x53, 0x54, + 0x4f, 0x4d, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xc7, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x4e, 0x43, 0x55, 0x53, 0x54, 0x4f, + 0x4d, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xc8, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x4e, 0x45, 0x57, + 0x4d, 0x53, 0x47, 0x10, 0xc9, 0x10, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x4e, 0x45, 0x57, 0x4d, 0x53, 0x47, + 0x41, 0x43, 0x4b, 0x10, 0xca, 0x10, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x52, 0x56, 0x4d, 0x53, 0x47, 0x10, 0xcb, 0x10, 0x12, 0x1e, 0x0a, + 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x4a, + 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xcc, 0x10, 0x12, 0x1e, 0x0a, + 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x4a, + 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xcd, 0x10, 0x12, 0x1e, 0x0a, + 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x4a, + 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x44, 0x41, 0x54, 0x41, 0x10, 0xce, 0x10, 0x12, 0x1e, 0x0a, + 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x4a, + 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x44, 0x41, 0x54, 0x41, 0x10, 0xcf, 0x10, 0x12, 0x1b, 0x0a, + 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, + 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd0, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x50, 0x52, 0x4f, 0x4d, + 0x4f, 0x54, 0x45, 0x52, 0x10, 0xd1, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x50, 0x52, 0x4f, 0x4d, 0x4f, 0x54, 0x45, + 0x52, 0x10, 0xd2, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x50, 0x52, 0x4f, 0x4d, 0x4f, 0x54, 0x45, 0x52, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x10, 0xd3, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x65, 0x74, 0x53, 0x70, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x57, 0x49, + 0x73, 0x4f, 0x70, 0x65, 0x6e, 0x10, 0xd4, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x65, 0x74, 0x53, 0x70, 0x72, 0x65, 0x61, 0x64, 0x4c, + 0x57, 0x49, 0x73, 0x4f, 0x70, 0x65, 0x6e, 0x10, 0xd5, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x61, 0x79, 0x41, 0x63, 0x74, 0x5f, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x10, 0xd6, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x4e, 0x49, 0x43, 0x4b, 0x10, + 0xdc, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x4e, 0x49, 0x43, 0x4b, 0x10, 0xdd, 0x10, 0x12, 0x19, 0x0a, + 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, + 0x45, 0x49, 0x43, 0x4f, 0x4e, 0x10, 0xde, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x49, 0x43, 0x4f, 0x4e, + 0x10, 0xdf, 0x10, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x45, 0x58, 0x10, 0xe0, 0x10, 0x12, 0x18, 0x0a, + 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, + 0x45, 0x53, 0x45, 0x58, 0x10, 0xe1, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x41, 0x43, 0x43, 0x4f, + 0x55, 0x4e, 0x54, 0x10, 0xe2, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x41, 0x43, 0x43, 0x4f, 0x55, + 0x4e, 0x54, 0x10, 0xe3, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x41, 0x4c, 0x49, 0x50, 0x41, 0x59, 0x10, 0xe4, 0x10, + 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x42, 0x49, + 0x4e, 0x44, 0x41, 0x4c, 0x49, 0x50, 0x41, 0x59, 0x10, 0xe5, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x42, 0x41, 0x4e, + 0x4b, 0x10, 0xe6, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x42, 0x41, 0x4e, 0x4b, 0x10, 0xe7, 0x10, 0x12, 0x1b, 0x0a, + 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x4f, 0x50, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe8, 0x10, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, + 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe9, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x50, 0x41, 0x53, 0x53, 0x57, + 0x4f, 0x52, 0x44, 0x10, 0xea, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, + 0x52, 0x44, 0x10, 0xeb, 0x10, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x43, + 0x4f, 0x44, 0x45, 0x10, 0xec, 0x10, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x43, 0x4f, 0x44, 0x45, 0x10, 0xed, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x49, 0x4e, + 0x4c, 0x4f, 0x47, 0x10, 0xee, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x49, 0x4e, 0x4c, + 0x4f, 0x47, 0x10, 0xef, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x53, 0x41, 0x46, 0x45, 0x42, 0x4f, 0x58, 0x43, 0x4f, 0x49, + 0x4e, 0x4c, 0x4f, 0x47, 0x10, 0xf0, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x53, 0x41, 0x46, 0x45, 0x42, 0x4f, 0x58, 0x43, + 0x4f, 0x49, 0x4e, 0x4c, 0x4f, 0x47, 0x10, 0xf1, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x10, + 0xf2, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x10, 0xf3, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x4f, 0x55, 0x54, + 0x4c, 0x49, 0x4e, 0x45, 0x10, 0xf4, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x4f, 0x55, 0x54, 0x4c, 0x49, 0x4e, 0x45, + 0x10, 0xf5, 0x10, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x10, 0xf6, 0x10, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x49, 0x4e, 0x56, 0x49, + 0x54, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x10, 0xf7, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x42, 0x41, 0x50, 0x49, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x53, 0x53, 0x10, 0xf8, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x42, 0x41, 0x50, 0x49, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x53, 0x53, 0x10, 0xf9, 0x10, 0x12, 0x20, 0x0a, + 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x42, 0x41, 0x50, + 0x49, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x50, 0x41, 0x53, 0x53, 0x10, 0xfa, 0x10, 0x12, + 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x42, + 0x41, 0x50, 0x49, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x50, 0x41, 0x53, 0x53, 0x10, 0xfb, + 0x10, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, + 0x45, 0x54, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x43, 0x4f, 0x44, + 0x45, 0x10, 0xfc, 0x10, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x47, 0x45, 0x54, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, + 0x43, 0x4f, 0x44, 0x45, 0x10, 0xfd, 0x10, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x53, 0x4c, 0x49, 0x44, 0x45, 0x52, 0x56, 0x45, + 0x52, 0x49, 0x46, 0x59, 0x43, 0x4f, 0x44, 0x45, 0x10, 0xfe, 0x10, 0x12, 0x22, 0x0a, 0x1d, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x53, 0x4c, 0x49, 0x44, + 0x45, 0x52, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x43, 0x4f, 0x44, 0x45, 0x10, 0xff, 0x10, 0x12, + 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x49, 0x4f, 0x53, + 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x80, 0x11, + 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x49, 0x4f, + 0x53, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x53, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x81, + 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, + 0x55, 0x45, 0x52, 0x59, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0x82, 0x11, 0x12, 0x1a, 0x0a, + 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0x83, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x44, 0x41, 0x54, 0x41, 0x4c, 0x4f, + 0x47, 0x10, 0x84, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x47, 0x45, 0x54, 0x44, 0x41, 0x54, 0x41, 0x4c, 0x4f, 0x47, 0x10, 0x85, 0x11, 0x12, + 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x41, 0x4e, 0x53, 0x57, 0x45, + 0x52, 0x10, 0x86, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x87, 0x11, 0x12, + 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x43, 0x4f, 0x49, 0x4e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x88, 0x11, + 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x52, + 0x55, 0x53, 0x54, 0x45, 0x45, 0x53, 0x48, 0x49, 0x50, 0x54, 0x49, 0x50, 0x53, 0x10, 0x89, 0x11, + 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x53, + 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x8a, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x47, 0x41, 0x4d, 0x45, 0x45, 0x58, 0x44, 0x52, 0x4f, 0x50, + 0x49, 0x54, 0x45, 0x4d, 0x53, 0x10, 0x8b, 0x11, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x50, 0x42, 0x55, 0x59, 0x10, 0x8c, 0x11, 0x12, + 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x56, 0x49, 0x50, + 0x42, 0x55, 0x59, 0x10, 0x8d, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x52, 0x41, 0x57, 0x56, 0x49, 0x50, 0x47, 0x49, 0x46, 0x54, 0x10, + 0x8e, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x44, 0x52, 0x41, 0x57, 0x56, 0x49, 0x50, 0x47, 0x49, 0x46, 0x54, 0x10, 0x8f, 0x11, 0x12, 0x16, + 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x50, 0x49, + 0x4e, 0x46, 0x4f, 0x10, 0x90, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x56, 0x49, 0x50, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x91, 0x11, 0x12, 0x1b, + 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x57, 0x45, 0x4c, + 0x46, 0x41, 0x52, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x92, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x50, 0x50, 0x72, 0x69, 0x76, + 0x69, 0x6c, 0x65, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x93, 0x11, 0x12, 0x1f, 0x0a, 0x1a, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x56, 0x49, 0x50, 0x50, 0x72, 0x69, + 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x94, 0x11, 0x12, 0x1b, 0x0a, + 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x41, 0x59, 0x47, 0x4f, + 0x4f, 0x44, 0x53, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x95, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x10, 0x96, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x4f, 0x47, 0x10, 0x97, 0x11, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4c, 0x49, 0x45, + 0x4e, 0x54, 0x5f, 0x4c, 0x4f, 0x47, 0x10, 0x98, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x50, 0x41, 0x53, 0x53, + 0x10, 0x99, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x10, 0x9a, 0x11, 0x12, 0x1e, 0x0a, + 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x10, 0x9b, 0x11, 0x12, 0x1e, 0x0a, + 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x10, 0x9c, 0x11, 0x12, 0x16, 0x0a, + 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x48, 0x65, 0x61, 0x64, 0x55, + 0x72, 0x6c, 0x10, 0xf1, 0x15, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x10, 0xf2, 0x15, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x55, 0x6e, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x10, 0xf3, 0x15, 0x12, 0x20, 0x0a, 0x1b, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55, + 0x6e, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xf4, 0x15, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x55, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x10, 0xf5, 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x4d, + 0x53, 0x43, 0x6f, 0x64, 0x65, 0x10, 0xf6, 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x4d, 0x53, 0x43, 0x6f, + 0x64, 0x65, 0x10, 0xf7, 0x15, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x10, 0xf8, 0x15, 0x12, 0x15, 0x0a, 0x10, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x42, 0x69, 0x6e, 0x64, 0x54, 0x65, 0x6c, + 0x10, 0xf9, 0x15, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x42, 0x69, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x15, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x42, 0x69, 0x6e, 0x64, 0x54, + 0x65, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xfb, 0x15, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x42, 0x69, 0x6c, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xfc, + 0x15, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x42, 0x69, + 0x6c, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xfd, 0x15, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x53, 0x61, 0x76, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xfe, 0x15, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x53, 0x61, 0x76, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x10, 0xff, 0x15, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, + 0x6e, 0x66, 0x6f, 0x10, 0x80, 0x16, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, + 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x81, 0x16, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, + 0x79, 0x10, 0x82, 0x16, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x10, 0x83, + 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, + 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x10, 0x84, 0x16, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x41, 0x44, 0x56, 0x10, 0x85, 0x16, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x41, 0x44, 0x56, 0x10, 0x86, 0x16, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x47, 0x65, 0x74, 0x57, 0x65, 0x65, 0x6b, 0x43, 0x61, 0x72, + 0x64, 0x41, 0x77, 0x61, 0x72, 0x79, 0x10, 0x87, 0x16, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x69, 0x67, 0x42, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x69, + 0x6e, 0x10, 0x88, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x10, 0x89, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x10, + 0x8a, 0x16, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x53, + 0x4d, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x8b, 0x16, 0x12, 0x17, 0x0a, 0x12, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x10, 0x8c, 0x16, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, + 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x8d, 0x16, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, + 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x8e, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, + 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x10, 0x8f, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, + 0x74, 0x74, 0x65, 0x72, 0x79, 0x10, 0x90, 0x16, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, + 0x65, 0x72, 0x79, 0x4c, 0x75, 0x63, 0x6b, 0x79, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0x91, 0x16, + 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x44, 0x69, 0x61, + 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x4c, 0x75, 0x63, 0x6b, 0x79, + 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0x92, 0x16, 0x12, 0x12, 0x0a, 0x0d, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x93, 0x16, 0x12, 0x16, 0x0a, 0x11, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, + 0x67, 0x10, 0x94, 0x16, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x10, 0x95, 0x16, 0x12, 0x20, 0x0a, 0x1b, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x6f, 0x70, 0x55, 0x70, 0x57, 0x69, + 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x96, 0x16, 0x12, 0x20, + 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x6f, 0x70, 0x55, 0x70, + 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x97, 0x16, + 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x10, 0x98, 0x16, 0x12, + 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x10, 0x99, 0x16, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x47, 0x75, 0x69, 0x64, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x9a, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x10, 0x9b, 0x16, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, + 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -12407,7 +12600,7 @@ func file_player_proto_rawDescGZIP() []byte { } var file_player_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_player_proto_msgTypes = make([]protoimpl.MessageInfo, 163) +var file_player_proto_msgTypes = make([]protoimpl.MessageInfo, 167) var file_player_proto_goTypes = []interface{}{ (OpResultCode)(0), // 0: player.OpResultCode (PlayerPacketID)(0), // 1: player.PlayerPacketID @@ -12567,24 +12760,28 @@ var file_player_proto_goTypes = []interface{}{ (*CSUpdateAttribute)(nil), // 155: player.CSUpdateAttribute (*SCUpdateAttribute)(nil), // 156: player.SCUpdateAttribute (*SCGuideConfig)(nil), // 157: player.SCGuideConfig - nil, // 158: player.PlayerData.RankScoreEntry - nil, // 159: player.SCPlayerDataUpdate.RankScoreEntry - nil, // 160: player.SCGameExDropItems.ItemsEntry - nil, // 161: player.SCVIPDraw.AwardEntry - nil, // 162: player.VIPcfg.Privilege1Entry - nil, // 163: player.VIPcfg.Privilege9Entry - nil, // 164: player.SCBindTelInfo.BindTelRewardEntry - (*server.DB_GameItem)(nil), // 165: server.DB_GameItem + (*Config)(nil), // 158: player.Config + (*SCDataConfig)(nil), // 159: player.SCDataConfig + nil, // 160: player.PlayerData.RankScoreEntry + nil, // 161: player.SCPlayerDataUpdate.RankScoreEntry + nil, // 162: player.SCGameExDropItems.ItemsEntry + nil, // 163: player.SCVIPDraw.AwardEntry + nil, // 164: player.VIPcfg.Privilege1Entry + nil, // 165: player.VIPcfg.Privilege9Entry + nil, // 166: player.SCBindTelInfo.BindTelRewardEntry + nil, // 167: player.Config.MapEntry + nil, // 168: player.Config.MapStrEntry + (*server.DB_GameItem)(nil), // 169: server.DB_GameItem } var file_player_proto_depIdxs = []int32{ 4, // 0: player.SCBillList.Items:type_name -> player.BillItem 0, // 1: player.SCSavePlayerInfo.OpRetCode:type_name -> player.OpResultCode - 158, // 2: player.PlayerData.RankScore:type_name -> player.PlayerData.RankScoreEntry + 160, // 2: player.PlayerData.RankScore:type_name -> player.PlayerData.RankScoreEntry 9, // 3: player.PlayerData.WeekCard:type_name -> player.WeekInfo 0, // 4: player.SCPlayerData.OpRetCode:type_name -> player.OpResultCode 8, // 5: player.SCPlayerData.Data:type_name -> player.PlayerData 10, // 6: player.SCPlayerData.MiniGameArr:type_name -> player.MiniGameInfo - 159, // 7: player.SCPlayerDataUpdate.RankScore:type_name -> player.SCPlayerDataUpdate.RankScoreEntry + 161, // 7: player.SCPlayerDataUpdate.RankScore:type_name -> player.SCPlayerDataUpdate.RankScoreEntry 8, // 8: player.SCThirdPlayerData.Data:type_name -> player.PlayerData 0, // 9: player.SCChangeNick.OpRetCode:type_name -> player.OpResultCode 0, // 10: player.SCChangePassword.OpRetCode:type_name -> player.OpResultCode @@ -12621,19 +12818,19 @@ var file_player_proto_depIdxs = []int32{ 93, // 41: player.JybInfoAward.ItemId:type_name -> player.ItemInfo 0, // 42: player.SCPlayerSetting.OpRetCode:type_name -> player.OpResultCode 94, // 43: player.SCPlayerSetting.GainItem:type_name -> player.JybInfoAward - 160, // 44: player.SCGameExDropItems.Items:type_name -> player.SCGameExDropItems.ItemsEntry + 162, // 44: player.SCGameExDropItems.Items:type_name -> player.SCGameExDropItems.ItemsEntry 0, // 45: player.SCVIPBuy.OpRetCode:type_name -> player.OpResultCode 0, // 46: player.SCVIPDraw.OpRetCode:type_name -> player.OpResultCode - 161, // 47: player.SCVIPDraw.Award:type_name -> player.SCVIPDraw.AwardEntry + 163, // 47: player.SCVIPDraw.Award:type_name -> player.SCVIPDraw.AwardEntry 93, // 48: player.VIPcfg.Item:type_name -> player.ItemInfo - 162, // 49: player.VIPcfg.Privilege1:type_name -> player.VIPcfg.Privilege1Entry + 164, // 49: player.VIPcfg.Privilege1:type_name -> player.VIPcfg.Privilege1Entry 93, // 50: player.VIPcfg.Privilege7:type_name -> player.ItemInfo - 163, // 51: player.VIPcfg.Privilege9:type_name -> player.VIPcfg.Privilege9Entry + 165, // 51: player.VIPcfg.Privilege9:type_name -> player.VIPcfg.Privilege9Entry 0, // 52: player.SCVIPInfo.OpRetCode:type_name -> player.OpResultCode 103, // 53: player.SCVIPInfo.List:type_name -> player.VIPcfg 108, // 54: player.SCPayGoodsInfo.Item:type_name -> player.PayItem 0, // 55: player.SCClientLog.OpRetCode:type_name -> player.OpResultCode - 164, // 56: player.SCBindTelInfo.BindTelReward:type_name -> player.SCBindTelInfo.BindTelRewardEntry + 166, // 56: player.SCBindTelInfo.BindTelReward:type_name -> player.SCBindTelInfo.BindTelRewardEntry 0, // 57: player.SCPlayerSMSCode.Code:type_name -> player.OpResultCode 0, // 58: player.SCBindTel.Code:type_name -> player.OpResultCode 0, // 59: player.SCHttpPass.OpRetCode:type_name -> player.OpResultCode @@ -12646,17 +12843,20 @@ var file_player_proto_depIdxs = []int32{ 128, // 66: player.SCDiamondLotteryInfo.Item:type_name -> player.LotteryItem 128, // 67: player.SCDiamondLottery.Item:type_name -> player.LotteryItem 128, // 68: player.SCDiamondLotteryLuckyAward.Item:type_name -> player.LotteryItem - 165, // 69: player.SCItem.Items:type_name -> server.DB_GameItem + 169, // 69: player.SCItem.Items:type_name -> server.DB_GameItem 149, // 70: player.SCAwardLog.AwardLog:type_name -> player.AwardLogData 151, // 71: player.SCAwardLog.AnnouncerLog:type_name -> player.AnnouncerLogInfo 150, // 72: player.AwardLogData.AwardLog:type_name -> player.AwardLogInfo 154, // 73: player.SCPopUpWindowsConfig.Info:type_name -> player.WindowsInfo 0, // 74: player.SCUpdateAttribute.OpRetCode:type_name -> player.OpResultCode - 75, // [75:75] is the sub-list for method output_type - 75, // [75:75] is the sub-list for method input_type - 75, // [75:75] is the sub-list for extension type_name - 75, // [75:75] is the sub-list for extension extendee - 0, // [0:75] is the sub-list for field type_name + 167, // 75: player.Config.Map:type_name -> player.Config.MapEntry + 168, // 76: player.Config.MapStr:type_name -> player.Config.MapStrEntry + 158, // 77: player.SCDataConfig.Cfg:type_name -> player.Config + 78, // [78:78] is the sub-list for method output_type + 78, // [78:78] is the sub-list for method input_type + 78, // [78:78] is the sub-list for extension type_name + 78, // [78:78] is the sub-list for extension extendee + 0, // [0:78] is the sub-list for field type_name } func init() { file_player_proto_init() } @@ -14537,6 +14737,30 @@ func file_player_proto_init() { return nil } } + file_player_proto_msgTypes[156].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_player_proto_msgTypes[157].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCDataConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -14544,7 +14768,7 @@ func file_player_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_player_proto_rawDesc, NumEnums: 2, - NumMessages: 163, + NumMessages: 167, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/player/player.proto b/protocol/player/player.proto index 986daad..4b45515 100644 --- a/protocol/player/player.proto +++ b/protocol/player/player.proto @@ -204,7 +204,6 @@ enum PlayerPacketID { PACKET_SCBillList = 2813; // 账变记录 PACKET_CSSavePlayerInfo = 2814; // 保存个人资料 PACKET_SCSavePlayerInfo = 2815; // 保存个人资料 - PACKET_CS_PhoneLotteryInfo = 2816;//请求抽奖信息 PACKET_SC_PhoneLotteryInfo = 2817;//返回抽奖信息 PACKET_CS_PhoneLottery = 2818;//请求抽奖 @@ -232,6 +231,7 @@ enum PlayerPacketID { PACKET_CSUpdateAttribute = 2840;//请求更新属性 PACKET_SCUpdateAttribute = 2841;//返回更新属性 PACKET_SCGuideConfig = 2842;//返回引导配置 + PACKET_SCDataConfig = 2843;//通知配置更新 } // 账变记录 @@ -1346,4 +1346,25 @@ message SCUpdateAttribute{ message SCGuideConfig{ int32 On = 2; // 引导开关 1开启 2关闭 int32 Skip = 3; // 引导跳过开关 1开启 2关闭 +} + +message Config{ + // Tp 类型: + // 1:小精灵快捷入口 On开关 Value地址 + // 2: ... + // ... + int32 Tp = 1; + bool On = 2; + string Value = 3; + int64 Num = 4; + repeated string Values = 5; + repeated int64 Nums = 6; + repeated bool Ons = 7; + map Map = 8; + map MapStr = 9; +} + +//PACKET_SCDataConfig +message SCDataConfig{ + repeated Config Cfg = 1; } \ No newline at end of file diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index d95387b..cecb617 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -8209,6 +8209,70 @@ func (x *MatchAudience) GetTs() int64 { return 0 } +// etcd /game/spirit +type SpiritConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台 + On int32 `protobuf:"varint,2,opt,name=On,proto3" json:"On,omitempty"` // 精灵开关 1开启 2关闭 + Url string `protobuf:"bytes,3,opt,name=Url,proto3" json:"Url,omitempty"` +} + +func (x *SpiritConfig) Reset() { + *x = SpiritConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SpiritConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SpiritConfig) ProtoMessage() {} + +func (x *SpiritConfig) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[87] + 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 SpiritConfig.ProtoReflect.Descriptor instead. +func (*SpiritConfig) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{87} +} + +func (x *SpiritConfig) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *SpiritConfig) GetOn() int32 { + if x != nil { + return x.On + } + return 0 +} + +func (x *SpiritConfig) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + var File_common_proto protoreflect.FileDescriptor var file_common_proto_rawDesc = []byte{ @@ -9500,10 +9564,15 @@ var file_common_proto_rawDesc = []byte{ 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x42, 0x26, 0x5a, 0x24, - 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x4c, 0x0a, 0x0c, + 0x53, 0x70, 0x69, 0x72, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, + 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, + 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9518,7 +9587,7 @@ func file_common_proto_rawDescGZIP() []byte { return file_common_proto_rawDescData } -var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 97) +var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 98) var file_common_proto_goTypes = []interface{}{ (*MysqlDbSetting)(nil), // 0: webapi.MysqlDbSetting (*MongoDbSetting)(nil), // 1: webapi.MongoDbSetting @@ -9607,32 +9676,33 @@ var file_common_proto_goTypes = []interface{}{ (*AnnouncerLogInfo)(nil), // 84: webapi.AnnouncerLogInfo (*GuideConfig)(nil), // 85: webapi.GuideConfig (*MatchAudience)(nil), // 86: webapi.MatchAudience - nil, // 87: webapi.Platform.BindTelRewardEntry - nil, // 88: webapi.PlayerData.RankScoreEntry - nil, // 89: webapi.ItemShop.AwardEntry - nil, // 90: webapi.VIPcfg.AwardEntry - nil, // 91: webapi.VIPcfg.Privilege1Entry - nil, // 92: webapi.VIPcfg.Privilege7Entry - nil, // 93: webapi.VIPcfg.Privilege9Entry - nil, // 94: webapi.ActInviteConfig.PayScoreEntry - nil, // 95: webapi.SkinLevel.UpItemEntry - nil, // 96: webapi.SkinItem.UnlockParamEntry - (*server.DB_GameFree)(nil), // 97: server.DB_GameFree - (*server.DB_GameItem)(nil), // 98: server.DB_GameItem + (*SpiritConfig)(nil), // 87: webapi.SpiritConfig + nil, // 88: webapi.Platform.BindTelRewardEntry + nil, // 89: webapi.PlayerData.RankScoreEntry + nil, // 90: webapi.ItemShop.AwardEntry + nil, // 91: webapi.VIPcfg.AwardEntry + nil, // 92: webapi.VIPcfg.Privilege1Entry + nil, // 93: webapi.VIPcfg.Privilege7Entry + nil, // 94: webapi.VIPcfg.Privilege9Entry + nil, // 95: webapi.ActInviteConfig.PayScoreEntry + nil, // 96: webapi.SkinLevel.UpItemEntry + nil, // 97: webapi.SkinItem.UnlockParamEntry + (*server.DB_GameFree)(nil), // 98: server.DB_GameFree + (*server.DB_GameItem)(nil), // 99: server.DB_GameItem } var file_common_proto_depIdxs = []int32{ 2, // 0: webapi.Platform.Leaderboard:type_name -> webapi.RankSwitch 3, // 1: webapi.Platform.ClubConfig:type_name -> webapi.ClubConfig 4, // 2: webapi.Platform.ThirdGameMerchant:type_name -> webapi.ThirdGame - 87, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry + 88, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry 6, // 4: webapi.GameConfigGlobal.GameStatus:type_name -> webapi.GameStatus - 97, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree + 98, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree 8, // 6: webapi.PlatformGameConfig.DbGameFrees:type_name -> webapi.GameFree 0, // 7: webapi.PlatformDbConfig.Mysql:type_name -> webapi.MysqlDbSetting 1, // 8: webapi.PlatformDbConfig.MongoDb:type_name -> webapi.MongoDbSetting 1, // 9: webapi.PlatformDbConfig.MongoDbLog:type_name -> webapi.MongoDbSetting - 97, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree - 88, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry + 98, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree + 89, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry 32, // 12: webapi.PlayerData.Items:type_name -> webapi.ItemInfo 14, // 13: webapi.PlayerData.RoleUnlockList:type_name -> webapi.ModInfo 14, // 14: webapi.PlayerData.PetUnlockList:type_name -> webapi.ModInfo @@ -9645,7 +9715,7 @@ var file_common_proto_depIdxs = []int32{ 32, // 21: webapi.ExchangeShop.Items:type_name -> webapi.ItemInfo 25, // 22: webapi.ExchangeShopList.List:type_name -> webapi.ExchangeShop 29, // 23: webapi.ExchangeShopList.Weight:type_name -> webapi.ShopWeight - 89, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry + 90, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry 30, // 25: webapi.ItemShopList.List:type_name -> webapi.ItemShop 32, // 26: webapi.MatchInfoAward.ItemId:type_name -> webapi.ItemInfo 33, // 27: webapi.GameMatchDate.Award:type_name -> webapi.MatchInfoAward @@ -9666,14 +9736,14 @@ var file_common_proto_depIdxs = []int32{ 38, // 42: webapi.WelfareSpree.Item:type_name -> webapi.WelfareDate 48, // 43: webapi.WelfareFirstPayDataList.List:type_name -> webapi.WelfareSpree 48, // 44: webapi.WelfareContinuousPayDataList.List:type_name -> webapi.WelfareSpree - 90, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry - 91, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry - 92, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry - 93, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry + 91, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry + 92, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry + 93, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry + 94, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry 51, // 49: webapi.VIPcfgDataList.List:type_name -> webapi.VIPcfg 38, // 50: webapi.ChessRankConfig.Item:type_name -> webapi.WelfareDate 55, // 51: webapi.ChessRankcfgData.Datas:type_name -> webapi.ChessRankConfig - 94, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry + 95, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry 62, // 53: webapi.ActInviteConfig.Awards1:type_name -> webapi.RankAward 62, // 54: webapi.ActInviteConfig.Awards2:type_name -> webapi.RankAward 62, // 55: webapi.ActInviteConfig.Awards3:type_name -> webapi.RankAward @@ -9690,12 +9760,12 @@ var file_common_proto_depIdxs = []int32{ 69, // 66: webapi.DiamondLotteryData.Info:type_name -> webapi.DiamondLotteryInfo 70, // 67: webapi.DiamondLotteryData.Players:type_name -> webapi.DiamondLotteryPlayers 72, // 68: webapi.DiamondLotteryConfig.LotteryData:type_name -> webapi.DiamondLotteryData - 98, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem + 99, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem 32, // 70: webapi.RankAwardInfo.Item:type_name -> webapi.ItemInfo 75, // 71: webapi.RankTypeInfo.Award:type_name -> webapi.RankAwardInfo 76, // 72: webapi.RankTypeConfig.Info:type_name -> webapi.RankTypeInfo - 95, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry - 96, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry + 96, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry + 97, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry 78, // 75: webapi.SkinItem.Levels:type_name -> webapi.SkinLevel 79, // 76: webapi.SkinConfig.Items:type_name -> webapi.SkinItem 82, // 77: webapi.AwardLogConfig.AwardLog:type_name -> webapi.AwardLogData @@ -10758,6 +10828,18 @@ func file_common_proto_init() { return nil } } + file_common_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SpiritConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -10765,7 +10847,7 @@ func file_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_common_proto_rawDesc, NumEnums: 0, - NumMessages: 97, + NumMessages: 98, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto index cc75710..77e0520 100644 --- a/protocol/webapi/common.proto +++ b/protocol/webapi/common.proto @@ -897,4 +897,11 @@ message MatchAudience { string Platform = 1; // 平台 int32 SnId = 2; // 玩家ID int64 Ts = 3; // 时间戳 +} + +// etcd /game/spirit +message SpiritConfig { + string Platform = 1; // 平台 + int32 On = 2; // 精灵开关 1开启 2关闭 + string Url = 3; } \ No newline at end of file diff --git a/public b/public index 70e09ba..07c189d 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 70e09ba50291dd290c3ff6aadb89d127ef4a0f9a +Subproject commit 07c189d652b84910258fa33eb3214d39c53edec4 diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index b5649db..a3bf947 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -91,6 +91,8 @@ func init() { etcd.Register(etcd.ETCDKEY_GUIDE, webapi.GuideConfig{}, platformConfigEvent) // 比赛观众 etcd.Register(etcd.ETCDKEY_MatchAudience, webapi.MatchAudience{}, handlerEvent) + // 小精灵配置 + etcd.Register(etcd.ETCDKEY_Spirit, webapi.SpiritConfig{}, platformConfigEvent) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { @@ -118,11 +120,7 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e PlatformMgrSingleton.GetConfig(config.Platform).CommonNotices = config if !isInit { // 通知公共变更 - for _, v := range PlayerMgrSington.playerOfPlatform[config.Platform] { - if v != nil && v.IsOnLine() { - v.SendToClient(int(hallproto.GameHallPacketID_PACKET_SC_NoticeChange), &hallproto.SCNoticeChange{}) - } - } + PlayerMgrSington.BroadcastMessageToPlatform(config.Platform, int(hallproto.GameHallPacketID_PACKET_SC_NoticeChange), &hallproto.SCNoticeChange{}) } case *webapi.GameConfigGlobal: if isInit { @@ -191,16 +189,12 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e PlatformMgrSingleton.GetConfig(config.Platform).ChannelSwitch[config.GetTp()] = config if !isInit { // 通知变更 - for _, v := range PlayerMgrSington.playerOfPlatform[config.Platform] { - if v != nil && v.IsOnLine() { - v.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCExchangeChannel), &playerproto.SCExchangeChannel{ - Datas: []*playerproto.ChannelSwitch{{ - Tp: config.Tp, - OnChannelName: config.OnChannelName, - }}, - }) - } - } + PlayerMgrSington.BroadcastMessageToPlatform(config.Platform, int(playerproto.PlayerPacketID_PACKET_SCExchangeChannel), &playerproto.SCExchangeChannel{ + Datas: []*playerproto.ChannelSwitch{{ + Tp: config.Tp, + OnChannelName: config.OnChannelName, + }}, + }) } case *webapi.GameConfigGroup: PlatformGameGroupMgrSington.UpsertGameGroup(config) @@ -312,13 +306,9 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e }) } if len(items) > 0 { - for _, v := range PlayerMgrSington.playerOfPlatform[config.Platform] { - if v != nil && v.IsOnLine() { - v.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCItem), &playerproto.SCItem{ - Items: items, - }) - } - } + PlayerMgrSington.BroadcastMessageToPlatform(config.Platform, int(playerproto.PlayerPacketID_PACKET_SCItem), &playerproto.SCItem{ + Items: items, + }) } } @@ -330,6 +320,19 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e PlatformMgrSingleton.GetConfig(config.Platform).AwardLogConfig = config case *webapi.GuideConfig: PlatformMgrSingleton.GetConfig(config.Platform).GuideConfig = config + case *webapi.SpiritConfig: + PlatformMgrSingleton.GetConfig(config.Platform).SpiritConfig = config + if !isInit { + PlayerMgrSington.BroadcastMessageToPlatform(config.Platform, int(playerproto.PlayerPacketID_PACKET_SCDataConfig), &playerproto.SCDataConfig{ + Cfg: []*playerproto.Config{ + { + Tp: 1, + On: config.GetOn() == 1, + Value: config.GetUrl(), + }, + }, + }) + } default: logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey) } diff --git a/worldsrv/player.go b/worldsrv/player.go index 883a4d0..6bb82b6 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -3089,10 +3089,13 @@ func (this *Player) SendPlayerInfo() { if this.scene != nil && this.thrscene == 0 { this.SendGameConfig(int32(this.scene.gameId), this.Platform, this.Channel) } - this.SCItems() //this.SendJackpotInfo() + // 后台道具配置 + this.SCItems() // 引导配置 this.SCGuide() + // 小精灵配置 + this.SCSpirit() } //func (this *Player) SendJackpotInfo() { @@ -4942,3 +4945,18 @@ func (this *Player) SCGuide() { this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCGuideConfig), pack) logger.Logger.Tracef("SCGuideConfig: %v", pack) } + +func (this *Player) SCSpirit() { + cfg := PlatformMgrSingleton.GetConfig(this.Platform).SpiritConfig + pack := &playerproto.SCDataConfig{ + Cfg: []*playerproto.Config{ + { + Tp: 1, + On: cfg.On == 1, + Value: cfg.Url, + }, + }, + } + this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCDataConfig), pack) + logger.Logger.Tracef("SCDataConfig: %v", pack) +} From 159e69094f7c93deccecd82798bf78b90ddb2a43 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 16 Aug 2024 15:08:44 +0800 Subject: [PATCH 10/63] =?UTF-8?q?=E5=B0=8F=E7=B2=BE=E7=81=B5=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/player.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/worldsrv/player.go b/worldsrv/player.go index 6bb82b6..ac39349 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -4948,6 +4948,9 @@ func (this *Player) SCGuide() { func (this *Player) SCSpirit() { cfg := PlatformMgrSingleton.GetConfig(this.Platform).SpiritConfig + if cfg == nil { + return + } pack := &playerproto.SCDataConfig{ Cfg: []*playerproto.Config{ { From 07150c660d67ff488107e8b470260509ab2a7968 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 19 Aug 2024 09:56:08 +0800 Subject: [PATCH 11/63] review --- data/gameparam.json | 1 + worldsrv/action_game.go | 32 +- worldsrv/action_hundredscene.go | 36 +- worldsrv/action_server.go | 170 +++---- worldsrv/coinscenemgr.go | 432 ++++++------------ worldsrv/coinscenepool.go | 367 +++++++-------- worldsrv/coinscenepool_base.go | 8 +- worldsrv/coinscenepool_local.go | 4 +- worldsrv/gamesessmgr.go | 2 +- worldsrv/hundredscenemgr.go | 779 ++++++++++---------------------- worldsrv/player.go | 2 - worldsrv/scene.go | 14 +- worldsrv/scenemgr.go | 10 +- worldsrv/tournament.go | 2 +- 14 files changed, 688 insertions(+), 1171 deletions(-) diff --git a/data/gameparam.json b/data/gameparam.json index 73b931f..27898ce 100644 --- a/data/gameparam.json +++ b/data/gameparam.json @@ -23,6 +23,7 @@ "ClosePreCreateRoom": true, "AgoraAddress": "http://47.105.78.29:8081", "InviteUrl": "http://47.105.78.29:8000/", + "GuideTs": 1723790567, "RankTimeout": 2, "PermitInitScore": 0 } \ No newline at end of file diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index c50c9a0..282ea93 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -574,9 +574,11 @@ func (this *CSEnterGameHandler) ProcessLocal(s *netlib.Session, packetid int, da if len(params) != 0 { roomId = params[0] - platformName := CoinSceneMgrSingleton.GetPlatformBySceneId(int(roomId)) + platformName := SceneMgrSingleton.GetPlatformBySceneId(int(roomId)) if p.IsRob { - p.Platform = platformName + if platformName != "" { + p.Platform = platformName + } } else if p.GMLevel > 0 && p.Platform == platformName { //允许GM直接按房间ID进场 roomId = params[0] } @@ -672,13 +674,12 @@ func (this *CSEnterGameHandler) ProcessNormal(s *netlib.Session, packetid int, d case common.IsHundredType(gameType): if len(params) != 0 { roomId = params[0] - name, ok := HundredSceneMgrSington.GetPlatformNameBySceneId(roomId) + platform := SceneMgrSingleton.GetPlatformBySceneId(int(roomId)) if p.IsRob { - //机器人先伪装成对应平台的用户 - if ok { - p.Platform = name + if platform != "" { + p.Platform = platform } - } else if p.GMLevel > 0 && p.Platform == name { //允许GM直接按房间ID进场 + } else if p.GMLevel > 0 && p.Platform == platform { //允许GM直接按房间ID进场 roomId = params[0] } } @@ -691,7 +692,7 @@ func (this *CSEnterGameHandler) ProcessNormal(s *netlib.Session, packetid int, d } } } - ret = gamehall.OpResultCode_Game(HundredSceneMgrSington.PlayerEnter(p, msg.GetId())) + ret = gamehall.OpResultCode_Game(HundredSceneMgrSingleton.PlayerEnter(p, msg.GetId())) if p.scene != nil { pack.OpParams = append(pack.OpParams, msg.GetId()) if ret != gamehall.OpResultCode_Game_OPRC_Sucess_Game { @@ -703,9 +704,11 @@ func (this *CSEnterGameHandler) ProcessNormal(s *netlib.Session, packetid int, d case common.IsCoinSceneType(gameType): if len(params) != 0 { roomId = params[0] - platformName := CoinSceneMgrSingleton.GetPlatformBySceneId(int(roomId)) + platformName := SceneMgrSingleton.GetPlatformBySceneId(int(roomId)) if p.IsRob { - p.Platform = platformName + if platformName != "" { + p.Platform = platformName + } } else if p.GMLevel > 0 && p.Platform == platformName { //允许GM直接按房间ID进场 roomId = params[0] } @@ -763,7 +766,10 @@ func (this *CSQuitGameHandler) Process(s *netlib.Session, packetid int, data int dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(msg.GetId()) gameType := dbGameFree.GetGameType() if common.IsHundredType(gameType) { - ret = gamehall.OpResultCode_Game(HundredSceneMgrSington.PlayerTryLeave(p)) + ret = gamehall.OpResultCode_Game(HundredSceneMgrSingleton.PlayerTryLeave(p)) + if gamehall.OpResultCode_Game_OPRC_OpYield_Game == ret { + return nil + } } else if common.IsCoinSceneType(gameType) { ret = gamehall.OpResultCode_Game(CoinSceneMgrSingleton.PlayerTryLeave(p, msg.IsAudience)) if gamehall.OpResultCode_Game_OPRC_OpYield_Game == ret { @@ -945,7 +951,7 @@ func (this *CSCreateRoomHandler) ProcessLocalGame(s *netlib.Session, packetid in goto failed } scene, code = p.CreateLocalGameScene(roomId, int(gameId), int(gameSite), int(msg.GetSceneMode()), maxPlayerNum, - params, dbGameFree, baseScore, csp.groupId) + params, dbGameFree, baseScore, 0) if scene != nil && code == gamehall.OpResultCode_Game_OPRC_Sucess_Game { logger.Logger.Tracef("CSCreateRoomHandler SnId:%v Create Sucess GameId:%v", p.SnId, gameId) csp.AddScene(scene) @@ -1049,7 +1055,7 @@ func (this *CSCreateRoomHandler) ProcessThirteen(s *netlib.Session, packetid int goto failed } scene, code = p.CreateLocalGameScene(roomId, int(gameId), int(dbGameFree.GetSceneType()), int(msg.GetSceneMode()), - maxPlayerNum, params, dbGameFree, baseScore, csp.groupId) + maxPlayerNum, params, dbGameFree, baseScore, 0) if scene != nil { if code == gamehall.OpResultCode_Game_OPRC_Sucess_Game { logger.Logger.Tracef("CSCreateRoomHandler SnId:%v Create Sucess GameId:%v", p.SnId, gameId) diff --git a/worldsrv/action_hundredscene.go b/worldsrv/action_hundredscene.go index 5bdca82..aa7e96d 100644 --- a/worldsrv/action_hundredscene.go +++ b/worldsrv/action_hundredscene.go @@ -2,13 +2,15 @@ package main import ( "fmt" + "time" + + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + "mongo.games.com/game/common" "mongo.games.com/game/proto" "mongo.games.com/game/protocol/gamehall" "mongo.games.com/game/srvdata" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/netlib" - "time" ) type CSHundredSceneGetPlayerNumPacketFactory struct { @@ -26,7 +28,7 @@ func (this *CSHundredSceneGetPlayerNumHandler) Process(s *netlib.Session, packet if msg, ok := data.(*gamehall.CSHundredSceneGetPlayerNum); ok { p := PlayerMgrSington.GetPlayer(sid) if p != nil { - nums := HundredSceneMgrSington.GetPlayerNums(p, msg.GetGameId(), msg.GetGameModel()) + nums := HundredSceneMgrSingleton.GetPlayerNums(p, msg.GetGameId(), msg.GetGameModel()) pack := &gamehall.SCHundredSceneGetPlayerNum{ Nums: nums, } @@ -61,7 +63,7 @@ func (this *CSHundredSceneOpHandler) Process(s *netlib.Session, packetid int, da } oldPlatform := p.Platform switch msg.GetOpType() { - case HundredSceneOp_Enter: + case HundredSceneOPEnter: //pt := PlatformMgrSingleton.GetPackageTag(p.PackageID) //if pt != nil && pt.IsForceBind == 1 { // if p.BeUnderAgentCode == "" || p.BeUnderAgentCode == "0" { @@ -80,13 +82,13 @@ func (this *CSHundredSceneOpHandler) Process(s *netlib.Session, packetid int, da params := msg.GetOpParams() if len(params) != 0 { roomId = params[0] - name, ok := HundredSceneMgrSington.GetPlatformNameBySceneId(roomId) + platform := SceneMgrSingleton.GetPlatformBySceneId(int(roomId)) if p.IsRob { //机器人先伪装成对应平台的用户 - if ok { - p.Platform = name + if platform != "" { + p.Platform = platform } - } else if p.GMLevel > 0 && p.Platform == name { //允许GM直接按房间ID进场 + } else if p.GMLevel > 0 && p.Platform == platform { //允许GM直接按房间ID进场 roomId = params[0] } } @@ -153,7 +155,7 @@ func (this *CSHundredSceneOpHandler) Process(s *netlib.Session, packetid int, da } } - ret = HundredSceneMgrSington.PlayerEnter(p, msg.GetId()) + ret = HundredSceneMgrSingleton.PlayerEnter(p, msg.GetId()) if p.scene != nil { pack.OpParams = append(pack.OpParams, msg.GetId()) //TODO 有房间还进入失败,尝试returnroom @@ -162,9 +164,9 @@ func (this *CSHundredSceneOpHandler) Process(s *netlib.Session, packetid int, da return nil } } - case HundredSceneOp_Leave: - ret = HundredSceneMgrSington.PlayerTryLeave(p) - case HundredSceneOp_Change: + case HundredSceneOPLeave: + ret = HundredSceneMgrSingleton.PlayerTryLeave(p) + case HundredSceneOPChange: /*var exclude int32 if p.scene != nil { exclude = int32(p.scene.sceneId) @@ -173,10 +175,10 @@ func (this *CSHundredSceneOpHandler) Process(s *netlib.Session, packetid int, da if len(params) != 0 { exclude = params[0] } - if HundredSceneMgrSington.PlayerInChanging(p) { //换桌中 + if HundredSceneMgrSingleton.PlayerInChanging(p) { //换桌中 return nil } - ret = HundredSceneMgrSington.PlayerTryChange(p, msg.GetId(), exclude)*/ + ret = HundredSceneMgrSingleton.PlayerTryChange(p, msg.GetId(), exclude)*/ } done: //机器人要避免身上的平台标记被污染 @@ -218,7 +220,7 @@ func (this *CSGameObserveHandler) Process(s *netlib.Session, packetid int, data gameStateMgr.PlayerRegiste(p, msg.GetGameId(), msg.GetStartOrEnd()) pack := &gamehall.SCGameSubList{} statePack := &gamehall.SCGameState{} - scenes := HundredSceneMgrSington.GetPlatformScene(p.Platform, msg.GetGameId()) + scenes := HundredSceneMgrSingleton.GetPlatformScene(p.Platform, msg.GetGameId()) for _, value := range scenes { pack.List = append(pack.List, &gamehall.GameSubRecord{ GameFreeId: proto.Int32(value.dbGameFree.GetId()), @@ -269,7 +271,7 @@ func (this *CSGameObserveHandler) Process(s *netlib.Session, packetid int, data // // gameid == common.GameId_Avengers || gameid == common.GameId_EasterIsland { // // gameStateMgr.PlayerRegiste(p, msg.GetGameId(), true) // // pack := &gamehall.SCHundredSceneGetGameJackpot{} -// // scenes := HundredSceneMgrSington.GetPlatformScene(p.Platform, msg.GetGameId()) +// // scenes := HundredSceneMgrSingleton.GetPlatformScene(p.Platform, msg.GetGameId()) // // for _, v := range scenes { // // jpfi := &gamehall.GameJackpotFundInfo{ // // GameFreeId: proto.Int32(v.dbGameFree.GetId()), diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 080ce3c..6dc0a87 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -13,32 +13,32 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/proto" - gamehall_proto "mongo.games.com/game/protocol/gamehall" - login_proto "mongo.games.com/game/protocol/login" - player_proto "mongo.games.com/game/protocol/player" - server_proto "mongo.games.com/game/protocol/server" + gamehallproto "mongo.games.com/game/protocol/gamehall" + loginproto "mongo.games.com/game/protocol/login" + playerproto "mongo.games.com/game/protocol/player" + serverproto "mongo.games.com/game/protocol/server" "mongo.games.com/game/srvdata" ) func init() { // 销毁房间 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_DESTROYSCENE), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWDestroyScene{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_DESTROYSCENE), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWDestroyScene{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_DESTROYSCENE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_DESTROYSCENE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive GWDestroyScene:", pack) - if msg, ok := pack.(*server_proto.GWDestroyScene); ok { + if msg, ok := pack.(*serverproto.GWDestroyScene); ok { SceneMgrSingleton.DestroyScene(int(msg.GetSceneId()), msg.GetIsCompleted()) } return nil })) // 离开房间 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_PLAYERLEAVE), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWPlayerLeave{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_PLAYERLEAVE), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWPlayerLeave{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_PLAYERLEAVE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { - if msg, ok := pack.(*server_proto.GWPlayerLeave); ok { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_PLAYERLEAVE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + if msg, ok := pack.(*serverproto.GWPlayerLeave); ok { logger.Logger.Trace("receive GWPlayerLeave:", msg.GetPlayerId()) scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId())) if scene != nil { @@ -68,7 +68,7 @@ func init() { } } case scene.IsHundredScene(): - if !HundredSceneMgrSington.PlayerLeave(p, int(msg.GetReason())) { + if !HundredSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { logger.Logger.Warnf("GWPlayerLeave snid:%v sceneid:%v gameid:%v modeid:%v [hundredcene]", p.SnId, scene.sceneId, scene.gameId, scene.gameMode) } @@ -228,12 +228,12 @@ func init() { })) // 观众离开房间 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_AUDIENCELEAVE), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWPlayerLeave{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_AUDIENCELEAVE), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWPlayerLeave{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_AUDIENCELEAVE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_AUDIENCELEAVE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive PACKET_GW_AUDIENCELEAVE GWPlayerLeave:", pack) - if msg, ok := pack.(*server_proto.GWPlayerLeave); ok { + if msg, ok := pack.(*serverproto.GWPlayerLeave); ok { scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId())) if scene != nil { p := PlayerMgrSington.GetPlayerBySnId(msg.GetPlayerId()) @@ -270,12 +270,12 @@ func init() { })) // 房间游戏开始 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_SCENESTART), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWSceneStart{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_SCENESTART), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWSceneStart{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_SCENESTART), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_SCENESTART), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive SSPacketID_PACKET_GW_SCENESTART GWSceneStart:", pack) - if msg, ok := pack.(*server_proto.GWSceneStart); ok { + if msg, ok := pack.(*serverproto.GWSceneStart); ok { scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId())) if scene != nil { scene.starting = msg.GetStart() @@ -299,12 +299,12 @@ func init() { // 房间游戏状态 // 捕鱼 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_SCENESTATE), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWSceneState{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_SCENESTATE), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWSceneState{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_SCENESTATE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_SCENESTATE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive SSPacketID_PACKET_GW_SCENESTATE GWSceneState:", pack) - if msg, ok := pack.(*server_proto.GWSceneState); ok { + if msg, ok := pack.(*serverproto.GWSceneState); ok { scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId())) if scene != nil { scene.state = msg.GetCurrState() @@ -315,12 +315,12 @@ func init() { })) // 用户状态同步 flag - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_PLAYERSTATE), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWPlayerFlag{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_PLAYERSTATE), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWPlayerFlag{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_PLAYERSTATE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_PLAYERSTATE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive GWPlayerFlag:", pack) - if msg, ok := pack.(*server_proto.GWPlayerFlag); ok { + if msg, ok := pack.(*serverproto.GWPlayerFlag); ok { player := PlayerMgrSington.GetPlayerBySnId(msg.GetSnId()) if player != nil { player.flag = msg.GetFlag() @@ -330,12 +330,12 @@ func init() { })) // 房间服务器状态切换 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GB_STATE_SWITCH), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.ServerStateSwitch{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GB_STATE_SWITCH), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.ServerStateSwitch{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GB_STATE_SWITCH), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GB_STATE_SWITCH), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive SSPacketID_PACKET_GB_STATE_SWITCH ServerStateSwitch:", pack) - if sr, ok := pack.(*server_proto.ServerStateSwitch); ok { + if sr, ok := pack.(*serverproto.ServerStateSwitch); ok { srvid := int(sr.GetSrvId()) gameSess := GameSessMgrSington.GetGameSess(srvid) if gameSess != nil { @@ -360,13 +360,13 @@ func init() { // 游戏服务器的系统广播 // 捕鱼 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_NEWNOTICE), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWNewNotice{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_NEWNOTICE), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWNewNotice{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_NEWNOTICE), netlib.HandlerWrapper(func(s *netlib.Session, + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_NEWNOTICE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive GWNewNotice:", pack) - if msg, ok := pack.(*server_proto.GWNewNotice); ok { + if msg, ok := pack.(*serverproto.GWNewNotice); ok { //立即发送改为定期发送,控制下广播包的频度 HorseRaceLampMgrSington.PushGameHorseRaceLamp(msg.GetCh(), msg.GetPlatform(), msg.GetContent(), int32(msg.GetMsgtype()), msg.GetIsrob(), msg.GetPriority()) } @@ -374,13 +374,13 @@ func init() { })) // 同步每局游戏那些玩家一起玩的 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_SCENEPLAYERLOG), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWScenePlayerLog{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_SCENEPLAYERLOG), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWScenePlayerLog{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_SCENEPLAYERLOG), netlib.HandlerWrapper(func(s *netlib.Session, + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_SCENEPLAYERLOG), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive GWScenePlayerLog:", pack) - if msg, ok := pack.(*server_proto.GWScenePlayerLog); ok { + if msg, ok := pack.(*serverproto.GWScenePlayerLog); ok { sceneLimitMgr.ReceiveData(msg.GetGameId(), msg.GetSnids()) } return nil @@ -388,11 +388,11 @@ func init() { // 强制离开房间 // 返回房间失败 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_PLAYERFORCELEAVE), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWPlayerForceLeave{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_PLAYERFORCELEAVE), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWPlayerForceLeave{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_PLAYERFORCELEAVE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { - if msg, ok := pack.(*server_proto.GWPlayerForceLeave); ok { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_PLAYERFORCELEAVE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + if msg, ok := pack.(*serverproto.GWPlayerForceLeave); ok { logger.Logger.Warn("receive GWPlayerForceLeave:", msg) scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId())) if scene != nil { @@ -406,7 +406,7 @@ func init() { logger.Logger.Warnf("GWPlayerForceLeave snid:%v sceneid:%v gameid:%v modeid:%v [coinscene]", p.SnId, scene.sceneId, scene.gameId, scene.gameMode) } case scene.IsHundredScene(): - if !HundredSceneMgrSington.PlayerLeave(p, int(msg.GetReason())) { + if !HundredSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { logger.Logger.Warnf("GWPlayerForceLeave snid:%v sceneid:%v gameid:%v modeid:%v [hundredcene]", p.SnId, scene.sceneId, scene.gameId, scene.gameMode) } case scene.IsMatchScene(): @@ -438,12 +438,12 @@ func init() { //1.同步玩家游戏场内的实时金币 //2.触发相关任务:统计有效下注金币数,赢取金币数,牌局次数等 //3.黑名单处理 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_PLAYERDATA), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWPlayerData{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_PLAYERDATA), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWPlayerData{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_PLAYERDATA), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_PLAYERDATA), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive GWPlayerBet:", pack) - if msg, ok := pack.(*server_proto.GWPlayerData); ok { + if msg, ok := pack.(*serverproto.GWPlayerData); ok { scene := SceneMgrSingleton.GetScene(int(msg.GetSceneId())) if scene == nil { return nil @@ -573,13 +573,13 @@ func init() { })) //推送游戏的状态 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_GAMESTATE), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWGameState{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_GAMESTATE), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWGameState{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_GAMESTATE), netlib.HandlerWrapper(func(s *netlib.Session, + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_GAMESTATE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive SSPacketID_PACKET_GW_GAMESTATE GWGameState:", pack) - if msg, ok := pack.(*server_proto.GWGameState); ok { + if msg, ok := pack.(*serverproto.GWGameState); ok { scene := SceneMgrSingleton.GetScene(int(msg.GetSceneId())) if scene != nil { scene.State = msg.GetState() @@ -591,38 +591,38 @@ func init() { if leftTime < 0 { leftTime = 0 } - pack := &gamehall_proto.SCGameState{} - pack.List = append(pack.List, &gamehall_proto.GameState{ + pack := &gamehallproto.SCGameState{} + pack.List = append(pack.List, &gamehallproto.GameState{ GameFreeId: proto.Int32(scene.dbGameFree.GetId()), Ts: proto.Int64(leftTime), Sec: proto.Int32(scene.StateSec), }) gameStateMgr.BrodcastGameState(int32(scene.gameId), scene.limitPlatform.IdStr, - int(gamehall_proto.GameHallPacketID_PACKET_SC_GAMESTATE), pack) + int(gamehallproto.GameHallPacketID_PACKET_SC_GAMESTATE), pack) } } } return nil })) - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_JACKPOTLIST), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWGameJackList{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_JACKPOTLIST), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWGameJackList{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_JACKPOTLIST), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_JACKPOTLIST), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive SSPacketID_PACKET_GW_JACKPOTLIST GWGameJackList:", pack) - if msg, ok := pack.(*server_proto.GWGameJackList); ok { + if msg, ok := pack.(*serverproto.GWGameJackList); ok { FishJackListMgr.Insert(msg.GetCoin(), msg.GetSnId(), msg.GetRoomId(), msg.GetJackType(), msg.GetGameId(), msg.GetPlatform(), msg.GetChannel(), msg.GetName()) } return nil })) - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_JACKPOTCOIN), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWGameJackCoin{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_JACKPOTCOIN), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWGameJackCoin{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_JACKPOTCOIN), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_JACKPOTCOIN), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive SSPacketID_PACKET_GW_JACKPOTCOIN GWGameJackCoin:", pack) - if msg, ok := pack.(*server_proto.GWGameJackCoin); ok { + if msg, ok := pack.(*serverproto.GWGameJackCoin); ok { for i, pl := range msg.Platform { FishJackpotCoinMgr.Jackpot[pl] = msg.Coin[i] } @@ -631,12 +631,12 @@ func init() { })) //强制换桌 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_GW_CHANGESCENEEVENT), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.GWChangeSceneEvent{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_CHANGESCENEEVENT), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.GWChangeSceneEvent{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_GW_CHANGESCENEEVENT), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_CHANGESCENEEVENT), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("receive SSPacketID_PACKET_GW_CHANGESCENEEVENT GWChangeSceneEvent:", pack) - if msg, ok := pack.(*server_proto.GWChangeSceneEvent); ok { + if msg, ok := pack.(*serverproto.GWChangeSceneEvent); ok { scene := SceneMgrSingleton.GetScene(int(msg.GetSceneId())) if scene != nil { scene.PlayerTryChange() @@ -646,13 +646,13 @@ func init() { })) //玩家中转消息 - netlib.RegisterFactory(int(server_proto.SSPacketID_PACKET_SS_REDIRECTTOPLAYER), netlib.PacketFactoryWrapper(func() interface{} { - return &server_proto.SSRedirectToPlayer{} + netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_SS_REDIRECTTOPLAYER), netlib.PacketFactoryWrapper(func() interface{} { + return &serverproto.SSRedirectToPlayer{} })) - netlib.RegisterHandler(int(server_proto.SSPacketID_PACKET_SS_REDIRECTTOPLAYER), netlib.HandlerWrapper(func(s *netlib.Session, + netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_SS_REDIRECTTOPLAYER), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { logger.Logger.Trace("SSRedirectToPlayer Process recv ", pack) - if msg, ok := pack.(*server_proto.SSRedirectToPlayer); ok { + if msg, ok := pack.(*serverproto.SSRedirectToPlayer); ok { p := PlayerMgrSington.GetPlayerBySnId(msg.GetSnId()) if p == nil { return nil @@ -670,13 +670,13 @@ type CSPMCmdHandler struct { } func (this *CSPMCmdPacketFactory) CreatePacket() interface{} { - pack := &player_proto.CSPMCmd{} + pack := &playerproto.CSPMCmd{} return pack } func (this *CSPMCmdHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { logger.Logger.Trace("CSPMCmdHandler Process recv ", data) - if msg, ok := data.(*player_proto.CSPMCmd); ok { + if msg, ok := data.(*playerproto.CSPMCmd); ok { p := PlayerMgrSington.GetPlayer(sid) if p == nil { logger.Logger.Trace("CSPMCmdHandler p == nil") @@ -729,13 +729,13 @@ type CSRobotChgDataHandler struct { } func (this *CSRobotChgDataPacketFactory) CreatePacket() interface{} { - pack := &player_proto.CSRobotChgData{} + pack := &playerproto.CSRobotChgData{} return pack } func (this *CSRobotChgDataHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { logger.Logger.Trace("CSRobotChgDataHandler Process recv ", data) - if _, ok := data.(*player_proto.CSRobotChgData); ok { + if _, ok := data.(*playerproto.CSRobotChgData); ok { p := PlayerMgrSington.GetPlayer(sid) if p == nil { logger.Logger.Trace("CSRobotChgDataHandler p == nil") @@ -756,13 +756,13 @@ type CSAccountInvalidHandler struct { } func (this *CSAccountInvalidPacketFactory) CreatePacket() interface{} { - pack := &login_proto.CSAccountInvalid{} + pack := &loginproto.CSAccountInvalid{} return pack } func (this *CSAccountInvalidHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { logger.Logger.Trace("CSAccountInvalidHandler Process recv ", data) - if _, ok := data.(*login_proto.CSAccountInvalid); ok { + if _, ok := data.(*loginproto.CSAccountInvalid); ok { p := PlayerMgrSington.GetPlayer(sid) if p != nil && p.IsRobot() { snid := p.SnId @@ -789,12 +789,12 @@ func (this *CSAccountInvalidHandler) Process(s *netlib.Session, packetid int, da } func init() { - common.RegisterHandler(int(player_proto.PlayerPacketID_PACKET_CS_PMCMD), &CSPMCmdHandler{}) - netlib.RegisterFactory(int(player_proto.PlayerPacketID_PACKET_CS_PMCMD), &CSPMCmdPacketFactory{}) + common.RegisterHandler(int(playerproto.PlayerPacketID_PACKET_CS_PMCMD), &CSPMCmdHandler{}) + netlib.RegisterFactory(int(playerproto.PlayerPacketID_PACKET_CS_PMCMD), &CSPMCmdPacketFactory{}) - common.RegisterHandler(int(player_proto.PlayerPacketID_PACKET_CS_ROBOTCHGDATA), &CSRobotChgDataHandler{}) - netlib.RegisterFactory(int(player_proto.PlayerPacketID_PACKET_CS_ROBOTCHGDATA), &CSRobotChgDataPacketFactory{}) + common.RegisterHandler(int(playerproto.PlayerPacketID_PACKET_CS_ROBOTCHGDATA), &CSRobotChgDataHandler{}) + netlib.RegisterFactory(int(playerproto.PlayerPacketID_PACKET_CS_ROBOTCHGDATA), &CSRobotChgDataPacketFactory{}) - common.RegisterHandler(int(login_proto.LoginPacketID_PACKET_CS_ACCOUNTINVALID), &CSAccountInvalidHandler{}) - netlib.RegisterFactory(int(login_proto.LoginPacketID_PACKET_CS_ACCOUNTINVALID), &CSAccountInvalidPacketFactory{}) + common.RegisterHandler(int(loginproto.LoginPacketID_PACKET_CS_ACCOUNTINVALID), &CSAccountInvalidHandler{}) + netlib.RegisterFactory(int(loginproto.LoginPacketID_PACKET_CS_ACCOUNTINVALID), &CSAccountInvalidPacketFactory{}) } diff --git a/worldsrv/coinscenemgr.go b/worldsrv/coinscenemgr.go index a51a4d5..bb2f9b4 100644 --- a/worldsrv/coinscenemgr.go +++ b/worldsrv/coinscenemgr.go @@ -1,6 +1,7 @@ package main import ( + "games.yol.com/win88/model" "math/rand" "time" @@ -11,20 +12,15 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/proto" - hall_proto "mongo.games.com/game/protocol/gamehall" + hallproto "mongo.games.com/game/protocol/gamehall" "mongo.games.com/game/protocol/server" "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/srvdata" ) var CoinSceneMgrSingleton = &CoinSceneMgr{ - playerChanging: make(map[int32]int32), - //按平台管理 + playerChanging: make(map[int32]int32), scenesOfPlatform: make(map[string]map[int32]*CoinScenePool), - platformOfScene: make(map[int]string), - //按组管理 - scenesOfGroup: make(map[int32]map[int32]*CoinScenePool), - groupOfScene: make(map[int]int32), } type CreateRoomCache struct { @@ -33,16 +29,8 @@ type CreateRoomCache struct { } type CoinSceneMgr struct { - playerChanging map[int32]int32 // snid:gamefreeid 换桌中的玩家 - - //按平台管理 - scenesOfPlatform map[string]map[int32]*CoinScenePool // platform:gamefreeid - platformOfScene map[int]string // sceneid:platform; 创建房间后记录房间所在平台 - - //按组管理 - scenesOfGroup map[int32]map[int32]*CoinScenePool // groupid:gamefreeid - groupOfScene map[int]int32 // sceneid:groupid; - + scenesOfPlatform map[string]map[int32]*CoinScenePool // 场次房间池 platform:gamefreeid + playerChanging map[int32]int32 // 换桌中的玩家 snid:gamefreeid //延迟创建房间列表 delayCache []*CreateRoomCache // 待预创建房间 } @@ -50,216 +38,126 @@ type CoinSceneMgr struct { // GetCoinScenePool 获取一个场景池 // plt 平台id // id 场次id -func (csm *CoinSceneMgr) GetCoinScenePool(plt string, id int32) *CoinScenePool { +func (m *CoinSceneMgr) GetCoinScenePool(plt string, id int32) *CoinScenePool { gf := PlatformMgrSingleton.GetGameFree(plt, id) - if gf == nil { + if gf == nil || gf.DbGameFree == nil { return nil } - groupId := gf.GetGroupId() - if groupId != 0 { - if _, ok := csm.scenesOfGroup[groupId]; ok { - if csp, ok := csm.scenesOfGroup[groupId][id]; ok { - return csp - } - } - } else { - if ss, ok := csm.scenesOfPlatform[plt]; ok { - if csp, ok := ss[id]; ok && csp != nil { - return csp - } - } - } - if gf.GetDbGameFree() == nil { - return nil + if ss, ok := m.scenesOfPlatform[plt]; ok { + if csp, ok := ss[id]; ok && csp != nil { + return csp + } } // 创建了一个新的 - // 应该是走不到这里,因为模块启动时所有场次都创建了房间池 - pool := newCoinScenePool(plt, groupId, gf.GetDbGameFree()) - if groupId != 0 { - v, ok := csm.scenesOfGroup[groupId] - if !ok || v == nil { - csm.scenesOfGroup[groupId] = make(map[int32]*CoinScenePool) - } - csm.scenesOfGroup[groupId][id] = pool - } else { - v, ok := csm.scenesOfPlatform[plt] - if !ok || v == nil { - csm.scenesOfPlatform[plt] = make(map[int32]*CoinScenePool) - } - csm.scenesOfPlatform[plt][id] = pool + // 模块启动时所有场次都创建了房间池 + pool := newCoinScenePool(plt, gf.GetDbGameFree()) + v, ok := m.scenesOfPlatform[plt] + if !ok || v == nil { + m.scenesOfPlatform[plt] = make(map[int32]*CoinScenePool) } + m.scenesOfPlatform[plt][id] = pool return pool } -func (csm *CoinSceneMgr) findCoinScenePool(platform string, id int32) (pools map[int32]*CoinScenePool, groupID int32, - dbGameFree *server.DB_GameFree) { +func (m *CoinSceneMgr) findCoinScenePool(platform string, id int32) (pools map[int32]*CoinScenePool, dbGameFree *server.DB_GameFree) { gf := PlatformMgrSingleton.GetGameFree(platform, id) if gf == nil || gf.GetDbGameFree() == nil { - return nil, 0, nil - } - groupId := gf.GetGroupId() - - var ss map[int32]*CoinScenePool - var ok bool - if groupId != 0 { - ss, ok = csm.scenesOfGroup[groupId] - if !ok { - ss = make(map[int32]*CoinScenePool) - csm.scenesOfGroup[groupId] = ss - } - return ss, groupId, gf.GetDbGameFree() + return nil, nil } - ss, ok = csm.scenesOfPlatform[platform] - if !ok { + ss, ok := m.scenesOfPlatform[platform] + if !ok || ss == nil { ss = make(map[int32]*CoinScenePool) - csm.scenesOfPlatform[platform] = ss + m.scenesOfPlatform[platform] = ss } - return ss, 0, gf.GetDbGameFree() + return ss, gf.GetDbGameFree() } // PlayerEnter 玩家进入房间池 -func (csm *CoinSceneMgr) PlayerEnter(p *Player, id int32, roomId int32, exclude []int32, isChangeRoom bool) hall_proto.OpResultCode { - logger.Logger.Tracef("(csm *CoinSceneMgr) PlayerEnter snid:%v id:%v roomid:%v exclude:%v", p.SnId, id, roomId, exclude) +func (m *CoinSceneMgr) PlayerEnter(p *Player, id int32, roomId int32, exclude []int32, isChangeRoom bool) hallproto.OpResultCode { + logger.Logger.Tracef("CoinSceneMgr PlayerEnter snid:%v id:%v roomid:%v exclude:%v", p.SnId, id, roomId, exclude) if p.isDelete { //删档用户不让进游戏 - return hall_proto.OpResultCode_OPRC_RoomHadClosed + return hallproto.OpResultCode_OPRC_RoomHadClosed + } + // 玩家已经在房间里了 + if m.InCoinScene(p) { + logger.Logger.Warnf("CoinSceneMgr PlayerEnter snid:%v find in gamefreeid:%v roomId:%v", p.SnId, p.scene.dbGameFree.Id, p.scene.sceneId) + return hallproto.OpResultCode_OPRC_Error } - //多平台支持 platform := p.GetPlatform() if platform == nil { - return hall_proto.OpResultCode_OPRC_RoomHadClosed + return hallproto.OpResultCode_OPRC_RoomHadClosed } - - // 玩家已经在房间里了 - if p.scene != nil { - logger.Logger.Warnf("(csm *CoinSceneMgr) PlayerEnter snid:%v find in gameId:%v gamefreeid:%v", p.SnId, p.scene.gameId, id) - return hall_proto.OpResultCode_OPRC_Error - } - - csp := csm.GetCoinScenePool(platform.IdStr, id) - - ret := csp.PlayerEnter(p, roomId, exclude, isChangeRoom) - - logger.Logger.Warnf("(csm *CoinSceneMgr) PlayerEnter snid:%v find in id:%v exclude:%v return false", p.SnId, id, exclude) + csp := m.GetCoinScenePool(platform.IdStr, id) + ret := csp.playerEnter(p, roomId, exclude, isChangeRoom) + logger.Logger.Tracef("CoinSceneMgr PlayerEnter snid:%v id:%v ret:%v", p.SnId, id, ret) return ret } // AudienceEnter 观众进入房间 -// id 场次id -func (csm *CoinSceneMgr) AudienceEnter(p *Player, id int32, roomId int32, exclude []int32, ischangeroom bool) hall_proto.OpResultCode { +func (m *CoinSceneMgr) AudienceEnter(p *Player, id int32, roomId int32, exclude []int32, ischangeroom bool) hallproto.OpResultCode { + logger.Logger.Tracef("CoinSceneMgr AudienceEnter snid:%v id:%v roomid:%v exclude:%v", p.SnId, id, roomId, exclude) + if p.isDelete { //删档用户不让进游戏 + return hallproto.OpResultCode_OPRC_RoomHadClosed + } + if m.InCoinScene(p) { + logger.Logger.Warnf("CoinSceneMgr AudienceEnter snid:%v find in gamefreeid:%v roomId:%v", p.SnId, p.scene.dbGameFree.Id, p.scene.sceneId) + return hallproto.OpResultCode_OPRC_Error + } //多平台支持 platform := p.GetPlatform() if platform == nil { - return hall_proto.OpResultCode_OPRC_RoomHadClosed + return hallproto.OpResultCode_OPRC_RoomHadClosed } - pools, _, _ := csm.findCoinScenePool(platform.IdStr, id) + pools, _ := m.findCoinScenePool(platform.IdStr, id) if pools == nil { - return hall_proto.OpResultCode_OPRC_RoomHadClosed + return hallproto.OpResultCode_OPRC_RoomHadClosed } - if len(pools) == 0 { - return hall_proto.OpResultCode_OPRC_NoFindDownTiceRoom + return hallproto.OpResultCode_OPRC_NoFindDownTiceRoom } - if csp, ok := pools[id]; ok && csp != nil { - ret := csp.AudienceEnter(p, roomId, exclude, ischangeroom) - logger.Logger.Warnf("(csm *CoinSceneMgr) AudienceEnter snid:%v find in id:%v exclude:%v return false", p.SnId, id, exclude) - return ret - } - logger.Logger.Warnf("(csm *CoinSceneMgr) AudienceEnter snid:%v find in id:%v exclude:%v csp.AudienceEnter return false", p.SnId, id, exclude) - return hall_proto.OpResultCode_OPRC_Error -} - -func (csm *CoinSceneMgr) playerLeave(p *Player, reason int) bool { - if p == nil || p.scene == nil { - return true + csp, ok := pools[id] + if !ok || csp == nil { + return hallproto.OpResultCode_OPRC_RoomHadClosed } - s := p.scene - if s.groupId != 0 { - if ss, ok := csm.scenesOfGroup[s.groupId]; ok && ss != nil { - if csp, ok := ss[s.dbGameFree.GetId()]; ok && csp != nil { - if !csp.PlayerLeave(p, reason) { - csp.AudienceLeave(p, reason) - } - } - return true - } - } - - // 玩家身上平台 - if platform := p.GetPlatform(); platform != nil { - if ss, ok := csm.scenesOfPlatform[platform.IdStr]; ok && ss != nil { - if csp, ok := ss[s.dbGameFree.GetId()]; ok && csp != nil { - if !csp.PlayerLeave(p, reason) { - csp.AudienceLeave(p, reason) - } - } - return true - } - } - - // 房间所在平台 - if s.limitPlatform != nil { - if ss, ok := csm.scenesOfPlatform[s.limitPlatform.IdStr]; ok && ss != nil { - if csp, ok := ss[s.dbGameFree.GetId()]; ok && csp != nil { - if !csp.PlayerLeave(p, reason) { - csp.AudienceLeave(p, reason) - } - } - return true - } - } - - return true + ret := csp.audienceEnter(p, roomId, exclude, ischangeroom) + logger.Logger.Tracef("CoinSceneMgr AudienceEnter snid:%v id:%v ret:%v", p.SnId, id, ret) + return ret } // PlayerLeave 玩家离开 -func (csm *CoinSceneMgr) PlayerLeave(p *Player, reason int) bool { - logger.Logger.Tracef("玩家离开: snid %v, reason %v isAudience %v", p.SnId, reason) - return csm.playerLeave(p, reason) +// 游戏服玩家离开房间消息触发 +func (m *CoinSceneMgr) PlayerLeave(p *Player, reason int) bool { + logger.Logger.Tracef("玩家离开: snid %v, reason %v", p.SnId, reason) + if p.scene == nil || p.scene.csp == nil { + return false + } + if p.scene.csp.playerLeave(p, reason) { + return true + } + if p.scene.csp.audienceLeave(p, reason) { + return true + } + return false } // OnDestroyScene 解散房间 +// 游戏服解散房间消息触发 // sceneId 房间id -func (csm *CoinSceneMgr) OnDestroyScene(sceneId int) { - if platformName, ok := csm.platformOfScene[sceneId]; ok { - if ss, ok := csm.scenesOfPlatform[platformName]; ok { - for _, csp := range ss { - csp.OnDestroyScene(sceneId) - } - } - delete(csm.platformOfScene, sceneId) +func (m *CoinSceneMgr) OnDestroyScene(sceneId int) { + if s := SceneMgrSingleton.GetScene(sceneId); s != nil && s.csp != nil { + s.csp.onDestroyScene(sceneId) } - - if groupId, ok := csm.groupOfScene[sceneId]; ok { - if ss, ok := csm.scenesOfGroup[groupId]; ok { - for _, csp := range ss { - csp.OnDestroyScene(sceneId) - } - } - delete(csm.groupOfScene, sceneId) - } -} - -// GetPlatformBySceneId 获取房间所在平台 -func (csm *CoinSceneMgr) GetPlatformBySceneId(sceneId int) string { - if platformName, ok := csm.platformOfScene[sceneId]; ok { - return platformName - } - s := SceneMgrSingleton.GetScene(sceneId) - if s != nil && s.limitPlatform != nil { - return s.limitPlatform.IdStr - } - return DefaultPlatform } // GetPlayerNums 获取场次人数 -func (csm *CoinSceneMgr) GetPlayerNums(p *Player, gameId, gameMode int32) []int32 { +func (m *CoinSceneMgr) GetPlayerNums(p *Player, gameId, gameMode int32) []int32 { //多平台支持 platform := p.GetPlatform() var nums [10]int32 @@ -276,22 +174,11 @@ func (csm *CoinSceneMgr) GetPlayerNums(p *Player, gameId, gameMode int32) []int3 for _, id := range ids { gps := PlatformMgrSingleton.GetGameFree(platform.IdStr, id) if gps != nil { - if gps.GroupId != 0 { - if ss, exist := csm.scenesOfGroup[gps.GroupId]; exist { - if csp, exist := ss[id]; exist { - sceneType := csp.GetSceneType() - 1 - if sceneType >= 0 && sceneType < len(nums) { - nums[sceneType] += csp.GetPlayerNum() + csp.GetFakePlayerNum() - } - } - } - } else { - if ss, ok := csm.scenesOfPlatform[platform.IdStr]; ok { - if csp, exist := ss[id]; exist { - sceneType := csp.GetSceneType() - 1 - if sceneType >= 0 && sceneType < len(nums) { - nums[sceneType] += csp.GetPlayerNum() + csp.GetFakePlayerNum() - } + if ss, ok := m.scenesOfPlatform[platform.IdStr]; ok { + if csp, exist := ss[id]; exist { + sceneType := csp.GetSceneType() - 1 + if sceneType >= 0 && sceneType < len(nums) { + nums[sceneType] += csp.GetPlayerNum() + csp.GetFakePlayerNum() } } } @@ -305,9 +192,9 @@ func (csm *CoinSceneMgr) GetPlayerNums(p *Player, gameId, gameMode int32) []int3 } // InCoinScene 是否在场次中 -func (csm *CoinSceneMgr) InCoinScene(p *Player) bool { +func (m *CoinSceneMgr) InCoinScene(p *Player) bool { if p == nil { - logger.Logger.Tracef("(csm *CoinSceneMgr) InCoinScene p == nil snid:%v ", p.SnId) + logger.Logger.Tracef("(m *CoinSceneMgr) InCoinScene p == nil") return false } @@ -322,10 +209,10 @@ func (csm *CoinSceneMgr) InCoinScene(p *Player) bool { } // PlayerTryLeave 通知游戏服务玩家要离开房间 -func (csm *CoinSceneMgr) PlayerTryLeave(p *Player, isAudience bool) hall_proto.OpResultCode { - if !csm.InCoinScene(p) { - logger.Logger.Tracef("(csm *CoinSceneMgr) PlayerTryLeave !csm.InCoinScene(p) snid:%v ", p.SnId) - return hall_proto.OpResultCode_OPRC_Sucess +func (m *CoinSceneMgr) PlayerTryLeave(p *Player, isAudience bool) hallproto.OpResultCode { + if !m.InCoinScene(p) { + logger.Logger.Tracef("(m *CoinSceneMgr) PlayerTryLeave !m.InCoinScene(p) snid:%v ", p.SnId) + return hallproto.OpResultCode_OPRC_Sucess } // 通知gamesrv @@ -333,46 +220,54 @@ func (csm *CoinSceneMgr) PlayerTryLeave(p *Player, isAudience bool) hall_proto.O if isAudience { op = common.CoinSceneOp_AudienceLeave } - pack := &hall_proto.CSCoinSceneOp{ - Id: proto.Int32(p.scene.csp.id), + pack := &hallproto.CSCoinSceneOp{ + Id: proto.Int32(p.scene.csp.ID()), OpType: proto.Int32(op), } - proto.SetDefaults(pack) - common.TransmitToServer(p.sid, int(hall_proto.CoinSceneGamePacketID_PACKET_CS_COINSCENE_OP), pack, p.scene.gameSess.Session) - logger.Logger.Tracef("(csm *CoinSceneMgr) PlayerTryLeave snid:%v id:%v", p.SnId, pack.GetId()) - return hall_proto.OpResultCode_OPRC_OpYield + common.TransmitToServer(p.sid, int(hallproto.CoinSceneGamePacketID_PACKET_CS_COINSCENE_OP), pack, p.scene.gameSess.Session) + logger.Logger.Tracef("(m *CoinSceneMgr) PlayerTryLeave snid:%v id:%v", p.SnId, pack.GetId()) + + return hallproto.OpResultCode_OPRC_OpYield } -func (csm *CoinSceneMgr) PlayerInChanging(p *Player) bool { - _, exist := csm.playerChanging[p.SnId] +// PlayerInChanging 换房中 +func (m *CoinSceneMgr) PlayerInChanging(p *Player) bool { + _, exist := m.playerChanging[p.SnId] return exist } -func (csm *CoinSceneMgr) ClearPlayerChanging(p *Player) { - delete(csm.playerChanging, p.SnId) +// ClearPlayerChanging 换房结束 +func (m *CoinSceneMgr) ClearPlayerChanging(p *Player) { + delete(m.playerChanging, p.SnId) } -func (csm *CoinSceneMgr) PlayerTryChange(p *Player, id int32, exclude []int32, isAudience bool) hall_proto.OpResultCode { - if csm.InCoinScene(p) { - return csm.StartChangeCoinSceneTransact(p, id, exclude, isAudience) +// PlayerTryChange 换房 +// id 场次id +// excludeRoomId 排除的房间id +// isAudience 是否是观众 +func (m *CoinSceneMgr) PlayerTryChange(p *Player, id int32, excludeRoomId []int32, isAudience bool) hallproto.OpResultCode { + if m.InCoinScene(p) { + return m.StartChangeCoinSceneTransact(p, id, excludeRoomId, isAudience) } + // 不在场次中,进入房间观战 if isAudience { - return csm.AudienceEnter(p, id, 0, exclude, true) + return m.AudienceEnter(p, id, 0, excludeRoomId, true) } - return csm.PlayerEnter(p, id, 0, exclude, true) + // 不在场次中,进入房间 + return m.PlayerEnter(p, id, 0, excludeRoomId, true) } -func (csm *CoinSceneMgr) StartChangeCoinSceneTransact(p *Player, id int32, exclude []int32, isAudience bool) hall_proto.OpResultCode { +func (m *CoinSceneMgr) StartChangeCoinSceneTransact(p *Player, id int32, exclude []int32, isAudience bool) hallproto.OpResultCode { if p == nil || p.scene == nil { - logger.Logger.Warnf("(csm *CoinSceneMgr) StartChangeCoinSceneTransact p == nil || p.scene == nil snid:%v id:%v", p.SnId, id) - return hall_proto.OpResultCode_OPRC_Error + logger.Logger.Warnf("(m *CoinSceneMgr) StartChangeCoinSceneTransact p == nil || p.scene == nil snid:%v id:%v", p.SnId, id) + return hallproto.OpResultCode_OPRC_Error } tNow := time.Now() if !p.lastChangeScene.IsZero() && tNow.Sub(p.lastChangeScene) < time.Second { - logger.Logger.Warnf("(csm *CoinSceneMgr) StartChangeCoinSceneTransact !p.lastChangeScene.IsZero() && tNow.Sub(p.lastChangeScene) < time.Second snid:%v id:%v", p.SnId, id) - return hall_proto.OpResultCode_OPRC_ChangeRoomTooOften + logger.Logger.Warnf("(m *CoinSceneMgr) StartChangeCoinSceneTransact !p.lastChangeScene.IsZero() && tNow.Sub(p.lastChangeScene) < time.Second snid:%v id:%v", p.SnId, id) + return hallproto.OpResultCode_OPRC_ChangeRoomTooOften } tnp := &transact.TransNodeParam{ @@ -392,12 +287,12 @@ func (csm *CoinSceneMgr) StartChangeCoinSceneTransact(p *Player, id int32, exclu tNode := transact.DTCModule.StartTrans(tnp, ctx, CoinSceneChangeTimeOut) if tNode != nil { tNode.Go(core.CoreObject()) - csm.playerChanging[p.SnId] = id + m.playerChanging[p.SnId] = id p.lastChangeScene = tNow - return hall_proto.OpResultCode_OPRC_Sucess + return hallproto.OpResultCode_OPRC_Sucess } - logger.Logger.Warnf("(csm *CoinSceneMgr) StartChangeCoinSceneTransact tNode == nil snid:%v id:%v", p.SnId, id) - return hall_proto.OpResultCode_OPRC_Error + logger.Logger.Warnf("(m *CoinSceneMgr) StartChangeCoinSceneTransact tNode == nil snid:%v id:%v", p.SnId, id) + return hallproto.OpResultCode_OPRC_Error } // TouchCreateRoom 触发预创建房间 @@ -405,44 +300,47 @@ func (csm *CoinSceneMgr) StartChangeCoinSceneTransact(p *Player, id int32, exclu // 2.游戏服建立连接后触发 // 3.房间解散后触发 // 4.场次配置更新后 -func (csm *CoinSceneMgr) TouchCreateRoom(platform string, gameFreeId int32) { +func (m *CoinSceneMgr) TouchCreateRoom(platform string, gameFreeId int32) { + if model.GameParamData.ClosePreCreateRoom { + return + } gf := PlatformMgrSingleton.GetGameFree(platform, gameFreeId) if gf.Status && gf.DbGameFree.GetCreateRoomNum() > 0 { logger.Logger.Tracef("TouchCreateRoom platform:%v gameFreeId:%v", platform, gameFreeId) - csm.delayCache = append(csm.delayCache, &CreateRoomCache{ + m.delayCache = append(m.delayCache, &CreateRoomCache{ platformName: platform, gameFreeId: gameFreeId, }) } } -func (csm *CoinSceneMgr) ModuleName() string { +func (m *CoinSceneMgr) ModuleName() string { return "CoinSceneMgr" } -func (csm *CoinSceneMgr) Init() { +func (m *CoinSceneMgr) Init() { // 房间池初始化 for _, platform := range PlatformMgrSingleton.GetPlatforms() { if platform.Isolated || platform.IdStr == "" { for _, v := range srvdata.PBDB_GameFreeMgr.Datas.GetArr() { gps := PlatformMgrSingleton.GetGameFree(platform.IdStr, v.GetId()) if gps != nil { - csm.GetCoinScenePool(platform.IdStr, v.GetId()) - csm.TouchCreateRoom(platform.IdStr, v.GetId()) + m.GetCoinScenePool(platform.IdStr, v.GetId()) + m.TouchCreateRoom(platform.IdStr, v.GetId()) } } } } } -func (csm *CoinSceneMgr) Update() { - cnt := len(csm.delayCache) +func (m *CoinSceneMgr) Update() { + cnt := len(m.delayCache) if cnt > 0 { - data := csm.delayCache[cnt-1] - csm.delayCache = csm.delayCache[:cnt-1] + data := m.delayCache[cnt-1] + m.delayCache = m.delayCache[:cnt-1] gf := PlatformMgrSingleton.GetGameFree(data.platformName, data.gameFreeId) if gf != nil && gf.DbGameFree != nil { - csp := csm.GetCoinScenePool(data.platformName, data.gameFreeId) + csp := m.GetCoinScenePool(data.platformName, data.gameFreeId) if csp != nil { csp.PreCreateRoom() } @@ -450,22 +348,22 @@ func (csm *CoinSceneMgr) Update() { } } -func (csm *CoinSceneMgr) Shutdown() { - module.UnregisteModule(csm) +func (m *CoinSceneMgr) Shutdown() { + module.UnregisteModule(m) } //=====================PlatformObserver====================== -func (this *CoinSceneMgr) OnPlatformCreate(p *Platform) { +func (m *CoinSceneMgr) OnPlatformCreate(p *Platform) { } -func (this *CoinSceneMgr) OnPlatformDestroy(p *Platform) { +func (m *CoinSceneMgr) OnPlatformDestroy(p *Platform) { if p == nil { return } var ids []int - if v, ok := this.scenesOfPlatform[p.IdStr]; ok { + if v, ok := m.scenesOfPlatform[p.IdStr]; ok { for _, csp := range v { for _, scene := range csp.scenes { ids = append(ids, scene.sceneId) @@ -475,24 +373,18 @@ func (this *CoinSceneMgr) OnPlatformDestroy(p *Platform) { SceneMgrSingleton.DoDelete(ids, true) } -func (this *CoinSceneMgr) OnPlatformChangeDisabled(p *Platform, disabled bool) { +func (m *CoinSceneMgr) OnPlatformChangeDisabled(p *Platform, disabled bool) { if disabled { - this.OnPlatformDestroy(p) + m.OnPlatformDestroy(p) } } -func (this *CoinSceneMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCfg *webapi.GameFree) { +func (m *CoinSceneMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCfg *webapi.GameFree) { if p == nil || newCfg == nil { return } - var ss map[int32]*CoinScenePool - var ok bool - if oldCfg.GroupId != newCfg.GroupId || oldCfg.GroupId != 0 { - ss, ok = this.scenesOfGroup[oldCfg.GroupId] - } else { - ss, ok = this.scenesOfPlatform[p.IdStr] - } + ss, ok := m.scenesOfPlatform[p.IdStr] if !ok || ss == nil { return } @@ -504,62 +396,36 @@ func (this *CoinSceneMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCfg * ids = append(ids, scene.sceneId) } SceneMgrSingleton.DoDelete(ids, true) - this.TouchCreateRoom(p.IdStr, newCfg.DbGameFree.Id) + m.TouchCreateRoom(p.IdStr, newCfg.DbGameFree.Id) } } -func (this *CoinSceneMgr) OnPlatformDestroyByGameFreeId(p *Platform, gameFreeId int32) { +func (m *CoinSceneMgr) OnPlatformDestroyByGameFreeId(p *Platform, gameFreeId int32) { if p == nil { return } - if csps, ok := this.scenesOfPlatform[p.IdStr]; ok { - var ids []int - for _, csp := range csps { + var ids []int + if v, ok := m.scenesOfPlatform[p.IdStr]; ok { + for _, csp := range v { for _, scene := range csp.scenes { if scene.dbGameFree.Id == gameFreeId { ids = append(ids, scene.sceneId) } } } - SceneMgrSingleton.DoDelete(ids, true) } + SceneMgrSingleton.DoDelete(ids, true) } //=========================PlatformGameGroupObserver============================== -func (this *CoinSceneMgr) OnGameGroupUpdate(oldCfg, newCfg *webapi.GameConfigGroup) { - if newCfg == nil { - return - } - if scenes, exist := this.scenesOfGroup[newCfg.Id]; exist { - if cps, ok := scenes[newCfg.DbGameFree.Id]; ok { - needDestroy := false - if cps.dbGameFree.GetBot() != newCfg.DbGameFree.GetBot() || - cps.dbGameFree.GetBaseScore() != newCfg.DbGameFree.GetBaseScore() || - cps.dbGameFree.GetLimitCoin() != newCfg.DbGameFree.GetLimitCoin() || - cps.dbGameFree.GetMaxCoinLimit() != newCfg.DbGameFree.GetMaxCoinLimit() || - cps.dbGameFree.GetTaxRate() != newCfg.DbGameFree.GetTaxRate() || - !common.SliceInt64Equal(cps.dbGameFree.GetOtherIntParams(), newCfg.DbGameFree.GetOtherIntParams()) || - !common.SliceInt64Equal(cps.dbGameFree.GetRobotTakeCoin(), newCfg.DbGameFree.GetRobotTakeCoin()) || - !common.SliceInt64Equal(cps.dbGameFree.GetRobotLimitCoin(), newCfg.DbGameFree.GetRobotLimitCoin()) { - needDestroy = true - } - //TODO 预创建房间配置更新,unsupport group model - cps.dbGameFree = newCfg.DbGameFree - if needDestroy { - var ids []int - for _, scene := range cps.scenes { - ids = append(ids, scene.sceneId) - } - SceneMgrSingleton.DoDelete(ids, true) - } - } - } +func (m *CoinSceneMgr) OnGameGroupUpdate(oldCfg, newCfg *webapi.GameConfigGroup) { + } //=========================GameSessionListener====================================== -func (csm *CoinSceneMgr) OnGameSessionRegiste(gs *GameSession) { +func (m *CoinSceneMgr) OnGameSessionRegiste(gs *GameSession) { wildGs := len(gs.gameIds) == 0 || common.InSliceInt32(gs.gameIds, 0) // 是否所有游戏都支持 for _, platform := range PlatformMgrSingleton.GetPlatforms() { if platform.IdStr == DefaultPlatform { @@ -569,13 +435,13 @@ func (csm *CoinSceneMgr) OnGameSessionRegiste(gs *GameSession) { gps := PlatformMgrSingleton.GetGameFrees(platform.IdStr) for _, v := range gps { if v != nil && (wildGs || common.InSliceInt32(gs.gameIds, v.DbGameFree.GetGameId())) { - csm.TouchCreateRoom(platform.IdStr, v.DbGameFree.Id) + m.TouchCreateRoom(platform.IdStr, v.DbGameFree.Id) } } } } -func (this *CoinSceneMgr) OnGameSessionUnregiste(gs *GameSession) { +func (m *CoinSceneMgr) OnGameSessionUnregiste(gs *GameSession) { //todo 游戏服务断开,是否解散房间? } diff --git a/worldsrv/coinscenepool.go b/worldsrv/coinscenepool.go index f6688d9..6045eac 100644 --- a/worldsrv/coinscenepool.go +++ b/worldsrv/coinscenepool.go @@ -1,9 +1,9 @@ package main import ( - "mongo.games.com/game/common" "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/common" "mongo.games.com/game/model" gamehallproto "mongo.games.com/game/protocol/gamehall" serverproto "mongo.games.com/game/protocol/server" @@ -13,8 +13,6 @@ import ( // CoinScenePool 房间池 type CoinScenePool struct { platform string // 平台id - groupId int32 // 组id - id int32 // 场次id dbGameFree *serverproto.DB_GameFree // 场次配置 dbGameRule *serverproto.DB_GameRule // 场次配置 scenes map[int]*Scene // 所有房间,房间id @@ -26,7 +24,7 @@ type CoinScenePool struct { policy ICoinScenePool } -func newCoinScenePool(platform string, groupId int32, dbGameFree *serverproto.DB_GameFree) *CoinScenePool { +func newCoinScenePool(platform string, dbGameFree *serverproto.DB_GameFree) *CoinScenePool { if dbGameFree == nil { return nil } @@ -42,8 +40,6 @@ func newCoinScenePool(platform string, groupId int32, dbGameFree *serverproto.DB csp := &CoinScenePool{ platform: platform, - groupId: groupId, - id: dbGameFree.GetId(), dbGameFree: dbGameFree, dbGameRule: dbGameRule, scenes: make(map[int]*Scene), @@ -59,6 +55,10 @@ func newCoinScenePool(platform string, groupId int32, dbGameFree *serverproto.DB return csp } +func (csp *CoinScenePool) ID() int32 { + return csp.dbGameFree.Id +} + func (csp *CoinScenePool) GetPlayerNum() int32 { return int32(len(csp.players)) } @@ -73,7 +73,8 @@ func (csp *CoinScenePool) GetFakePlayerNum() int32 { return 0 } -// GetSceneType 获取场次id +// GetSceneType 获取场次类型 +// 新手场,中级场 ... func (csp *CoinScenePool) GetSceneType() int { if csp.dbGameFree != nil { return int(csp.dbGameFree.GetSceneType()) @@ -89,14 +90,79 @@ func (csp *CoinScenePool) CanInviteRob() bool { return false } -// CanEnter 检查入场条件 -func (csp *CoinScenePool) CanEnter(p *Player) gamehallproto.OpResultCode { +// PreCreateRoom 预创建房间 +func (csp *CoinScenePool) PreCreateRoom() { + if csp.platform == DefaultPlatform || model.GameParamData.ClosePreCreateRoom { + return + } + if p := PlatformMgrSingleton.GetPlatform(csp.platform); p == nil || p.Disable { + return + } + preCreateNum := int(csp.dbGameFree.GetCreateRoomNum()) + if preCreateNum <= 0 { + return + } + num := preCreateNum - csp.GetRoomNum(common.SceneMode_Public) + if num > 0 { + logger.Logger.Tracef("预创建房间 [inc:%v] platform:%v gameFreeId:%v", num, csp.platform, csp.dbGameFree.Id) + for i := 0; i < num; i++ { + scene := csp.policy.NewPreCreateScene(csp) + if scene != nil { + csp.AddScene(scene) + } + } + } +} + +func (csp *CoinScenePool) GetRoomNum(mode ...int) int { + tp := 0 + if len(mode) > 0 { + tp = mode[0] + } + + var num int + for _, scene := range csp.scenes { + if tp > 0 { + if scene.IsSceneMode(tp) { + num++ + } + } else { + num++ + } + } + return num +} + +// GetHasTruePlayerSceneCnt 有真人的房间数量 +func (csp *CoinScenePool) GetHasTruePlayerSceneCnt() int { + cnt := 0 + for _, s := range csp.scenes { + if s.GetTruePlayerCnt() != 0 { + cnt++ + } + } + return cnt +} + +// AddScene 添加房间 +// 自定义房间参数的时候创建房间后添加到房间池 +// 创建房间后,调用AddScene添加到房间池,在玩家进入房间之前调用 +func (csp *CoinScenePool) AddScene(s *Scene) { + if s == nil { + return + } + csp.scenes[s.sceneId] = s + s.csp = csp +} + +// canEnter 检查入场条件 +func (csp *CoinScenePool) canEnter(p *Player) gamehallproto.OpResultCode { if csp.dbGameFree == nil || p == nil { return gamehallproto.OpResultCode_OPRC_Error } //检测房间状态是否开启 - gps := PlatformMgrSingleton.GetGameFree(p.Platform, csp.id) + gps := PlatformMgrSingleton.GetGameFree(p.Platform, csp.ID()) if gps == nil || !gps.Status { return gamehallproto.OpResultCode_OPRC_RoomHadClosed } @@ -106,7 +172,7 @@ func (csp *CoinScenePool) CanEnter(p *Player) gamehallproto.OpResultCode { return gamehallproto.OpResultCode_OPRC_RoomHadClosed } - //检查游戏次数限制 + // 检查游戏次数限制 if !p.IsRob { todayData, _ := p.GetDaliyGameData(int(dbGameFree.GetId())) if dbGameFree.GetPlayNumLimit() != 0 && @@ -119,14 +185,14 @@ func (csp *CoinScenePool) CanEnter(p *Player) gamehallproto.OpResultCode { return csp.policy.CanEnter(csp, p) } -// CanAudienceEnter 检查观众入场条件 -func (csp *CoinScenePool) CanAudienceEnter(p *Player) gamehallproto.OpResultCode { +// canAudienceEnter 检查观众入场条件 +func (csp *CoinScenePool) canAudienceEnter(p *Player) gamehallproto.OpResultCode { if csp.dbGameFree == nil || p == nil { return gamehallproto.OpResultCode_OPRC_Error } //检测房间状态是否开启 - gps := PlatformMgrSingleton.GetGameFree(p.Platform, csp.id) + gps := PlatformMgrSingleton.GetGameFree(p.Platform, csp.ID()) if gps == nil { return gamehallproto.OpResultCode_OPRC_RoomHadClosed } @@ -139,35 +205,16 @@ func (csp *CoinScenePool) CanAudienceEnter(p *Player) gamehallproto.OpResultCode return csp.policy.CanAudienceEnter(csp, p) } -// AddScene 添加房间 -func (csp *CoinScenePool) AddScene(s *Scene) { - if s == nil { - return - } - csp.scenes[s.sceneId] = s - s.csp = csp - if csp.groupId != 0 { - CoinSceneMgrSingleton.groupOfScene[s.sceneId] = csp.groupId - } else { - CoinSceneMgrSingleton.platformOfScene[s.sceneId] = csp.platform - } -} - -// PlayerEnter 玩家进入房间池 +// playerEnter 玩家进入房间池 // exclude 排除的房间id // isChangeRoom 是否换房 -func (csp *CoinScenePool) PlayerEnter(p *Player, roomId int32, exclude []int32, isChangeRoom bool) gamehallproto.OpResultCode { - if ret := csp.CanEnter(p); ret != gamehallproto.OpResultCode_OPRC_Sucess { - logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter find snid:%v csp.CanEnter coin:%v ret:%v id:%v", p.SnId, +func (csp *CoinScenePool) playerEnter(p *Player, roomId int32, exclude []int32, isChangeRoom bool) gamehallproto.OpResultCode { + if ret := csp.canEnter(p); ret != gamehallproto.OpResultCode_OPRC_Sucess { + logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter find snid:%v csp.canEnter coin:%v ret:%v id:%v", p.SnId, p.Coin, ret, csp.dbGameFree.GetId()) return ret } - if p.scene != nil { - logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter[p.scene != nil] find snid:%v in scene:%v gameId:%v", p.SnId, p.scene.sceneId, p.scene.gameId) - return gamehallproto.OpResultCode_OPRC_Error - } - var scene *Scene // 进入房间 // 指定房间id进入,忽略排除exclude,只有机器人和进入预创建房间才允许 @@ -204,15 +251,17 @@ func (csp *CoinScenePool) PlayerEnter(p *Player, roomId int32, exclude []int32, if scene == nil { scene = csp.policy.NewScene(csp, p) if scene != nil { + logger.Logger.Infof("(csp *CoinScenePool) PlayerEnter create new scene:%v snid:%v gamefreeid:%v", scene.sceneId, p.SnId, csp.ID()) csp.AddScene(scene) } else { - logger.Logger.Errorf("Create %v scene failed.", csp.id) + logger.Logger.Errorf("Create %v scene failed.", csp.ID()) } } if scene != nil { if scene.PlayerEnter(p, -1, isChangeRoom) { - csp.OnPlayerEnter(p, scene) + logger.Logger.Infof("(csp *CoinScenePool) PlayerEnter snid:%v sceneid:%v gamefreeid:%v success", p.SnId, scene.sceneId, csp.ID()) + csp.onPlayerEnter(p, scene) return gamehallproto.OpResultCode_OPRC_Sucess } } @@ -220,18 +269,13 @@ func (csp *CoinScenePool) PlayerEnter(p *Player, roomId int32, exclude []int32, return gamehallproto.OpResultCode_OPRC_SceneServerMaintain } -// AudienceEnter 观众入场 -func (csp *CoinScenePool) AudienceEnter(p *Player, roomId int32, exclude []int32, isChangeRoom bool) gamehallproto.OpResultCode { - if ret := csp.CanAudienceEnter(p); ret != gamehallproto.OpResultCode_OPRC_Sucess { - logger.Logger.Warnf("(csp *CoinScenePool) AudienceEnter find snid:%v csp.CanEnter coin:%v ret:%v id:%v", p.SnId, p.Coin, ret, csp.dbGameFree.GetId()) +// audienceEnter 观众入场 +func (csp *CoinScenePool) audienceEnter(p *Player, roomId int32, exclude []int32, isChangeRoom bool) gamehallproto.OpResultCode { + if ret := csp.canAudienceEnter(p); ret != gamehallproto.OpResultCode_OPRC_Sucess { + logger.Logger.Warnf("(csp *CoinScenePool) AudienceEnter find snid:%v csp.canEnter coin:%v ret:%v id:%v", p.SnId, p.Coin, ret, csp.dbGameFree.GetId()) return ret } - if p.scene != nil { - logger.Logger.Warnf("(csp *CoinScenePool) AudienceEnter[p.scene != nil] find snid:%v in scene:%v gameId:%v", p.SnId, p.scene.sceneId, p.scene.gameId) - return gamehallproto.OpResultCode_OPRC_Error - } - var scene *Scene if roomId != 0 { if s, ok := csp.scenes[int(roomId)]; ok { @@ -261,7 +305,8 @@ func (csp *CoinScenePool) AudienceEnter(p *Player, roomId int32, exclude []int32 } if scene.AudienceEnter(p, isChangeRoom) { - csp.OnPlayerEnter(p, scene) + logger.Logger.Infof("(csp *CoinScenePool) AudienceEnter snid:%v sceneid:%v gamefreeid:%v success", p.SnId, scene.sceneId, csp.ID()) + csp.onPlayerEnter(p, scene) return gamehallproto.OpResultCode_OPRC_Sucess } @@ -269,78 +314,14 @@ func (csp *CoinScenePool) AudienceEnter(p *Player, roomId int32, exclude []int32 return gamehallproto.OpResultCode_OPRC_NoFindDownTiceRoom } -// OnPlayerEnter 玩家进入房间完成 -func (csp *CoinScenePool) OnPlayerEnter(p *Player, scene *Scene) { +// onPlayerEnter 玩家进入房间完成 +func (csp *CoinScenePool) onPlayerEnter(p *Player, scene *Scene) { csp.players[p.SnId] = struct{}{} csp.policy.OnPlayerEnter(csp, p, scene) } -// PlayerLeave 玩家离开房间 -func (csp *CoinScenePool) PlayerLeave(p *Player, reason int) bool { - if p.scene == nil { - return true - } - if p.scene.csp != csp && p.scene == csp.scenes[p.scene.sceneId] { - logger.Logger.Error("bug") - } - if p.scene.csp != csp { - return false - } - if p.scene != csp.scenes[p.scene.sceneId] { - logger.Logger.Error("bug") - } - s, ok := csp.scenes[p.scene.sceneId] - if !ok || s == nil { - return false - } - if !s.HasPlayer(p) { - return false - } - - if !csp.policy.PlayerLeave(csp, p, reason) { - return false - } - - s.PlayerLeave(p, reason) - logger.Logger.Tracef("(csp *CoinScenePool) PlayerLeave snid:%v in scene:%v", p.SnId, s.sceneId) - - csp.policy.OnPlayerLeave(csp, s, p) - - csp.OnPlayerLeave(s, p) - return true -} - -// AudienceLeave 观众离开房间 -func (csp *CoinScenePool) AudienceLeave(p *Player, reason int) bool { - if p.scene == nil { - return true - } - if p.scene.csp != csp { - return false - } - s, ok := csp.scenes[p.scene.sceneId] - if !ok || s == nil { - return false - } - if !s.HasAudience(p) { - return false - } - - if !csp.policy.AudienceLeave(csp, p, reason) { - return false - } - - s.AudienceLeave(p, reason) - logger.Logger.Tracef("(csp *CoinScenePool) AudienceLeave snid:%v in scene:%v", p.SnId, s.sceneId) - - csp.policy.OnPlayerLeave(csp, s, p) - - csp.OnPlayerLeave(s, p) - return true -} - // OnPlayerLeave 离开房间完成 -func (csp *CoinScenePool) OnPlayerLeave(s *Scene, p *Player) { +func (csp *CoinScenePool) onPlayerLeave(s *Scene, p *Player) { if s == nil || p == nil { return } @@ -370,17 +351,68 @@ func (csp *CoinScenePool) OnPlayerLeave(s *Scene, p *Player) { } } -// OnDestroyScene 解散房间 -// 房间解散一定是游戏服确认的,worldsrv收到游戏房间解散消息后解散房间 -func (csp *CoinScenePool) OnDestroyScene(sceneId int) { +// playerLeave 玩家离开房间 +func (csp *CoinScenePool) playerLeave(p *Player, reason int) bool { + if p.scene != csp.scenes[p.scene.sceneId] { + logger.Logger.Error("bug") + } + s, ok := csp.scenes[p.scene.sceneId] + if !ok || s == nil { + return false + } + if !s.HasPlayer(p) { + return false + } + + if !csp.policy.PlayerLeave(csp, p, reason) { + return false + } + + s.PlayerLeave(p, reason) + logger.Logger.Tracef("(csp *CoinScenePool) PlayerLeave snid:%v in scene:%v", p.SnId, s.sceneId) + + csp.policy.OnPlayerLeave(csp, s, p) + + csp.onPlayerLeave(s, p) + return true +} + +// audienceLeave 观众离开房间 +func (csp *CoinScenePool) audienceLeave(p *Player, reason int) bool { + s, ok := csp.scenes[p.scene.sceneId] + if !ok || s == nil { + return false + } + if !s.HasAudience(p) { + return false + } + + if !csp.policy.AudienceLeave(csp, p, reason) { + return false + } + + s.AudienceLeave(p, reason) + logger.Logger.Tracef("(csp *CoinScenePool) AudienceLeave snid:%v in scene:%v", p.SnId, s.sceneId) + + csp.policy.OnPlayerLeave(csp, s, p) + + csp.onPlayerLeave(s, p) + return true +} + +// onDestroyScene 解散房间 +// 房间解散一定是游戏服确认的,worldsrv收到游戏房间解散消息后解散房间,此时房间内玩家应该都离开了 +// 或者游戏服异常断开触发房间解散,此时房间中还有人 +func (csp *CoinScenePool) onDestroyScene(sceneId int) { scene, ok := csp.scenes[sceneId] - if !ok { + if !ok || scene == nil { return } logger.Logger.Tracef("(csp *CoinScenePool) OnDestroyScene scene:%v", sceneId) // todo 是否需要优化 + // 游戏服异常断开,同步一次金币 for id := range scene.players { player := PlayerMgrSington.GetPlayerBySnId(id) if player != nil { @@ -407,96 +439,13 @@ func (csp *CoinScenePool) OnDestroyScene(sceneId int) { } csp.policy.OnDestroyScene(csp, sceneId) + for k := range scene.players { + delete(csp.players, k) + } + for k := range scene.audiences { + delete(csp.players, k) + } scene.csp = nil // 解除关联 delete(csp.scenes, sceneId) CoinSceneMgrSingleton.TouchCreateRoom(csp.platform, csp.dbGameFree.Id) } - -// PreCreateRoom 预创建房间 -func (csp *CoinScenePool) PreCreateRoom() { - if csp.platform == DefaultPlatform { - return - } - if p := PlatformMgrSingleton.GetPlatform(csp.platform); p == nil || p.Disable { - return - } - preCreateNum := int(csp.dbGameFree.GetCreateRoomNum()) - if preCreateNum <= 0 || model.GameParamData.ClosePreCreateRoom { - return - } - num := preCreateNum - csp.GetRoomNum(common.SceneMode_Public) - if num > 0 { - logger.Logger.Tracef("预创建房间 [inc:%v] platform:%v gameFreeId:%v", num, csp.platform, csp.dbGameFree.Id) - for i := 0; i < num; i++ { - scene := csp.policy.NewPreCreateScene(csp) - if scene != nil { - csp.AddScene(scene) - } - } - } -} - -func (csp *CoinScenePool) GetRoomNum(mode ...int) int { - tp := 0 - if len(mode) > 0 { - tp = mode[0] - } - - var num int - for _, scene := range csp.scenes { - if tp > 0 { - if scene.IsSceneMode(tp) { - num++ - } - } else { - num++ - } - } - return num -} - -// ListRoom 房间列表 -//func (csp *CoinScenePool) ListRoom(p *Player) bool { -// if p.scene != nil { -// logger.Logger.Warnf("(csp *CoinScenePool) PlayerListRoom[p.scene != nil] find snid:%v in scene:%v gameId:%v", p.SnId, p.scene.sceneId, p.scene.gameId) -// return false -// } -// -// if len(csp.scenes) == 0 { -// return false -// } -// -// pack := &gamehallproto.SCCoinSceneListRoom{ -// Id: csp.dbGameFree.Id, -// LimitCoin: csp.dbGameFree.LimitCoin, -// MaxCoinLimit: csp.dbGameFree.MaxCoinLimit, -// BaseScore: csp.dbGameFree.BaseScore, -// MaxScore: csp.dbGameFree.MaxChip, -// OtherIntParams: csp.dbGameFree.OtherIntParams, -// } -// -// maxPlayerNum := 0 -// for sceneId, s := range csp.scenes { -// data := &gamehallproto.CoinSceneInfo{ -// SceneId: proto.Int(sceneId), -// PlayerNum: proto.Int(len(s.players)), -// } -// pack.Datas = append(pack.Datas, data) -// maxPlayerNum = s.playerNum -// } -// pack.MaxPlayerNum = proto.Int(maxPlayerNum) -// proto.SetDefaults(pack) -// p.SendToClient(int(gamehallproto.CoinSceneGamePacketID_PACKET_SC_COINSCENE_LISTROOM), pack) -// return true -//} - -// GetHasTruePlayerSceneCnt 有真人的房间数量 -func (csp *CoinScenePool) GetHasTruePlayerSceneCnt() int { - cnt := 0 - for _, s := range csp.scenes { - if s.GetTruePlayerCnt() != 0 { - cnt++ - } - } - return cnt -} diff --git a/worldsrv/coinscenepool_base.go b/worldsrv/coinscenepool_base.go index 670d816..bdc02a9 100644 --- a/worldsrv/coinscenepool_base.go +++ b/worldsrv/coinscenepool_base.go @@ -157,7 +157,7 @@ func (this *BaseCoinScenePool) PlayerEnter(pool *CoinScenePool, p *Player, exclu } } else { //按类型匹配 //优先真人 - if scene == nil && len(scenes) != 0 && matchTrueManRule == MatchTrueManPriority { + if len(scenes) != 0 && matchTrueManRule == MatchTrueManPriority { var selScene []*Scene for _, value := range scenes { if value != nil { @@ -211,14 +211,14 @@ func (this *BaseCoinScenePool) AudienceLeave(pool *CoinScenePool, p *Player, rea func (this *BaseCoinScenePool) OnPlayerLeave(pool *CoinScenePool, s *Scene, p *Player) {} func (this *BaseCoinScenePool) NewScene(pool *CoinScenePool, p *Player) *Scene { - gameId := int(pool.dbGameRule.GetGameId()) + gameId := int(pool.dbGameFree.GetGameId()) gs := GameSessMgrSington.GetMinLoadSess(gameId) if gs == nil { logger.Logger.Warnf("Get %v game min session failed.", gameId) return nil } - gameMode := pool.dbGameRule.GetGameMode() + gameMode := pool.dbGameFree.GetGameMode() params := common.CopySliceInt32ToInt64(pool.dbGameRule.GetParams()) limitPlatform := PlatformMgrSingleton.GetPlatform(pool.platform) if limitPlatform == nil || !limitPlatform.Isolated { @@ -228,7 +228,7 @@ func (this *BaseCoinScenePool) NewScene(pool *CoinScenePool, p *Player) *Scene { sceneId := SceneMgrSingleton.GenOneCoinSceneId() scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Public, - 1, -1, params, gs, limitPlatform, pool.groupId, pool.dbGameFree, pool.id) + 1, -1, params, gs, limitPlatform, 0, pool.dbGameFree, pool.ID()) return scene } diff --git a/worldsrv/coinscenepool_local.go b/worldsrv/coinscenepool_local.go index d458859..09f6c84 100644 --- a/worldsrv/coinscenepool_local.go +++ b/worldsrv/coinscenepool_local.go @@ -233,7 +233,7 @@ func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene { } scene := SceneMgrSingleton.CreateLocalGameScene(p.SnId, sceneId, gameId, gameSite, common.SceneMode_Public, 1, common.CopySliceInt32ToInt64(params), - gs, limitPlatform, 0, pool.dbGameFree, baseScore, pool.groupId, pool.id) + gs, limitPlatform, 0, pool.dbGameFree, baseScore, 0, pool.ID()) return scene } @@ -285,7 +285,7 @@ func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene { } if baseScore != 0 { scene = SceneMgrSingleton.CreateLocalGameScene(0, sceneId, gameId, gameSite, common.SceneMode_Public, 1, common.CopySliceInt32ToInt64(params), - gs, limitPlatform, playerNum, pool.dbGameFree, baseScore, pool.groupId, pool.id) + gs, limitPlatform, playerNum, pool.dbGameFree, baseScore, 0, pool.ID()) if scene != nil { logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v baseScore:%v randIdx:%v", scene.gameId, scene.gameSite, baseScore, randIdx) } diff --git a/worldsrv/gamesessmgr.go b/worldsrv/gamesessmgr.go index 830ab6d..5dc0682 100644 --- a/worldsrv/gamesessmgr.go +++ b/worldsrv/gamesessmgr.go @@ -66,7 +66,7 @@ func (this *GameSessMgr) OnRegiste(s *netlib.Session) { } gs.OnRegiste() //尝试创建百人场 - HundredSceneMgrSington.TryCreateRoom() + HundredSceneMgrSingleton.TryCreateRoom() } } else if srvInfo.GetType() == srvlib.GateServiceType { logger.Logger.Warn("(this *GameSessMgr) OnRegiste (GateSrv):", s) diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index 835e4d7..2726c9d 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -10,383 +10,193 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/proto" - gamehall_proto "mongo.games.com/game/protocol/gamehall" - server_proto "mongo.games.com/game/protocol/server" + gamehallproto "mongo.games.com/game/protocol/gamehall" + serverproto "mongo.games.com/game/protocol/server" "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/srvdata" ) const ( - HundredSceneType_Primary int = iota //初级 - HundredSceneType_Mid //中级 - HundredSceneType_Senior //高级 - HundredSceneType_Professor //专家 - HundredSceneType_Experience //体验场 - HundredSceneType_Max + HundredSceneOPEnter int32 = iota //进入 + HundredSceneOPLeave //离开 + HundredSceneOPChange //换桌 ) -const ( - HundredSceneOp_Enter int32 = iota //进入 - HundredSceneOp_Leave //离开 - HundredSceneOp_Change //换桌 - HundredSceneOp_Audience //观战 -) - -var HundredSceneMgrSington = &HundredSceneMgr{ - //分平台管理 +var HundredSceneMgrSingleton = &HundredSceneMgr{ scenesOfPlatform: make(map[string]map[int32]*Scene), - platformOfScene: make(map[int32]string), - //分组管理 - scenesOfGroup: make(map[int32]map[int32]*Scene), - groupOfScene: make(map[int32]int32), - playerIning: make(map[int32]int32), } type HundredSceneMgr struct { - //分平台管理 scenesOfPlatform map[string]map[int32]*Scene // platform:gamefreeid:房间 - platformOfScene map[int32]string // sceneid:platform - //分组管理 - scenesOfGroup map[int32]map[int32]*Scene // groupid:gamefreeid:房间 - groupOfScene map[int32]int32 // sceneid:groupid - playerIning map[int32]int32 // snid:sceneid } -func (this *HundredSceneMgr) GetPlatformNameBySceneId(sceneid int32) (string, bool) { - if name, exist := this.platformOfScene[sceneid]; exist { - return name, exist - } - if _, exist := this.groupOfScene[sceneid]; exist { - s := SceneMgrSingleton.GetScene(int(sceneid)) - if s != nil && s.limitPlatform != nil { - return s.limitPlatform.IdStr, true - } - } - return DefaultPlatform, false -} - -func (this *HundredSceneMgr) RebindPlayerSnId(oldSnId, newSnId int32) { - if id, exist := this.playerIning[oldSnId]; exist { - delete(this.playerIning, oldSnId) - this.playerIning[newSnId] = id - } - for _, ss := range this.scenesOfPlatform { - for _, s := range ss { - s.RebindPlayerSnId(oldSnId, newSnId) - } - } - for _, ss := range this.scenesOfGroup { - for _, s := range ss { - s.RebindPlayerSnId(oldSnId, newSnId) - } - } -} - -func (this *HundredSceneMgr) PlayerEnter(p *Player, id int32) gamehall_proto.OpResultCode_Hundred { - logger.Logger.Tracef("(this *HundredSceneMgr) PlayerEnter snid:%v id:%v", p.SnId, id) - if oid, exist := this.playerIning[p.SnId]; exist { - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerEnter:%v snid:%v find in id:%v PlayerEnter return false", id, p.SnId, oid) - return gamehall_proto.OpResultCode_Hundred_OPRC_Error_Hundred +// PlayerEnter 玩家进入场次 +// id 场次id +func (this *HundredSceneMgr) PlayerEnter(p *Player, id int32) gamehallproto.OpResultCode_Hundred { + logger.Logger.Tracef("HundredSceneMgr PlayerEnter snid:%v gamefreeid:%v", p.SnId, id) + if p.isDelete { + return gamehallproto.OpResultCode_Hundred_OPRC_RoomHadClosed_Hundred } - if p.scene != nil { - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerEnter:%v snid:%v find in id:%v PlayerEnter return false", id, p.SnId, p.scene.sceneId) - return gamehall_proto.OpResultCode_Hundred_OPRC_Error_Hundred - } - - if p.isDelete { //删档用户不让进游戏 - return gamehall_proto.OpResultCode_Hundred_OPRC_RoomHadClosed_Hundred + if this.InHundredScene(p) { + logger.Logger.Warnf("HundredSceneMgr PlayerEnter snid:%v find in gamefreeid:%v roomId:%v", p.SnId, p.scene.dbGameFree.Id, p.scene.sceneId) + return gamehallproto.OpResultCode_Hundred_OPRC_Error_Hundred } //多平台支持 - var limitPlatform *Platform - platformName := DefaultPlatform - platform := PlatformMgrSingleton.GetPlatform(p.Platform) - if platform != nil && platform.Isolated { - platformName = platform.IdStr - limitPlatform = platform - } else { - limitPlatform = PlatformMgrSingleton.GetPlatform(DefaultPlatform) + platform := p.GetPlatform() + if platform == nil { + return gamehallproto.OpResultCode_Hundred_OPRC_RoomHadClosed_Hundred } - gps := PlatformMgrSingleton.GetGameFree(limitPlatform.IdStr, id) + gps := PlatformMgrSingleton.GetGameFree(platform.IdStr, id) if gps == nil { - return gamehall_proto.OpResultCode_Hundred_OPRC_RoomHadClosed_Hundred + return gamehallproto.OpResultCode_Hundred_OPRC_RoomHadClosed_Hundred } - if gps.GroupId != 0 { //按分组进入场景游戏 - pgg := PlatformGameGroupMgrSington.GetGameGroup(gps.GroupId) - if pgg != nil { - if _, ok := this.scenesOfGroup[gps.GroupId]; !ok { - this.scenesOfGroup[gps.GroupId] = make(map[int32]*Scene) - - } - if ss, ok := this.scenesOfGroup[gps.GroupId]; ok { - if s, ok := ss[id]; !ok { - s = this.CreateNewScene(id, gps.GroupId, limitPlatform, pgg.DbGameFree) - if s != nil { - ss[id] = s - this.groupOfScene[int32(s.sceneId)] = gps.GroupId - logger.Logger.Tracef("(this *HundredSceneMgr) PlayerEnter(groupid=%v) Create %v scene success.", gps.GroupId, id) - } else { - logger.Logger.Tracef("(this *HundredSceneMgr) PlayerEnter(groupid=%v) Create %v scene failed.", gps.GroupId, id) - } - } - //尝试进入 - if s, ok := ss[id]; ok && s != nil { - if s.PlayerEnter(p, -1, true) { - this.OnPlayerEnter(p, id) - return gamehall_proto.OpResultCode_Hundred_OPRC_Sucess_Hundred - } else { - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerEnter(groupid=%v) enter %v scene failed.", gps.GroupId, id) - } - } else { - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerEnter(groupid=%v) get %v scene failed.", gps.GroupId, id) - } - } - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerEnter(groupid=%v) snid:%v find in id:%v csp.PlayerEnter return false", gps.GroupId, p.SnId, id) - return gamehall_proto.OpResultCode_Hundred_OPRC_Error_Hundred - } - } //没有场景,尝试创建 - if _, ok := this.scenesOfPlatform[platformName]; !ok { - this.scenesOfPlatform[platformName] = make(map[int32]*Scene) + if _, ok := this.scenesOfPlatform[platform.IdStr]; !ok { + this.scenesOfPlatform[platform.IdStr] = make(map[int32]*Scene) } - if ss, ok := this.scenesOfPlatform[platformName]; ok { - if s, ok := ss[id]; !ok { - s = this.CreateNewScene(id, gps.GroupId, limitPlatform, gps.DbGameFree) - if s != nil { - ss[id] = s - this.platformOfScene[int32(s.sceneId)] = platformName - logger.Logger.Tracef("(this *HundredSceneMgr) PlayerEnter(platform=%v) Create %v scene success.", platformName, id) - } else { - logger.Logger.Tracef("(this *HundredSceneMgr) PlayerEnter(platform=%v) Create %v scene failed.", platformName, id) - } - } - //尝试进入 - if s, ok := ss[id]; ok && s != nil { - if s.PlayerEnter(p, -1, true) { - this.OnPlayerEnter(p, id) - return gamehall_proto.OpResultCode_Hundred_OPRC_Sucess_Hundred - } else { - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerEnter(platform=%v) enter %v scene failed.", platformName, id) - } + ss := this.scenesOfPlatform[platform.IdStr] + if s, ok := ss[id]; !ok || s == nil { + s = this.CreateNewScene(id, gps.GroupId, platform, gps.DbGameFree) + if s != nil { + ss[id] = s + s.hp = this + logger.Logger.Infof("HundredSceneMgr PlayerEnter(platform=%v snid=%v) Create %v scene success.", platform.IdStr, p.SnId, id) } else { - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerEnter(platform=%v) get %v scene failed.", platformName, id) + logger.Logger.Errorf("HundredSceneMgr PlayerEnter(platform=%v snid=%v) Create %v scene failed.", platform.IdStr, p.SnId, id) } } - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerEnter(platform=%v) snid:%v find in id:%v csp.PlayerEnter return false", platformName, p.SnId, id) - return gamehall_proto.OpResultCode_Hundred_OPRC_SceneServerMaintain_Hundred -} - -func (this *HundredSceneMgr) OnPlayerEnter(p *Player, id int32) { - this.playerIning[p.SnId] = id + //尝试进入 + if s, ok := ss[id]; ok && s != nil { + if s.PlayerEnter(p, -1, true) { + logger.Logger.Infof("HundredSceneMgr PlayerEnter(platform=%v snid=%v) enter %v scene success.", platform.IdStr, p.SnId, id) + return gamehallproto.OpResultCode_Hundred_OPRC_Sucess_Hundred + } else { + logger.Logger.Errorf("HundredSceneMgr PlayerEnter(platform=%v snid=%v) enter %v scene failed.", platform.IdStr, p.SnId, id) + } + } else { + logger.Logger.Errorf("HundredSceneMgr PlayerEnter(platform=%v) get %v scene failed.", platform.IdStr, id) + } + + return gamehallproto.OpResultCode_Hundred_OPRC_SceneServerMaintain_Hundred } +// PlayerLeave 离开房间 +// 游戏服通知玩家离开房间 func (this *HundredSceneMgr) PlayerLeave(p *Player, reason int) bool { - if p == nil { + if p == nil || p.scene == nil || p.scene.hp == nil { return false } - if _, ok := this.playerIning[p.SnId]; ok { - if p.scene != nil { - p.scene.PlayerLeave(p, reason) - } else { - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerLeave(%v) found scene=nil", p.SnId) - delete(this.playerIning, p.SnId) - } - return true - } else { - if p.scene != nil && p.scene.IsHundredScene() { - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerLeave(%v) exception scene=%v gameid=%v", p.SnId, p.scene.sceneId, p.scene.gameId) - p.scene.PlayerLeave(p, reason) - return true - } - } - logger.Logger.Warnf("(this *HundredSceneMgr) PlayerLeave(%v) not found in hundred scene", p.SnId) + + p.scene.PlayerLeave(p, reason) + return false } -func (this *HundredSceneMgr) PlayerTryLeave(p *Player) gamehall_proto.OpResultCode_Hundred { - if p.scene == nil || p.scene.gameSess == nil { - logger.Logger.Tracef("(csm *HundredSceneMgr) PlayerTryLeave p.scene == nil || p.scene.gameSess == nil snid:%v ", p.SnId) - return 1 +// PlayerTryLeave 玩家尝试离开房间 +// 给游戏服发离开消息 +func (this *HundredSceneMgr) PlayerTryLeave(p *Player) gamehallproto.OpResultCode_Hundred { + if !this.InHundredScene(p) { + logger.Logger.Tracef("(this *HundredSceneMgr) PlayerTryLeave !csm.InCoinScene(p) snid:%v ", p.SnId) + return gamehallproto.OpResultCode_Hundred_OPRC_Sucess_Hundred } - //通知gamesrv托管 - if _, ok := this.playerIning[p.SnId]; ok { - pack := &gamehall_proto.CSLeaveRoom{Mode: proto.Int(0)} - proto.SetDefaults(pack) - common.TransmitToServer(p.sid, int(gamehall_proto.GameHallPacketID_PACKET_CS_LEAVEROOM), pack, p.scene.gameSess.Session) - } - return 0 + + pack := &gamehallproto.CSLeaveRoom{Mode: proto.Int(0)} + common.TransmitToServer(p.sid, int(gamehallproto.GameHallPacketID_PACKET_CS_LEAVEROOM), pack, p.scene.gameSess.Session) + return gamehallproto.OpResultCode_Hundred_OPRC_Sucess_Hundred // ??? } -func (this *HundredSceneMgr) OnPlayerLeave(p *Player) { - delete(this.playerIning, p.SnId) -} +// OnDestroyScene 房间销毁 +func (this *HundredSceneMgr) OnDestroyScene(sceneId int) { + s := SceneMgrSingleton.GetScene(sceneId) + if s == nil { + return + } + plt := SceneMgrSingleton.GetPlatformBySceneId(sceneId) + if plt == "" { + return + } + if ss, ok := this.scenesOfPlatform[plt]; ok { + for id, scene := range ss { + if scene.sceneId == sceneId { + if scene != s { + logger.Logger.Errorf("bug") + } -func (this *HundredSceneMgr) OnDestroyScene(sceneid int) { - var s *Scene - if platformName, ok := this.platformOfScene[int32(sceneid)]; ok { - if ss, ok := this.scenesOfPlatform[platformName]; ok { - for id, scene := range ss { - if scene.sceneId == sceneid { - s = scene - //删除玩家 - for pid, hid := range this.playerIning { - if hid == id { - delete(this.playerIning, pid) - //TODO 非正常删除房间时,尝试同步金币 - player := PlayerMgrSington.GetPlayerBySnId(pid) - if player != nil { - if !player.IsRob { - ctx := scene.GetPlayerGameCtx(player.SnId) - if ctx != nil { - //发送一个探针,等待ack后同步金币 - player.TryRetrieveLostGameCoin(sceneid) - - logger.Logger.Warnf("(this *HundredSceneMgr) OnDestroyScene(sceneid:%v) snid:%v SyncGameCoin", sceneid, player.SnId) - } - } + //删除玩家 + for _, v := range scene.players { + if v != nil { + if !v.IsRob { + ctx := scene.GetPlayerGameCtx(v.SnId) + if ctx != nil { + //发送一个探针,等待ack后同步金币 + v.TryRetrieveLostGameCoin(sceneId) + logger.Logger.Warnf("(this *HundredSceneMgr) OnDestroyScene(sceneid:%v) snid:%v SyncGameCoin", sceneId, v.SnId) } } } - delete(ss, id) - break } + + scene.hp = nil + delete(ss, id) + break } } } - if groupId, ok := this.groupOfScene[int32(sceneid)]; ok { - if ss, ok := this.scenesOfGroup[groupId]; ok { - for id, scene := range ss { - if scene.sceneId == sceneid { - s = scene - //删除玩家 - for pid, hid := range this.playerIning { - if hid == id { - delete(this.playerIning, pid) - //TODO 非正常删除房间时,尝试同步金币 - player := PlayerMgrSington.GetPlayerBySnId(pid) - if player != nil { - if !player.IsRob { - ctx := scene.GetPlayerGameCtx(player.SnId) - if ctx != nil { - //发送一个探针,等待ack后同步金币 - player.TryRetrieveLostGameCoin(sceneid) - logger.Logger.Warnf("(this *HundredSceneMgr) OnDestroyScene(sceneid:%v) snid:%v SyncGameCoin", sceneid, player.SnId) - } - } - } - } - } - delete(ss, id) - break - } - } - } - } - - this.PreCreateGame(s.limitPlatform.IdStr, []int32{s.dbGameFree.Id}) + this.tryCreateRoom(plt, s.dbGameFree.Id) } func (this *HundredSceneMgr) GetPlayerNums(p *Player, gameId, gameMode int32) []int32 { //多平台支持 - platformName := DefaultPlatform - platform := PlatformMgrSingleton.GetPlatform(p.Platform) - if platform != nil && platform.Isolated { - platformName = platform.IdStr - } else if p.Platform != DefaultPlatform { - platform = PlatformMgrSingleton.GetPlatform(DefaultPlatform) - } - - var nums [HundredSceneType_Max]int32 - wantNum := []int32{80, 50, 30, 20, 0} - for i := 0; i < HundredSceneType_Max; i++ { + platform := p.GetPlatform() + var nums [10]int32 + wantNum := [10]int32{80, 50, 30, 20, 10, 10, 10, 10, 10, 10} + for i := 0; i < 10; i++ { if wantNum[i]/2 > 0 { nums[i] = rand.Int31n(wantNum[i]/2) + wantNum[i] } } - if platform == nil { return nums[:] } - ids, _ := srvdata.GameFreeMgr.GetGameFreeIds(gameId, gameMode) for _, id := range ids { gps := PlatformMgrSingleton.GetGameFree(platform.IdStr, id) if gps != nil { - if gps.GroupId != 0 { - if ss, exist := this.scenesOfGroup[gps.GroupId]; exist { - for _, s := range ss { - if s.paramsEx[0] == id { - dbGame := srvdata.PBDB_GameFreeMgr.GetData(s.paramsEx[0]) - sceneType := int(dbGame.GetSceneType()) - 1 - if sceneType == -2 { - //体验场 - sceneType = HundredSceneType_Experience - } - truePlayerCount := int32(s.GetPlayerCnt()) - - //获取fake用户数量 - var fakePlayerCount int32 - //if truePlayerCount >= 21 { - // correctNum := dbGame.GetCorrectNum() - // correctRate := dbGame.GetCorrectRate() - // fakePlayerCount = correctNum + truePlayerCount*correctRate/100 + dbGame.GetDeviation() - //} - if sceneType >= 0 && sceneType < HundredSceneType_Max { - nums[sceneType] += int32(truePlayerCount + fakePlayerCount) - } - break - } - } - } - } else { - if ss, ok := this.scenesOfPlatform[platformName]; ok { - for _, s := range ss { - if s.paramsEx[0] == id { - dbGame := srvdata.PBDB_GameFreeMgr.GetData(s.paramsEx[0]) - sceneType := int(dbGame.GetSceneType()) - 1 - if sceneType == -2 { - //体验场 - sceneType = HundredSceneType_Experience - } - truePlayerCount := int32(s.GetPlayerCnt()) - - //获取fake用户数量 - var fakePlayerCount int32 - //if truePlayerCount >= 21 { - // correctNum := dbGame.GetCorrectNum() - // correctRate := dbGame.GetCorrectRate() - // fakePlayerCount = correctNum + truePlayerCount*correctRate/100 + dbGame.GetDeviation() - //} - if sceneType >= 0 && sceneType < HundredSceneType_Max { - nums[sceneType] += int32(truePlayerCount + fakePlayerCount) - } - break - } + if ss, ok := this.scenesOfPlatform[platform.IdStr]; ok { + if s, exist := ss[id]; exist && s.dbGameFree != nil { + sceneType := s.dbGameFree.GetSceneType() - 1 + if sceneType >= 0 && int(sceneType) < len(nums) { + nums[sceneType] += int32(s.GetPlayerCnt()) } } } } } + if len(ids) <= 10 { + return nums[:len(ids)] + } return nums[:] } func (this *HundredSceneMgr) InHundredScene(p *Player) bool { if p == nil { - logger.Logger.Tracef("(this *HundredSceneMgr) InHundredScene p == nil snid:%v ", p.SnId) return false } - if _, ok := this.playerIning[p.SnId]; ok { - return true + if p.scene == nil { + return false } - logger.Logger.Tracef("(csm *HundredSceneMgr) InHundredScene false snid:%v ", p.SnId) - return false + if p.scene.hp == nil { + return false + } + return true } -func (this *HundredSceneMgr) CreateNewScene(id, groupId int32, limitPlatform *Platform, dbGameFree *server_proto.DB_GameFree) *Scene { +func (this *HundredSceneMgr) CreateNewScene(id, groupId int32, limitPlatform *Platform, dbGameFree *serverproto.DB_GameFree) *Scene { if dbGameFree != nil { dbGameRule := srvdata.PBDB_GameRuleMgr.GetData(dbGameFree.GetGameRule()) if dbGameRule != nil { @@ -396,16 +206,11 @@ func (this *HundredSceneMgr) CreateNewScene(id, groupId int32, limitPlatform *Pl sceneId := SceneMgrSingleton.GenOneHundredSceneId() gameMode := dbGameRule.GetGameMode() params := common.CopySliceInt32ToInt64(dbGameRule.GetParams()) - //SceneType := dbGameFree.GetSceneType() - scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Public, 1, -1, params, gs, limitPlatform, groupId, dbGameFree, id) if scene != nil { + logger.Logger.Infof("Create hundred scene %v-%v success.", gameId, sceneId) scene.hallId = id - //移动到SceneMgr中集中处理 - //if !scene.IsMatchScene() { - // //平台水池设置 - // gs.DetectCoinPoolSetting(limitPlatform.Name, scene.hallId, scene.groupId) - //} + scene.hp = this return scene } else { logger.Logger.Errorf("Create hundred scene %v-%v failed.", gameId, sceneId) @@ -419,135 +224,144 @@ func (this *HundredSceneMgr) CreateNewScene(id, groupId int32, limitPlatform *Pl } else { logger.Logger.Errorf("Game free data %v no found.", id) } - return nil } -func (this *HundredSceneMgr) TryCreateRoom() { - if model.GameParamData.HundredScenePreCreate { - arr := srvdata.PBDB_GameFreeMgr.Datas.GetArr() - for _, dbGame := range arr { - if dbGame.GetGameId() <= 0 { - continue - } - if common.IsHundredType(dbGame.GetGameType()) { //百人场 - id := dbGame.GetId() - for k, ss := range this.scenesOfPlatform { - if _, exist := ss[id]; !exist { - limitPlatform := PlatformMgrSingleton.GetPlatform(k) - if limitPlatform == nil || !limitPlatform.Isolated { - limitPlatform = PlatformMgrSingleton.GetPlatform(DefaultPlatform) - k = DefaultPlatform - continue - } - gps := PlatformMgrSingleton.GetGameFree(limitPlatform.IdStr, id) - if gps != nil && gps.GroupId == 0 && gps.Status { - scene := this.CreateNewScene(id, gps.GroupId, limitPlatform, gps.DbGameFree) - logger.Logger.Trace("(this *HundredSceneMgr) TryCreateRoom(platform) ", id, k, scene) - if scene != nil { - this.platformOfScene[int32(scene.sceneId)] = k - ss[id] = scene - } - } - } - } - } - } - } -} -func (this *HundredSceneMgr) PreCreateGame(platform string, createIds []int32) { - limitPlatform := PlatformMgrSingleton.GetPlatform(platform) +func (this *HundredSceneMgr) tryCreateRoom(plt string, id ...int32) { + limitPlatform := PlatformMgrSingleton.GetPlatform(plt) if limitPlatform == nil || !limitPlatform.Isolated { limitPlatform = PlatformMgrSingleton.GetPlatform(DefaultPlatform) } - if this.scenesOfPlatform[platform] == nil { - this.scenesOfPlatform[platform] = make(map[int32]*Scene) + if this.scenesOfPlatform[plt] == nil { + this.scenesOfPlatform[plt] = make(map[int32]*Scene) } - //var platformName string - platformData := PlatformMgrSingleton.GetPlatform(platform) - if platformData != nil && platformData.Isolated { - //platformName = platformData.Name - } else if platform != DefaultPlatform { - platformData = PlatformMgrSingleton.GetPlatform(DefaultPlatform) - } - if platformData.IdStr == DefaultPlatform { + if limitPlatform.IdStr == DefaultPlatform { return } - if model.GameParamData.HundredScenePreCreate { - //不创建已经存在的场景 - for _, id := range createIds { - dbGame := srvdata.PBDB_GameFreeMgr.GetData(id) - if common.IsHundredType(dbGame.GetGameType()) { - gps := PlatformMgrSingleton.GetGameFree(platformData.IdStr, id) - if gps != nil && gps.Status { - if gps.GroupId != 0 { - if this.scenesOfGroup[gps.GroupId] != nil && this.scenesOfGroup[gps.GroupId][id] != nil { - continue - } else { - scene := this.CreateNewScene(dbGame.GetId(), gps.GroupId, limitPlatform, gps.DbGameFree) - if scene != nil { - this.scenesOfGroup[gps.GroupId][id] = scene - this.groupOfScene[int32(scene.sceneId)] = gps.GroupId - } - } - } else { - if this.scenesOfPlatform[platform] != nil && this.scenesOfPlatform[platform][dbGame.GetId()] != nil { - continue - } else { - scene := this.CreateNewScene(dbGame.GetId(), gps.GroupId, limitPlatform, gps.DbGameFree) - if scene != nil { - this.platformOfScene[int32(scene.sceneId)] = platform - this.scenesOfPlatform[platform][dbGame.GetId()] = scene - } - } - } - } - } + f := func(i int32) { + if this.scenesOfPlatform[plt][i] != nil { + return + } + gps := PlatformMgrSingleton.GetGameFree(plt, i) + if !common.IsHundredType(gps.GetDbGameFree().GetGameType()) { + return + } + scene := this.CreateNewScene(i, gps.GroupId, limitPlatform, gps.DbGameFree) + if scene != nil { + this.scenesOfPlatform[plt][i] = scene + scene.hp = this + logger.Logger.Infof("HundredSceneMgr PreCreateRoom Platform:%v Id:%v", plt, i) + } + } + + if len(id) == 0 { + // 所有百人场 + for _, vv := range srvdata.PBDB_GameFreeMgr.Datas.GetArr() { + f(vv.GetId()) + } + } else { + for _, v := range id { + f(v) } } } -func (this *HundredSceneMgr) OnPlatformCreate(p *Platform) { - if p != nil && p.Isolated && p.IdStr != DefaultPlatform { - if _, exist := this.scenesOfPlatform[p.IdStr]; !exist { - this.scenesOfPlatform[p.IdStr] = make(map[int32]*Scene) - if model.GameParamData.HundredScenePreCreate { - arr := srvdata.PBDB_GameFreeMgr.Datas.GetArr() - for _, dbGame := range arr { - if common.IsHundredType(dbGame.GetGameType()) { //百人场 - id := dbGame.GetId() - gps := PlatformMgrSingleton.GetGameFree(p.IdStr, id) - if gps != nil { - if gps.GroupId != 0 { - if ss, ok := this.scenesOfGroup[gps.GroupId]; ok { - if _, exist := ss[id]; !exist { - pgg := PlatformGameGroupMgrSington.GetGameGroup(gps.GroupId) - if pgg != nil { - scene := this.CreateNewScene(id, gps.GroupId, p, pgg.DbGameFree) - logger.Logger.Trace("(this *HundredSceneMgr) TryCreateRoom(group) ", id, gps.GroupId, scene) - if scene != nil { - ss[id] = scene - } - } - } - } - } else { - if ss, ok := this.scenesOfPlatform[p.IdStr]; ok { - if _, exist := ss[id]; !exist { - scene := this.CreateNewScene(id, gps.GroupId, p, gps.DbGameFree) - logger.Logger.Trace("(this *HundredSceneMgr) TryCreateRoom(platform) ", id, p.Name, scene) - if scene != nil { - ss[id] = scene - } - } - } - } - } - } + +// TryCreateRoom 预创建房间 +func (this *HundredSceneMgr) TryCreateRoom() { + if !model.GameParamData.HundredScenePreCreate { + return + } + + for _, v := range PlatformMgrSingleton.GetPlatforms() { + this.tryCreateRoom(v.IdStr) + } +} + +func (this *HundredSceneMgr) OnPlatformChangeIsolated(p *Platform, isolated bool) { + if p == nil { + return + } + if isolated { //孤立 + this.OnPlatformCreate(p) //预创建场景 + } else { + this.OnPlatformDestroy(p) + } +} + +func (this *HundredSceneMgr) GetPlatformSceneByGameFreeId(platform string, gameFreeIds []int32) []*Scene { + platformName := DefaultPlatform + platformData := PlatformMgrSingleton.GetPlatform(platform) + if platformData != nil && platformData.Isolated { + platformName = platformData.IdStr + } else if platform != DefaultPlatform { + platformData = PlatformMgrSingleton.GetPlatform(DefaultPlatform) + } + + if platformData == nil { + return nil + } + + var scenes []*Scene + for _, id := range gameFreeIds { + gps := PlatformMgrSingleton.GetGameFree(platformData.IdStr, id) + if gps != nil { + if ss, ok := this.scenesOfPlatform[platformName]; ok { + if s, exist := ss[id]; exist && s != nil { + scenes = append(scenes, s) } } } } + + return scenes +} + +func (this *HundredSceneMgr) GetPlatformScene(platform string, gameId int32) []*Scene { + gameFreeIds := gameStateMgr.gameIds[gameId] + gameScenes := this.GetPlatformSceneByGameFreeId(platform, gameFreeIds) + if len(gameScenes) != len(gameFreeIds) { + var createIds []int32 + for _, gfi := range gameFreeIds { + bFind := false + for _, s := range gameScenes { + if s.dbGameFree.GetId() == gfi { + bFind = true + break + } + } + if !bFind { + createIds = append(createIds, gfi) + } + } + if len(createIds) > 0 { + this.tryCreateRoom(platform, createIds...) + gameScenes = this.GetPlatformSceneByGameFreeId(platform, gameFreeIds) + } + } + return gameScenes +} + +func (this *HundredSceneMgr) ModuleName() string { + return "HundredSceneMgr" +} + +func (this *HundredSceneMgr) Init() { + this.TryCreateRoom() +} + +func (this *HundredSceneMgr) Update() { + +} + +func (this *HundredSceneMgr) Shutdown() { + module.UnregisteModule(this) +} + +func (this *HundredSceneMgr) OnPlatformCreate(p *Platform) { + if model.GameParamData.HundredScenePreCreate { + this.tryCreateRoom(p.IdStr) + } } func (this *HundredSceneMgr) OnPlatformDestroy(p *Platform) { @@ -563,34 +377,12 @@ func (this *HundredSceneMgr) OnPlatformDestroy(p *Platform) { } } -func (this *HundredSceneMgr) OnPlatformChangeIsolated(p *Platform, isolated bool) { - if p != nil { - if isolated { //孤立 - this.OnPlatformCreate(p) //预创建场景 - } else { - if ss, ok := this.scenesOfPlatform[p.IdStr]; ok { - var ids []int - for _, scene := range ss { - ids = append(ids, scene.sceneId) - } - SceneMgrSingleton.DoDelete(ids, true) - } - } - } -} - func (this *HundredSceneMgr) OnPlatformChangeDisabled(p *Platform, disabled bool) { if p == nil { return } if disabled { - if ss, ok := this.scenesOfPlatform[p.IdStr]; ok { - var ids []int - for _, scene := range ss { - ids = append(ids, scene.sceneId) - } - SceneMgrSingleton.DoDelete(ids, true) - } + this.OnPlatformDestroy(p) } } @@ -598,14 +390,6 @@ func (this *HundredSceneMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCf if p == nil || newCfg == nil { return } - if oldCfg.GroupId != newCfg.GroupId || oldCfg.GroupId != 0 { - if scenes, exist := this.scenesOfGroup[oldCfg.GroupId]; exist { - if s, ok := scenes[newCfg.DbGameFree.Id]; ok { - s.DoDelete(false) - } - } - return - } if scenes, exist := this.scenesOfPlatform[p.IdStr]; exist { if s, ok := scenes[newCfg.DbGameFree.Id]; ok { s.DoDelete(false) @@ -614,99 +398,7 @@ func (this *HundredSceneMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCf } func (this *HundredSceneMgr) OnGameGroupUpdate(oldCfg, newCfg *webapi.GameConfigGroup) { - if newCfg == nil { - return - } - if scenes, exist := this.scenesOfGroup[newCfg.Id]; exist { - if s, ok := scenes[newCfg.DbGameFree.Id]; ok { - needDestroy := false - if s.dbGameFree.GetBot() != newCfg.DbGameFree.GetBot() || - s.dbGameFree.GetBaseScore() != newCfg.DbGameFree.GetBaseScore() || - s.dbGameFree.GetLimitCoin() != newCfg.DbGameFree.GetLimitCoin() || - s.dbGameFree.GetMaxCoinLimit() != newCfg.DbGameFree.GetMaxCoinLimit() || - !common.SliceInt64Equal(s.dbGameFree.GetRobotTakeCoin(), newCfg.DbGameFree.GetRobotTakeCoin()) || - !common.SliceInt64Equal(s.dbGameFree.GetRobotLimitCoin(), newCfg.DbGameFree.GetRobotLimitCoin()) { - needDestroy = true - } - if needDestroy { - SceneMgrSingleton.DoDelete([]int{s.sceneId}, true) - } - } - } -} -func (this *HundredSceneMgr) GetPlatformSceneByGameFreeId(platform string, gameFreeIds []int32) []*Scene { - platformName := DefaultPlatform - platformData := PlatformMgrSingleton.GetPlatform(platform) - if platformData != nil && platformData.Isolated { - platformName = platformData.IdStr - } else if platform != DefaultPlatform { - platformData = PlatformMgrSingleton.GetPlatform(DefaultPlatform) - } - gameScenes := []*Scene{} - for _, id := range gameFreeIds { - gps := PlatformMgrSingleton.GetGameFree(platformData.IdStr, id) - if gps != nil { - if gps.GroupId != 0 { - if ss, exist := this.scenesOfGroup[gps.GroupId]; exist { - if s, exist := ss[id]; exist && s != nil { - gameScenes = append(gameScenes, s) - } - } - } else { - if ss, ok := this.scenesOfPlatform[platformName]; ok { - if s, exist := ss[id]; exist && s != nil { - gameScenes = append(gameScenes, s) - } - } - } - } - } - return gameScenes -} -func (this *HundredSceneMgr) GetPlatformScene(platform string, gameid int32) []*Scene { - gameFreeIds := gameStateMgr.gameIds[gameid] - gameScenes := this.GetPlatformSceneByGameFreeId(platform, gameFreeIds) - if len(gameScenes) != len(gameFreeIds) { - createIds := []int32{} - for _, gfi := range gameFreeIds { - bFind := false - for _, s := range gameScenes { - if s.dbGameFree.GetId() == gfi { - bFind = false - break - } - } - if !bFind { - createIds = append(createIds, gfi) - } - } - if len(createIds) > 0 { - this.PreCreateGame(platform, createIds) - gameScenes = this.GetPlatformSceneByGameFreeId(platform, gameFreeIds) - } - } - return gameScenes -} -func (this *HundredSceneMgr) ModuleName() string { - return "HundredSceneMgr" -} - -func (this *HundredSceneMgr) Init() { - for _, platform := range PlatformMgrSingleton.GetPlatforms() { - if platform.Isolated || platform.IdStr == DefaultPlatform { - this.scenesOfPlatform[platform.IdStr] = make(map[int32]*Scene) - } - } -} - -// 撮合 -func (this *HundredSceneMgr) Update() { - -} - -func (this *HundredSceneMgr) Shutdown() { - module.UnregisteModule(this) } func (this *HundredSceneMgr) OnPlatformDestroyByGameFreeId(p *Platform, gameFreeId int32) { @@ -723,8 +415,9 @@ func (this *HundredSceneMgr) OnPlatformDestroyByGameFreeId(p *Platform, gameFree SceneMgrSingleton.DoDelete(ids, true) } } + func init() { - module.RegisteModule(HundredSceneMgrSington, time.Second*5, 0) - PlatformMgrSingleton.RegisterObserver(HundredSceneMgrSington) - PlatformGameGroupMgrSington.RegisteObserver(HundredSceneMgrSington) + module.RegisteModule(HundredSceneMgrSingleton, time.Second*5, 0) + PlatformMgrSingleton.RegisterObserver(HundredSceneMgrSingleton) + PlatformGameGroupMgrSington.RegisteObserver(HundredSceneMgrSingleton) } diff --git a/worldsrv/player.go b/worldsrv/player.go index ac39349..2541b75 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -3686,8 +3686,6 @@ func (this *Player) TryRetrieveLostGameCoin(sceneid int) { logProbe.SeqNo = this.GameCoinTs logProbe.RoomId = int32(sceneid) LogChannelSingleton.WriteLog(logProbe) - //先把玩家身上的钱清掉 - //this.Coin = 0 this.SendDiffData() } diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 3a7e554..d885720 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -105,7 +105,8 @@ type Scene struct { BaseScore int32 //tienlen游戏底分 matchId int64 //比赛场id - csp *CoinScenePool // 所在场景池 + csp *CoinScenePool // 所在场景池 + hp *HundredSceneMgr // 百人场房间池 } // NewScene 创建房间 @@ -276,8 +277,7 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { case this.IsCoinScene(): case this.IsHundredScene(): - // todo 删除这个标记 - HundredSceneMgrSington.OnPlayerEnter(p, this.paramsEx[0]) + case this.IsMatchScene(): } @@ -630,7 +630,6 @@ func (this *Scene) DelPlayer(p *Player) bool { switch { case this.IsHundredScene(): - HundredSceneMgrSington.OnPlayerLeave(p) //case this.IsHallScene(): // PlatformMgrSingleton.OnPlayerLeaveScene(this, p) // for i := 0; i < this.playerNum; i++ { @@ -664,9 +663,7 @@ func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool { p.scene = this this.audiences[p.SnId] = p this.gameSess.AddPlayer(p) - if this.IsHundredScene() { - HundredSceneMgrSington.OnPlayerEnter(p, this.paramsEx[0]) - } + //todo:send add msg to gamesrv data, err := p.MarshalData(this.gameId) if err == nil { @@ -749,9 +746,6 @@ func (this *Scene) DelAudience(p *Player) bool { } p.scene = nil SceneMgrSingleton.OnPlayerLeaveScene(this, p) - if this.IsHundredScene() { - HundredSceneMgrSington.OnPlayerLeave(p) - } //from gameserver, so don't need send msg return true } diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index c4f742f..9b6b36f 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -37,6 +37,14 @@ type SceneMgr struct { hundredSceneAutoId int // 百人场房间号 } +func (m *SceneMgr) GetPlatformBySceneId(sceneId int) string { + s := m.GetScene(sceneId) + if s != nil && s.limitPlatform != nil { + return s.limitPlatform.IdStr + } + return "" +} + // AllocReplayCode 获取回访码 func (m *SceneMgr) AllocReplayCode() string { code, _ := model.GetOneReplayId() @@ -316,7 +324,7 @@ func (m *SceneMgr) DestroyScene(sceneId int, isCompleted bool) { CoinSceneMgrSingleton.OnDestroyScene(s.sceneId) case s.IsHundredScene(): - HundredSceneMgrSington.OnDestroyScene(s.sceneId) + HundredSceneMgrSingleton.OnDestroyScene(s.sceneId) case s.IsMatchScene(): MatchSceneMgrSingleton.OnDestroyScene(s.sceneId) diff --git a/worldsrv/tournament.go b/worldsrv/tournament.go index 1cb12ed..cbb198c 100644 --- a/worldsrv/tournament.go +++ b/worldsrv/tournament.go @@ -1765,7 +1765,7 @@ func (this *Tournament) Init() { } ret, err := model.GetMatchAward(v.IdStr) if err != nil { - logger.Logger.Tracef("GetMatchAward error %v", err) + logger.Logger.Warnf("GetMatchAward error %v", err) continue } if this.MatchAwardNum == nil { From 0f7da88dabedab45b0595b32bf0afc3baf0ae55f Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 19 Aug 2024 10:18:08 +0800 Subject: [PATCH 12/63] =?UTF-8?q?=E6=96=B0=E6=89=8B=E5=BC=95=E5=AF=BC?= =?UTF-8?q?=E5=BC=80=E5=90=AF=E6=97=B6=E6=B3=A8=E5=86=8C=E7=9A=84=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E6=89=8D=E6=9C=89=E5=BC=95=E5=AF=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/player.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/worldsrv/player.go b/worldsrv/player.go index 2541b75..1e405c5 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -340,6 +340,13 @@ func (this *Player) OnLogined() { this.RandRobotExData() if !this.IsRob { + if isFirstLogin { + cfg := PlatformMgrSingleton.GetConfig(this.Platform).GuideConfig + if cfg == nil || cfg.GetOn() != common.On { + this.GuideStep = -1 + } + } + this.SendJackPotInit() this.GetPayGoodsInfo() From 96bbac8533a48c9ebe93097f030eb13b2def294e Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 19 Aug 2024 13:52:09 +0800 Subject: [PATCH 13/63] no message --- worldsrv/coinscenemgr.go | 2 +- worldsrv/platform.go | 2 +- worldsrv/platformmgr.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/worldsrv/coinscenemgr.go b/worldsrv/coinscenemgr.go index bb2f9b4..8f25966 100644 --- a/worldsrv/coinscenemgr.go +++ b/worldsrv/coinscenemgr.go @@ -1,7 +1,6 @@ package main import ( - "games.yol.com/win88/model" "math/rand" "time" @@ -11,6 +10,7 @@ import ( "mongo.games.com/goserver/core/transact" "mongo.games.com/game/common" + "mongo.games.com/game/model" "mongo.games.com/game/proto" hallproto "mongo.games.com/game/protocol/gamehall" "mongo.games.com/game/protocol/server" diff --git a/worldsrv/platform.go b/worldsrv/platform.go index a173e6a..e7106ab 100644 --- a/worldsrv/platform.go +++ b/worldsrv/platform.go @@ -129,7 +129,7 @@ func (cfg *GameList) GetGameConfig(gameFreeId int32) *webapiproto.GameFree { return nil } -func CompareGameFreeConfigChged(oldCfg, newCfg *webapiproto.GameFree) bool { +func CompareGameFreeConfigChanged(oldCfg, newCfg *webapiproto.GameFree) bool { if oldCfg.Status != newCfg.Status || oldCfg.GroupId != newCfg.GroupId || oldCfg.DbGameFree.GetBot() != newCfg.DbGameFree.GetBot() || diff --git a/worldsrv/platformmgr.go b/worldsrv/platformmgr.go index be24b14..1fff5f4 100644 --- a/worldsrv/platformmgr.go +++ b/worldsrv/platformmgr.go @@ -243,7 +243,7 @@ func (pm *PlatformMgr) UpsertGameFree(platform string, data *webapiproto.GameFre pgc.gameId[data.DbGameFree.Id] = append(pgc.gameId[data.DbGameFree.Id], data) } // 新增的场次不会通知 - if ok && old != nil && !CompareGameFreeConfigChged(old, data) { + if ok && old != nil && !CompareGameFreeConfigChanged(old, data) { pm.OnPlatformGameFreeUpdate(p, old, data) pm.SyncGameFree(p.IdStr, data) } From fe8ccec885cf3c836db0287db01d3c051a5f2583 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 20 Aug 2024 09:06:51 +0800 Subject: [PATCH 14/63] review --- common/broadcasthandler.go | 45 +++++++++++++++++++ common/multicasthandler.go | 50 +++++++++++++++++++++ gamesrv/action/action_server.go | 1 + gamesrv/base/broadcasthandler.go | 61 ------------------------- gamesrv/base/multicasthandler.go | 67 ---------------------------- gamesrv/base/playermgr.go | 2 +- gamesrv/base/scene.go | 6 +-- gamesrv/base/scene_mgr.go | 2 +- gamesrv/fishing/scenedata_fishing.go | 2 +- gatesrv/broadcasthandler.go | 44 +----------------- gatesrv/multicasthandler.go | 48 ++------------------ mgrsrv/api/broadcasthandler.go | 56 +---------------------- mgrsrv/api/webapi_srctrl.go | 2 +- worldsrv/action_server.go | 3 ++ worldsrv/broadcasthandler.go | 62 ------------------------- worldsrv/gamestate.go | 2 +- worldsrv/multicasthandler.go | 67 ---------------------------- worldsrv/platformmgr.go | 3 +- worldsrv/playermgr.go | 18 ++++---- worldsrv/scene.go | 2 +- worldsrv/tmmatch.go | 2 +- 21 files changed, 128 insertions(+), 417 deletions(-) create mode 100644 common/broadcasthandler.go create mode 100644 common/multicasthandler.go delete mode 100644 gamesrv/base/broadcasthandler.go delete mode 100644 gamesrv/base/multicasthandler.go delete mode 100644 worldsrv/broadcasthandler.go delete mode 100644 worldsrv/multicasthandler.go diff --git a/common/broadcasthandler.go b/common/broadcasthandler.go new file mode 100644 index 0000000..0922359 --- /dev/null +++ b/common/broadcasthandler.go @@ -0,0 +1,45 @@ +package common + +import ( + rawproto "google.golang.org/protobuf/proto" + "mongo.games.com/game/proto" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + "mongo.games.com/goserver/srvlib" + "mongo.games.com/goserver/srvlib/protocol" +) + +func RegisterBoardCastHandler() { + netlib.Register(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), &protocol.SSPacketBroadcast{}, BroadcastHandler) +} + +func BroadcastHandler(s *netlib.Session, packetId int, data interface{}) error { + if bp, ok := data.(*protocol.SSPacketBroadcast); ok { + pd := bp.GetData() + sp := bp.GetSessParam() + if bcss := sp.GetBcss(); bcss != nil { + srvlib.ServerSessionMgrSington.Broadcast(int(bp.GetPacketId()), pd, int(bcss.GetSArea()), int(bcss.GetSType())) + } + } + return nil +} + +func CreateBroadcastPacket(sp *protocol.BCSessionUnion, packetId int, data interface{}) (rawproto.Message, error) { + pack := &protocol.SSPacketBroadcast{ + SessParam: sp, + PacketId: proto.Int(packetId), + } + + if byteData, ok := data.([]byte); ok { + pack.Data = byteData + } else { + byteData, err := netlib.MarshalPacket(packetId, data) + if err == nil { + pack.Data = byteData + } else { + logger.Logger.Warnf("CreateBroadcastPacket err:%v", err) + return nil, err + } + } + return pack, nil +} diff --git a/common/multicasthandler.go b/common/multicasthandler.go new file mode 100644 index 0000000..0a60453 --- /dev/null +++ b/common/multicasthandler.go @@ -0,0 +1,50 @@ +package common + +import ( + rawproto "google.golang.org/protobuf/proto" + "mongo.games.com/game/proto" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + "mongo.games.com/goserver/srvlib" + "mongo.games.com/goserver/srvlib/protocol" +) + +func RegisterMulticastHandler() { + netlib.Register(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), &protocol.SSPacketMulticast{}, MulticastHandler) +} + +func MulticastHandler(s *netlib.Session, packetId int, data interface{}) error { + if mp, ok := data.(*protocol.SSPacketMulticast); ok { + pd := mp.GetData() + sis := mp.GetSessions() + for _, si := range sis { + ss := si.GetMcss() + if ss != nil { + ns := srvlib.ServerSessionMgrSington.GetSession(int(ss.GetSArea()), int(ss.GetSType()), int(ss.GetSId())) + if ns != nil { + ns.Send(int(mp.GetPacketId()), pd /*, s.GetSessionConfig().IsInnerLink*/) + } + } + } + } + return nil +} + +func CreateMulticastPacket(packetId int, data interface{}, sis ...*protocol.MCSessionUnion) (rawproto.Message, error) { + pack := &protocol.SSPacketMulticast{ + Sessions: sis, + PacketId: proto.Int(packetId), + } + if byteData, ok := data.([]byte); ok { + pack.Data = byteData + } else { + byteData, err := netlib.MarshalPacket(packetId, data) + if err == nil { + pack.Data = byteData + } else { + logger.Logger.Errorf("CreateMulticastPacket err:%v", err) + return nil, err + } + } + return pack, nil +} diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 42afa23..10b4483 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -576,6 +576,7 @@ func init() { return nil })) + common.RegisterMulticastHandler() //玩家离开 netlib.Register(int(server.SSPacketID_PACKET_WG_PlayerLEAVE), server.WGPlayerLeave{}, HandleWGPlayerLeave) //同步记牌器过期时间 diff --git a/gamesrv/base/broadcasthandler.go b/gamesrv/base/broadcasthandler.go deleted file mode 100644 index afebcee..0000000 --- a/gamesrv/base/broadcasthandler.go +++ /dev/null @@ -1,61 +0,0 @@ -package base - -import ( - rawproto "google.golang.org/protobuf/proto" - "mongo.games.com/game/proto" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/netlib" - "mongo.games.com/goserver/srvlib" - "mongo.games.com/goserver/srvlib/protocol" -) - -var ( - BroadcastMaker = &BroadcastPacketFactory{} -) - -type BroadcastPacketFactory struct { -} - -type BroadcastHandler struct { -} - -func init() { - netlib.RegisterHandler(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), &BroadcastHandler{}) - netlib.RegisterFactory(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), BroadcastMaker) -} - -func (this *BroadcastPacketFactory) CreatePacket() interface{} { - pack := &protocol.SSPacketBroadcast{} - return pack -} - -func (this *BroadcastPacketFactory) CreateBroadcastPacket(sp *protocol.BCSessionUnion, packetid int, data interface{}) (rawproto.Message, error) { - pack := &protocol.SSPacketBroadcast{ - SessParam: sp, - PacketId: proto.Int(packetid), - } - if byteData, ok := data.([]byte); ok { - pack.Data = byteData - } else { - byteData, err := netlib.MarshalPacket(packetid, data) - if err == nil { - pack.Data = byteData - } else { - logger.Logger.Warn("BroadcastPacketFactory.CreateBroadcastPacket err:", err) - return nil, err - } - } - proto.SetDefaults(pack) - return pack, nil -} - -func (this *BroadcastHandler) Process(s *netlib.Session, packetid int, data interface{}) error { - if bp, ok := data.(*protocol.SSPacketBroadcast); ok { - pd := bp.GetData() - sp := bp.GetSessParam() - if bcss := sp.GetBcss(); bcss != nil { - srvlib.ServerSessionMgrSington.Broadcast(int(bp.GetPacketId()), pd, int(bcss.GetSArea()), int(bcss.GetSType())) - } - } - return nil -} diff --git a/gamesrv/base/multicasthandler.go b/gamesrv/base/multicasthandler.go deleted file mode 100644 index 6a670d7..0000000 --- a/gamesrv/base/multicasthandler.go +++ /dev/null @@ -1,67 +0,0 @@ -package base - -import ( - rawproto "google.golang.org/protobuf/proto" - "mongo.games.com/game/proto" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/netlib" - "mongo.games.com/goserver/srvlib" - "mongo.games.com/goserver/srvlib/protocol" -) - -var ( - MulticastMaker = &MulticastPacketFactory{} -) - -type MulticastPacketFactory struct { -} - -type MulticastHandler struct { -} - -func init() { - netlib.RegisterHandler(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), &MulticastHandler{}) - netlib.RegisterFactory(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), MulticastMaker) -} - -func (this *MulticastPacketFactory) CreatePacket() interface{} { - pack := &protocol.SSPacketMulticast{} - return pack -} - -func (this *MulticastPacketFactory) CreateMulticastPacket(packetid int, data interface{}, sis ...*protocol.MCSessionUnion) (rawproto.Message, error) { - pack := &protocol.SSPacketMulticast{ - Sessions: sis, - PacketId: proto.Int(packetid), - } - if byteData, ok := data.([]byte); ok { - pack.Data = byteData - } else { - byteData, err := netlib.MarshalPacket(packetid, data) - if err == nil { - pack.Data = byteData - } else { - logger.Logger.Info("MulticastPacketFactory.CreateMulticastPacket err:", err) - return nil, err - } - } - proto.SetDefaults(pack) - return pack, nil -} - -func (this *MulticastHandler) Process(s *netlib.Session, packetid int, data interface{}) error { - if mp, ok := data.(*protocol.SSPacketMulticast); ok { - pd := mp.GetData() - sis := mp.GetSessions() - for _, si := range sis { - ss := si.GetMcss() - if ss != nil { - ns := srvlib.ServerSessionMgrSington.GetSession(int(ss.GetSArea()), int(ss.GetSType()), int(ss.GetSId())) - if ns != nil { - ns.Send(int(mp.GetPacketId()), pd /*, s.GetSessionConfig().IsInnerLink*/) - } - } - } - } - return nil -} diff --git a/gamesrv/base/playermgr.go b/gamesrv/base/playermgr.go index 5a4db1e..88144ae 100644 --- a/gamesrv/base/playermgr.go +++ b/gamesrv/base/playermgr.go @@ -158,7 +158,7 @@ func (this *PlayerMgr) BroadcastMessage(packetid int, rawpack interface{}) bool sc := &protocol.BCSessionUnion{ Bccs: &protocol.BCClientSession{}, } - pack, err := BroadcastMaker.CreateBroadcastPacket(sc, packetid, rawpack) + pack, err := common.CreateBroadcastPacket(sc, packetid, rawpack) if err == nil && pack != nil { srvlib.ServerSessionMgrSington.Broadcast(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), pack, common.GetSelfAreaId(), srvlib.GateServerType) return true diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index f638b54..9d4bd8c 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -893,7 +893,7 @@ func (this *Scene) Broadcast(packetid int, msg rawproto.Message, excludeSid int6 } for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packetid, msg, v...) + pack, err := common.CreateMulticastPacket(packetid, msg, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvlibproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) @@ -917,7 +917,7 @@ func (this *Scene) RobotBroadcast(packetid int, msg rawproto.Message) { } for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packetid, msg, v...) + pack, err := common.CreateMulticastPacket(packetid, msg, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvlibproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) @@ -941,7 +941,7 @@ func (this *Scene) BroadcastToAudience(packetid int, msg rawproto.Message) { } for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packetid, msg, v...) + pack, err := common.CreateMulticastPacket(packetid, msg, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvlibproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) diff --git a/gamesrv/base/scene_mgr.go b/gamesrv/base/scene_mgr.go index c241b03..1b5b320 100644 --- a/gamesrv/base/scene_mgr.go +++ b/gamesrv/base/scene_mgr.go @@ -195,7 +195,7 @@ func (this *SceneMgr) JackPotSync(platform string, gameIds ...int32) { for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - cPack, err := MulticastMaker.CreateMulticastPacket(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEJACKPOT), pack, v...) + cPack, err := common.CreateMulticastPacket(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEJACKPOT), pack, v...) if err == nil { proto.SetDefaults(cPack) gateSess.Send(int(srvlibproto.SrvlibPacketID_PACKET_SS_MULTICAST), cPack) diff --git a/gamesrv/fishing/scenedata_fishing.go b/gamesrv/fishing/scenedata_fishing.go index d3a6914..c0ffaff 100644 --- a/gamesrv/fishing/scenedata_fishing.go +++ b/gamesrv/fishing/scenedata_fishing.go @@ -1458,7 +1458,7 @@ func (this *FishingSceneData) BroadCastMessage(packetid int, msg proto.Message, if gateSess == nil || len(v) == 0 { continue } - pack, err := base.MulticastMaker.CreateMulticastPacket(packetid, msg, v...) + pack, err := common.CreateMulticastPacket(packetid, msg, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvlibproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) diff --git a/gatesrv/broadcasthandler.go b/gatesrv/broadcasthandler.go index 1fb80a0..319bfec 100644 --- a/gatesrv/broadcasthandler.go +++ b/gatesrv/broadcasthandler.go @@ -1,56 +1,16 @@ package main import ( - rawproto "google.golang.org/protobuf/proto" - "mongo.games.com/game/proto" - "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/srvlib" "mongo.games.com/goserver/srvlib/protocol" ) -var ( - BroadcastMaker = &BroadcastPacketFactory{} -) - -type BroadcastPacketFactory struct { -} - -type BroadcastHandler struct { -} - func init() { - // 给所有玩家或某个类型的所有服务发消息 - netlib.RegisterHandler(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), &BroadcastHandler{}) - netlib.RegisterFactory(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), BroadcastMaker) + netlib.Register(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), &protocol.SSPacketBroadcast{}, BroadcastHandler) } -func (this *BroadcastPacketFactory) CreatePacket() interface{} { - pack := &protocol.SSPacketBroadcast{} - return pack -} - -func (this *BroadcastPacketFactory) CreateBroadcastPacket(sp *protocol.BCSessionUnion, packetid int, data interface{}) (rawproto.Message, error) { - pack := &protocol.SSPacketBroadcast{ - SessParam: sp, - PacketId: proto.Int(packetid), - } - if byteData, ok := data.([]byte); ok { - pack.Data = byteData - } else { - byteData, err := netlib.MarshalPacket(packetid, data) - if err == nil { - pack.Data = byteData - } else { - logger.Logger.Warn("BroadcastPacketFactory.CreateBroadcastPacket err:", err) - return nil, err - } - } - proto.SetDefaults(pack) - return pack, nil -} - -func (this *BroadcastHandler) Process(s *netlib.Session, packetid int, data interface{}) error { +func BroadcastHandler(s *netlib.Session, packetid int, data interface{}) error { if bp, ok := data.(*protocol.SSPacketBroadcast); ok { pd := bp.GetData() sp := bp.GetSessParam() diff --git a/gatesrv/multicasthandler.go b/gatesrv/multicasthandler.go index ce0f29e..cfcde44 100644 --- a/gatesrv/multicasthandler.go +++ b/gatesrv/multicasthandler.go @@ -1,61 +1,21 @@ package main import ( - rawproto "google.golang.org/protobuf/proto" - "mongo.games.com/game/proto" - "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/srvlib" "mongo.games.com/goserver/srvlib/protocol" ) -var ( - MulticastMaker = &MulticastPacketFactory{} -) - -type MulticastPacketFactory struct { -} - -type MulticastHandler struct { -} - func init() { - // 给某些玩家和某些服务发消息 - netlib.RegisterHandler(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), &MulticastHandler{}) - netlib.RegisterFactory(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), MulticastMaker) + netlib.Register(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), &protocol.SSPacketMulticast{}, MulticastHandler) } -func (this *MulticastPacketFactory) CreatePacket() interface{} { - pack := &protocol.SSPacketMulticast{} - return pack -} - -func (this *MulticastPacketFactory) CreateMulticastPacket(packetid int, data interface{}, sis ...*protocol.MCSessionUnion) (rawproto.Message, error) { - pack := &protocol.SSPacketMulticast{ - Sessions: sis, - PacketId: proto.Int(packetid), - } - if byteData, ok := data.([]byte); ok { - pack.Data = byteData - } else { - byteData, err := netlib.MarshalPacket(packetid, data) - if err == nil { - pack.Data = byteData - } else { - logger.Logger.Info("MulticastPacketFactory.CreateMulticastPacket err:", err) - return nil, err - } - } - proto.SetDefaults(pack) - return pack, nil -} - -func (this *MulticastHandler) Process(s *netlib.Session, packetid int, data interface{}) error { +func MulticastHandler(s *netlib.Session, packetid int, data interface{}) error { if mp, ok := data.(*protocol.SSPacketMulticast); ok { pd := mp.GetData() sis := mp.GetSessions() for _, si := range sis { - ns := this.getSession(si) + ns := getSession(si) if ns != nil { ns.Send(int(mp.GetPacketId()), pd /*, s.GetSessionConfig().IsInnerLink*/) } @@ -64,7 +24,7 @@ func (this *MulticastHandler) Process(s *netlib.Session, packetid int, data inte return nil } -func (this *MulticastHandler) getSession(su *protocol.MCSessionUnion) *netlib.Session { +func getSession(su *protocol.MCSessionUnion) *netlib.Session { cs := su.GetMccs() if cs != nil { return srvlib.ClientSessionMgrSington.GetSession(cs.GetSId()) diff --git a/mgrsrv/api/broadcasthandler.go b/mgrsrv/api/broadcasthandler.go index a42c07c..803adee 100644 --- a/mgrsrv/api/broadcasthandler.go +++ b/mgrsrv/api/broadcasthandler.go @@ -1,61 +1,9 @@ package api import ( - rawproto "google.golang.org/protobuf/proto" - "mongo.games.com/game/proto" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/netlib" - "mongo.games.com/goserver/srvlib" - "mongo.games.com/goserver/srvlib/protocol" + "mongo.games.com/game/common" ) -var ( - BroadcastMaker = &BroadcastPacketFactory{} -) - -type BroadcastPacketFactory struct { -} - -type BroadcastHandler struct { -} - func init() { - netlib.RegisterHandler(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), &BroadcastHandler{}) - netlib.RegisterFactory(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), BroadcastMaker) -} - -func (this *BroadcastPacketFactory) CreatePacket() interface{} { - pack := &protocol.SSPacketBroadcast{} - return pack -} - -func (this *BroadcastPacketFactory) CreateBroadcastPacket(sp *protocol.BCSessionUnion, packetid int, data interface{}) (rawproto.Message, error) { - pack := &protocol.SSPacketBroadcast{ - SessParam: sp, - PacketId: proto.Int(packetid), - } - if byteData, ok := data.([]byte); ok { - pack.Data = byteData - } else { - byteData, err := netlib.MarshalPacket(packetid, data) - if err == nil { - pack.Data = byteData - } else { - logger.Logger.Warn("BroadcastPacketFactory.CreateBroadcastPacket err:", err) - return nil, err - } - } - proto.SetDefaults(pack) - return pack, nil -} - -func (this *BroadcastHandler) Process(s *netlib.Session, packetid int, data interface{}) error { - if bp, ok := data.(*protocol.SSPacketBroadcast); ok { - pd := bp.GetData() - sp := bp.GetSessParam() - if bcss := sp.GetBcss(); bcss != nil { - srvlib.ServerSessionMgrSington.Broadcast(int(bp.GetPacketId()), pd, int(bcss.GetSArea()), int(bcss.GetSType())) - } - } - return nil + common.RegisterBoardCastHandler() } diff --git a/mgrsrv/api/webapi_srctrl.go b/mgrsrv/api/webapi_srctrl.go index e2b06a6..9d9b932 100644 --- a/mgrsrv/api/webapi_srctrl.go +++ b/mgrsrv/api/webapi_srctrl.go @@ -229,7 +229,7 @@ func SrvCtrlNotice(rw http.ResponseWriter, data []byte) { sc := &protocol.BCSessionUnion{ Bccs: &protocol.BCClientSession{}, } - broadcast, err := BroadcastMaker.CreateBroadcastPacket(sc, int(msg_proto.MSGPacketID_PACKET_SC_NOTICE), noticePacket) + broadcast, err := common.CreateBroadcastPacket(sc, int(msg_proto.MSGPacketID_PACKET_SC_NOTICE), noticePacket) if err != nil || broadcast == nil { pack.Tag = webapi.TagCode_FAILED pack.Msg = "send notice failed(inner error)" diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 6dc0a87..28e1e1a 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -789,6 +789,9 @@ func (this *CSAccountInvalidHandler) Process(s *netlib.Session, packetid int, da } func init() { + common.RegisterBoardCastHandler() + common.RegisterMulticastHandler() + common.RegisterHandler(int(playerproto.PlayerPacketID_PACKET_CS_PMCMD), &CSPMCmdHandler{}) netlib.RegisterFactory(int(playerproto.PlayerPacketID_PACKET_CS_PMCMD), &CSPMCmdPacketFactory{}) diff --git a/worldsrv/broadcasthandler.go b/worldsrv/broadcasthandler.go deleted file mode 100644 index 38650cd..0000000 --- a/worldsrv/broadcasthandler.go +++ /dev/null @@ -1,62 +0,0 @@ -package main - -import ( - rawproto "google.golang.org/protobuf/proto" - "mongo.games.com/game/proto" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/netlib" - "mongo.games.com/goserver/srvlib" - "mongo.games.com/goserver/srvlib/protocol" -) - -var ( - BroadcastMaker = &BroadcastPacketFactory{} -) - -type BroadcastPacketFactory struct { -} - -type BroadcastHandler struct { -} - -func init() { - netlib.RegisterHandler(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), &BroadcastHandler{}) - netlib.RegisterFactory(int(protocol.SrvlibPacketID_PACKET_SS_BROADCAST), BroadcastMaker) -} - -func (this *BroadcastPacketFactory) CreatePacket() interface{} { - pack := &protocol.SSPacketBroadcast{} - return pack -} - -func (this *BroadcastPacketFactory) CreateBroadcastPacket(sp *protocol.BCSessionUnion, packetid int, data interface{}) (rawproto.Message, error) { - pack := &protocol.SSPacketBroadcast{ - SessParam: sp, - PacketId: proto.Int(packetid), - } - - if byteData, ok := data.([]byte); ok { - pack.Data = byteData - } else { - byteData, err := netlib.MarshalPacket(packetid, data) - if err == nil { - pack.Data = byteData - } else { - logger.Logger.Warn("BroadcastPacketFactory.CreateBroadcastPacket err:", err) - return nil, err - } - } - proto.SetDefaults(pack) - return pack, nil -} - -func (this *BroadcastHandler) Process(s *netlib.Session, packetid int, data interface{}) error { - if bp, ok := data.(*protocol.SSPacketBroadcast); ok { - pd := bp.GetData() - sp := bp.GetSessParam() - if bcss := sp.GetBcss(); bcss != nil { - srvlib.ServerSessionMgrSington.Broadcast(int(bp.GetPacketId()), pd, int(bcss.GetSArea()), int(bcss.GetSType())) - } - } - return nil -} diff --git a/worldsrv/gamestate.go b/worldsrv/gamestate.go index 2eff9a8..f315cec 100644 --- a/worldsrv/gamestate.go +++ b/worldsrv/gamestate.go @@ -75,7 +75,7 @@ func (gsm *GameStateManager) BrodcastGameState(gameId int32, platform string, pa } for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packid, pack, v...) + pack, err := common.CreateMulticastPacket(packid, pack, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) diff --git a/worldsrv/multicasthandler.go b/worldsrv/multicasthandler.go deleted file mode 100644 index 2a94ceb..0000000 --- a/worldsrv/multicasthandler.go +++ /dev/null @@ -1,67 +0,0 @@ -package main - -import ( - rawproto "google.golang.org/protobuf/proto" - "mongo.games.com/game/proto" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/netlib" - "mongo.games.com/goserver/srvlib" - "mongo.games.com/goserver/srvlib/protocol" -) - -var ( - MulticastMaker = &MulticastPacketFactory{} -) - -type MulticastPacketFactory struct { -} - -type MulticastHandler struct { -} - -func init() { - netlib.RegisterHandler(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), &MulticastHandler{}) - netlib.RegisterFactory(int(protocol.SrvlibPacketID_PACKET_SS_MULTICAST), MulticastMaker) -} - -func (this *MulticastPacketFactory) CreatePacket() interface{} { - pack := &protocol.SSPacketMulticast{} - return pack -} - -func (this *MulticastPacketFactory) CreateMulticastPacket(packetid int, data interface{}, sis ...*protocol.MCSessionUnion) (rawproto.Message, error) { - pack := &protocol.SSPacketMulticast{ - Sessions: sis, - PacketId: proto.Int(packetid), - } - if byteData, ok := data.([]byte); ok { - pack.Data = byteData - } else { - byteData, err := netlib.MarshalPacket(packetid, data) - if err == nil { - pack.Data = byteData - } else { - logger.Logger.Info("MulticastPacketFactory.CreateMulticastPacket err:", err) - return nil, err - } - } - proto.SetDefaults(pack) - return pack, nil -} - -func (this *MulticastHandler) Process(s *netlib.Session, packetid int, data interface{}) error { - if mp, ok := data.(*protocol.SSPacketMulticast); ok { - pd := mp.GetData() - sis := mp.GetSessions() - for _, si := range sis { - ss := si.GetMcss() - if ss != nil { - ns := srvlib.ServerSessionMgrSington.GetSession(int(ss.GetSArea()), int(ss.GetSType()), int(ss.GetSId())) - if ns != nil { - ns.Send(int(mp.GetPacketId()), pd /*, s.GetSessionConfig().IsInnerLink*/) - } - } - } - } - return nil -} diff --git a/worldsrv/platformmgr.go b/worldsrv/platformmgr.go index 1fff5f4..7014aa7 100644 --- a/worldsrv/platformmgr.go +++ b/worldsrv/platformmgr.go @@ -10,6 +10,7 @@ import ( "mongo.games.com/goserver/core/utils" srvlibproto "mongo.games.com/goserver/srvlib/protocol" + "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/proto" hallproto "mongo.games.com/game/protocol/gamehall" @@ -302,7 +303,7 @@ func (pm *PlatformMgr) Broadcast(packetid int, packet interface{}, players map[i } for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packetid, packet, v...) + pack, err := common.CreateMulticastPacket(packetid, packet, v...) if err == nil { gateSess.Send(int(srvlibproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) } diff --git a/worldsrv/playermgr.go b/worldsrv/playermgr.go index 55d4c08..7d76256 100644 --- a/worldsrv/playermgr.go +++ b/worldsrv/playermgr.go @@ -2,7 +2,6 @@ package main import ( "math/rand" - "mongo.games.com/game/worldsrv/internal" "time" "mongo.games.com/goserver/core/basic" @@ -16,7 +15,8 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/proto" - server_proto "mongo.games.com/game/protocol/server" + serverproto "mongo.games.com/game/protocol/server" + "mongo.games.com/game/worldsrv/internal" ) var PlayerMgrSington = &PlayerMgr{ @@ -292,7 +292,7 @@ func (this *PlayerMgr) BroadcastMessage(packetid int, rawpack interface{}) bool sc := &srvproto.BCSessionUnion{ Bccs: &srvproto.BCClientSession{}, } - pack, err := BroadcastMaker.CreateBroadcastPacket(sc, packetid, rawpack) + pack, err := common.CreateBroadcastPacket(sc, packetid, rawpack) if err == nil && pack != nil { srvlib.ServerSessionMgrSington.Broadcast(int(srvproto.SrvlibPacketID_PACKET_SS_BROADCAST), pack, common.GetSelfAreaId(), srvlib.GateServerType) return true @@ -318,7 +318,7 @@ func (this *PlayerMgr) BroadcastMessageToPlatform(platform string, packetid int, } for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packetid, rawpack, v...) + pack, err := common.CreateMulticastPacket(packetid, rawpack, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) @@ -345,7 +345,7 @@ func (this *PlayerMgr) BroadcastMessageToPlatformByFunc(platform string, packeti } for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packetid, rawpack, v...) + pack, err := common.CreateMulticastPacket(packetid, rawpack, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) @@ -378,7 +378,7 @@ func (this *PlayerMgr) BroadcastMessageToPlatformWithHall(platform string, snid } for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packetid, rawpack, v...) + pack, err := common.CreateMulticastPacket(packetid, rawpack, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) @@ -391,7 +391,7 @@ func (this *PlayerMgr) BroadcastMessageToPlatformWithHall(platform string, snid // BroadcastMessageToGroup 发送群组消息 func (this *PlayerMgr) BroadcastMessageToGroup(packetid int, rawpack interface{}, tags []string) bool { - pack := &server_proto.SSCustomTagMulticast{ + pack := &serverproto.SSCustomTagMulticast{ Tags: tags, } if byteData, ok := rawpack.([]byte); ok { @@ -405,7 +405,7 @@ func (this *PlayerMgr) BroadcastMessageToGroup(packetid int, rawpack interface{} return false } } - srvlib.ServerSessionMgrSington.Broadcast(int(server_proto.SSPacketID_PACKET_SS_CUSTOMTAG_MULTICAST), pack, common.GetSelfAreaId(), srvlib.GateServerType) + srvlib.ServerSessionMgrSington.Broadcast(int(serverproto.SSPacketID_PACKET_SS_CUSTOMTAG_MULTICAST), pack, common.GetSelfAreaId(), srvlib.GateServerType) return true } @@ -426,7 +426,7 @@ func (this *PlayerMgr) BroadcastMessageToTarget(platform string, target []int32, } for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packetid, rawpack, v...) + pack, err := common.CreateMulticastPacket(packetid, rawpack, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) diff --git a/worldsrv/scene.go b/worldsrv/scene.go index d885720..407af35 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -1159,7 +1159,7 @@ func (this *Scene) Broadcast(packetid int, msg rawproto.Message, excludeSid int6 for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packetid, msg, v...) + pack, err := common.CreateMulticastPacket(packetid, msg, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvlibproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) diff --git a/worldsrv/tmmatch.go b/worldsrv/tmmatch.go index 05398c0..482162c 100644 --- a/worldsrv/tmmatch.go +++ b/worldsrv/tmmatch.go @@ -107,7 +107,7 @@ func (tm *TmMatch) BroadcastMessage(packetId int, rawPack interface{}) { } for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := MulticastMaker.CreateMulticastPacket(packetId, rawPack, v...) + pack, err := common.CreateMulticastPacket(packetId, rawPack, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) From fc29fcddd81dc2da457efd48ce63b4030e4e7591 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 20 Aug 2024 09:54:57 +0800 Subject: [PATCH 15/63] =?UTF-8?q?=E6=AF=94=E8=B5=9B=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=9B=BE=E6=A0=87=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocol/tournament/tournament.pb.go | 166 ++++++++++++++------------- protocol/tournament/tournament.proto | 1 + worldsrv/action_tournament.go | 3 +- 3 files changed, 91 insertions(+), 79 deletions(-) diff --git a/protocol/tournament/tournament.pb.go b/protocol/tournament/tournament.pb.go index 1b84ad3..a808964 100644 --- a/protocol/tournament/tournament.pb.go +++ b/protocol/tournament/tournament.pb.go @@ -1866,6 +1866,7 @@ type MatchInfo struct { TotalRound int32 `protobuf:"varint,5,opt,name=TotalRound,proto3" json:"TotalRound,omitempty"` // 总轮数 RemainNum int32 `protobuf:"varint,6,opt,name=RemainNum,proto3" json:"RemainNum,omitempty"` // 剩余人数 Players []*MatchPlayer `protobuf:"bytes,7,rep,name=Players,proto3" json:"Players,omitempty"` // 玩家列表 + Icon string `protobuf:"bytes,8,opt,name=Icon,proto3" json:"Icon,omitempty"` // 比赛图标 } func (x *MatchInfo) Reset() { @@ -1949,6 +1950,13 @@ func (x *MatchInfo) GetPlayers() []*MatchPlayer { return nil } +func (x *MatchInfo) GetIcon() string { + if x != nil { + return x.Icon + } + return "" +} + type SCTMMatchList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2414,7 +2422,7 @@ var file_tournament_proto_rawDesc = []byte{ 0x55, 0x73, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x22, 0xe0, 0x01, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, + 0x6f, 0x72, 0x65, 0x22, 0xf4, 0x01, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, @@ -2428,84 +2436,86 @@ var file_tournament_proto_rawDesc = []byte{ 0x4e, 0x75, 0x6d, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x07, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x64, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x4d, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x54, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, 0x2c, 0x0a, 0x0a, - 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, 0xc6, 0x01, 0x0a, 0x09, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, - 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, 0x75, 0x6e, 0x64, - 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x73, 0x22, 0x57, 0x0a, 0x0a, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x54, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x2a, 0xc7, 0x04, 0x0a, - 0x0c, 0x54, 0x4f, 0x55, 0x52, 0x4e, 0x41, 0x4d, 0x45, 0x4e, 0x54, 0x49, 0x44, 0x12, 0x12, 0x0a, - 0x0e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, - 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, - 0x53, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xb4, 0x15, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, - 0x73, 0x10, 0xb5, 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, - 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xb6, - 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, - 0x43, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xb7, 0x15, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x53, 0x69, - 0x67, 0x6e, 0x52, 0x61, 0x63, 0x65, 0x10, 0xb8, 0x15, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x61, 0x63, - 0x65, 0x10, 0xb9, 0x15, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, - 0x4d, 0x5f, 0x53, 0x43, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x69, 0x67, 0x6e, 0x4e, 0x75, 0x6d, 0x10, - 0xba, 0x15, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, - 0x53, 0x43, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, - 0xbb, 0x15, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, - 0x53, 0x43, 0x54, 0x4d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x10, 0xbc, 0x15, 0x12, 0x1d, 0x0a, 0x18, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x63, 0x6f, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x49, 0x63, 0x6f, 0x6e, 0x22, 0x64, 0x0a, 0x0d, 0x53, 0x43, + 0x54, 0x4d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, + 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, + 0x22, 0x2c, 0x0a, 0x0a, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x64, 0x12, 0x0e, + 0x0a, 0x02, 0x54, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, 0xc6, + 0x01, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, + 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, 0x75, + 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, + 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x07, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x57, 0x0a, 0x0a, 0x53, 0x43, 0x52, 0x6f, 0x6f, + 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, + 0x2a, 0xc7, 0x04, 0x0a, 0x0c, 0x54, 0x4f, 0x55, 0x52, 0x4e, 0x41, 0x4d, 0x45, 0x4e, 0x54, 0x49, + 0x44, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x5a, + 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xb4, 0x15, 0x12, 0x18, + 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, + 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x10, 0xb5, 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, + 0x73, 0x74, 0x10, 0xb6, 0x15, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, + 0xb7, 0x15, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, + 0x43, 0x53, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x61, 0x63, 0x65, 0x10, 0xb8, 0x15, 0x12, 0x19, 0x0a, + 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x53, 0x69, 0x67, + 0x6e, 0x52, 0x61, 0x63, 0x65, 0x10, 0xb9, 0x15, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x69, 0x67, 0x6e, + 0x4e, 0x75, 0x6d, 0x10, 0xba, 0x15, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x10, 0xbb, 0x15, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x10, 0xbc, 0x15, + 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, + 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xbf, 0x15, 0x12, + 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, + 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xc0, 0x15, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, + 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x10, 0xc1, 0x15, 0x12, 0x1d, 0x0a, + 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x10, 0xc2, 0x15, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x53, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xbf, 0x15, 0x12, 0x1d, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xc0, 0x15, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x10, 0xc1, 0x15, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x10, 0xc2, 0x15, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xc3, 0x15, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xc4, 0x15, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x69, 0x73, - 0x74, 0x10, 0xc5, 0x15, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, - 0x4d, 0x5f, 0x53, 0x43, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xc6, 0x15, - 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, - 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xc7, 0x15, 0x12, 0x19, 0x0a, 0x14, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, - 0x69, 0x73, 0x74, 0x10, 0xc8, 0x15, 0x2a, 0xa2, 0x01, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x52, - 0x61, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x4e, 0x6f, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x54, 0x69, 0x6d, 0x65, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x10, 0x06, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x46, 0x72, 0x65, 0x65, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x4e, 0x6f, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0x08, 0x42, 0x2a, 0x5a, 0x28, 0x6d, - 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x74, 0x6f, 0x75, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x73, 0x6f, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xc3, 0x15, 0x12, 0x1e, 0x0a, 0x19, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x54, 0x4d, 0x53, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xc4, 0x15, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x43, 0x53, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xc5, 0x15, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x69, 0x73, + 0x74, 0x10, 0xc6, 0x15, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, + 0x4d, 0x5f, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xc7, 0x15, 0x12, + 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x4d, 0x5f, 0x53, 0x43, 0x52, + 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xc8, 0x15, 0x2a, 0xa2, 0x01, 0x0a, 0x0c, 0x53, + 0x69, 0x67, 0x6e, 0x52, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x10, 0x01, 0x12, 0x0e, 0x0a, + 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x10, 0x02, 0x12, 0x0f, 0x0a, + 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x03, 0x12, 0x0d, + 0x0a, 0x09, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x69, 0x6d, 0x65, 0x10, 0x04, 0x12, 0x0d, 0x0a, + 0x09, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x10, 0x06, 0x12, 0x0d, + 0x0a, 0x09, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x46, 0x72, 0x65, 0x65, 0x10, 0x07, 0x12, 0x10, 0x0a, + 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0x08, 0x42, + 0x2a, 0x5a, 0x28, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2f, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/tournament/tournament.proto b/protocol/tournament/tournament.proto index 7c4086e..08ed170 100644 --- a/protocol/tournament/tournament.proto +++ b/protocol/tournament/tournament.proto @@ -218,6 +218,7 @@ message MatchInfo{ int32 TotalRound = 5; // 总轮数 int32 RemainNum = 6; // 剩余人数 repeated MatchPlayer Players = 7; // 玩家列表 + string Icon = 8; // 比赛图标 } message SCTMMatchList{ diff --git a/worldsrv/action_tournament.go b/worldsrv/action_tournament.go index f55d5d7..bcebbf6 100644 --- a/worldsrv/action_tournament.go +++ b/worldsrv/action_tournament.go @@ -123,10 +123,11 @@ func CSMatchList(s *netlib.Session, packetId int, data interface{}, sid int64) e d := &tournament.MatchInfo{ MatchId: int64(v.TMId), InstanceId: v.SortId, - Name: v.gmd.MatchName, + Name: v.gmd.GetMatchName(), Round: round, TotalRound: v.GetTotalRound(), RemainNum: TournamentMgr.GetRemainNum(v.SortId), + Icon: v.gmd.GetTitleURL(), } for _, v := range TournamentMgr.GetRemainPlayer(v.SortId) { var name, headUrl string From 15d0d2be78ef5eb5c8a584d8d4e336f9ee00a53f Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 20 Aug 2024 10:19:08 +0800 Subject: [PATCH 16/63] update public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 07c189d..df94294 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 07c189d652b84910258fa33eb3214d39c53edec4 +Subproject commit df942948ff721824a23f1f15f02a0fc84d0b52e9 From 6153903f31e0b5aa82d93766196b1009ad081c26 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 20 Aug 2024 10:44:42 +0800 Subject: [PATCH 17/63] =?UTF-8?q?=E6=AF=94=E8=B5=9B=E5=9C=BA=E6=AF=94?= =?UTF-8?q?=E8=B5=9B=E4=B8=AD=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/tournament.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/worldsrv/tournament.go b/worldsrv/tournament.go index cbb198c..02bf60e 100644 --- a/worldsrv/tournament.go +++ b/worldsrv/tournament.go @@ -220,6 +220,21 @@ func (this *Tournament) GetRemainPlayer(sortId int64) []*MatchPlayerInfo { robotPlayer := func(n int) { for _, v := range tm.robotGrades[n] { + if v.copySnid == 0 { + for _, vv := range tm.TmPlayer { + p := PlayerMgrSington.GetPlayerBySnId(vv.SnId) + if p != nil { + ret = append(ret, &MatchPlayerInfo{ + SnId: vv.SnId, + RoleId: p.GetRoleId(), + SkinId: p.Skin.ModId, + Grade: v.grade, + }) + } + break + } + continue + } ret = append(ret, &MatchPlayerInfo{ SnId: v.copySnid, RoleId: v.copyRoleId, From 8df3978077be7bdd26799ee4a790d7e3cb0e29bf Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 20 Aug 2024 14:14:12 +0800 Subject: [PATCH 18/63] update excel --- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Skin.dat | Bin 896 -> 900 bytes data/DB_Skin.json | 8 ++++---- data/DB_Task.dat | Bin 5299 -> 5299 bytes data/DB_VIP.dat | Bin 2277 -> 2296 bytes data/DB_VIP.json | 19 +++++++++++++++++++ data/DB_VIPShow.dat | 4 ++-- data/DB_VIPShow.json | 4 ++-- public | 2 +- xlsx/DB_Skin.xlsx | Bin 12207 -> 12201 bytes xlsx/DB_VIP.xlsx | Bin 20822 -> 20851 bytes xlsx/DB_VIPShow.xlsx | Bin 14308 -> 14304 bytes 12 files changed, 28 insertions(+), 9 deletions(-) diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 9d60e50768e4d0593912d1e8d1e4301c7adb3da3..d669ddae534c532f58b1bc44b6c849d0fdc186bc 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUwf4?1AY6s{`5((}&l7pgOQUN}OPKG^~BZ!WGNGg5m*~!(j&AfjS6gFp7tO Y2ErTy^8m!*>>P`L9{s}1#XwsK0Avz8H2?qr literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;Ik1}#(+9I3#Xg|BVCJKm%L#Tz!`eqIT(KN1V26Mm2-E;G5bOXTAExmR)L}4- WaCsDLp%OdCBA`dVFmo}`76JfeB0Mz! diff --git a/data/DB_Skin.dat b/data/DB_Skin.dat index 4d3cb4684c79d83d3c25c314466cd27a4ae3746b..38033997c8e32027c0e5073a264da3474b508350 100644 GIT binary patch delta 52 zcmZo*Z(*NshH?7Dv-+G&PHY^XzX}P6OlD?GWSPjw@nqr!@yYd!qF|XXAeqgx8J{u& E0K-=h)&Kwi delta 48 zcmZo+Z(yHrhH>h|v-<4JPAnX(0t}N`853Fh89AOzydXZgkx>*Z&LqIFc|PM)MgU0X B488yW diff --git a/data/DB_Skin.json b/data/DB_Skin.json index 3a5ce1b..6109313 100644 --- a/data/DB_Skin.json +++ b/data/DB_Skin.json @@ -45,9 +45,9 @@ "SkinPic": "icon_300003", "SkinName": "活力-粉", "SkinType": "mg_02", - "UnlockType": 3, + "UnlockType": 2, "UnlockItem": { - "5": 0 + "310003": 20 }, "SkinSkillName": "活力满满", "SkinSkillIcon": "SkillIcon-30003", @@ -66,9 +66,9 @@ "SkinPic": "icon_300004", "SkinName": "活力-青", "SkinType": "mg_03", - "UnlockType": 3, + "UnlockType": 2, "UnlockItem": { - "2": 0 + "310004": 20 }, "SkinSkillName": "金币满满", "SkinSkillIcon": "SkillIcon-30004", diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 95a4c56dab6ed585319eb9356a5fbd5cf6678ac7..31cd7aa6f2f03615362ddbc1fd73713615db5e58 100644 GIT binary patch delta 193 zcmdn2xmk09p&$px!d^Ck1&8Fk*f^E|S*#nK)-p{l;Sib3%)CjEjbjl|jL{3C>OhO_ zOK#MkSW@llX{Fz&1 z^Jxxym^{pi1-)#WrMYe}PTtNTvYDMnnrZSCE3zk95}854VRtlz$?Bvj4zfA0IIJrr~m)} diff --git a/data/DB_VIP.dat b/data/DB_VIP.dat index f541d80b279a3420c8fb8925b9d73e51cfeb30f1..bc0b4f0779b40b861aa7e9217fa7ef3fd7bd6154 100644 GIT binary patch delta 261 zcmaDV_(PD1t7;-s5f?K91H%T!7wlY36KkuXybJtX&661!tGQW#l0exV;#^IWTNz=} z3*>=ZP9_+)L!GO2axYUYO!Wsnu9nHd%(YO%ZkPeNGvV9=c0jH?3ru!}8<4vc&Yj=~ zG)tSc4yyM@D3H4e&V3Ne)jrvhtpO@~A{EFz1m|wZ1#-RFVX`wyf!r%_ZbL0s$K+U! K22QAlTNnWceL@HT delta 242 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 diff --git a/xlsx/DB_VIP.xlsx b/xlsx/DB_VIP.xlsx index 0060af6f7ab10cad3e17109409ef530890c9e43e..a1f8201bc1a85102bee15f35ddc9c549d61e63c4 100644 GIT binary patch delta 13825 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 Y$T4YMSpp)C_8%yp3Kooq+}|Po59p+NI{*Lx delta 13745 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 H{Wbp|%C#5H diff --git a/xlsx/DB_VIPShow.xlsx b/xlsx/DB_VIPShow.xlsx index 96e9c67411ca71b864502a159dac1d2223302824..4d007c0c2378c9cca0ef1c8aaef09de188046af1 100644 GIT binary patch delta 2754 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 delta 2739 zcmZ9OX*kpi8^-59mNd>VF@%VjY(--Xh9O&H*VxXGt#pvA4bj+}EC*>)`P=ukG?r|y z76whSq%0v>DvaeQs-X~>UY+;7u5(@I`S5(YpXby4yRUnOGEb?$2k?0_1_r&sI^Zy^ z)#fP{nG`Pn4z*UKWBDjine@!G(C8#upv!0CZmsExNegNXC3t6~gF+H(iMew%*gh@o7#aWBL$|Zd@Ewr^o zT)Ug?f*GkI8M7ra*6F%;&dZYMN4;ott-`BvlTC2Hr}m}1>Kj$v59Pn+(ShXljs!jl zRtoAN|Ks!4Cf4%h#~a)1BYDmti9*ndVVy6~A0t{NiQM&*U|3#!zKh=l*ALVQI)>Gv zKh}2K$#KDvY4&t`-`3jvR*mG?LgPCzz6?crHyKd>(`qw!COx41!|(BWmQ3$w1-_x4 z2My*rg?yHmc6Y|t`+KI|{@`5Ze#w}5FV=t2%;g6p$7^BknR4}fS$ISS+}?i|J^ns4 zK~9j$#?oVdGVso=9{m`Dl**otuHgRKQu{?WcO=DJW)5}>|L&u({4Rf!8qdjnu(n+i zbQ21J2=4=fMI~wKn24aj8;(;pY%C(y!|&&lHN8j8l|zi9@#toYn#3&TiG1%@t~%7$ z)I-n5HCpm-wN#Y}lU8yGp^FjSxo4P8@qtE%>b%WHluLQN>tL8{$=&sxPb=vnUb(6{ zb|SdPe8l^U?>k;fReHRDb&8nWQY=>q_~<8{AHyf6ahpLiE~_Lz_7u;KlFWDIQHilr zm@`hNvr|JXd01o`A2Cy5aMo$zBdh{0C&k;;`@SY3$hCQV&N|{xANcFZwPpJ@c$Scw zj0~qbqAt_E^2Q~{XK|AunP5cY=?j^%KrGtn+1LKZ2E-Yu>(PtxQ?+Uj6nHmy?)v3b z-6Li6%Uq`w87-UsMs2`5IX-xS(=Glk8ZpX=aSA36%jgf=`Fzza#F!yBnLQptH

A z;q!x5Or58(w}*Kf{1xK@i~TFIhXDnrF=4w&K7qIhqLuT-@BD{{kCzWVM+;uqB%Keb z9{m8X7~BsXI&GQV5vwFbGsHqZiBt%D?O+=O>x9tE+kd_jzqGW&u?L}6E#lPDF2l2L z9LP3-C+`TWw) zpkjq3_}3Z~6-q<5PA_9Lc}wXA0>wc?Ti%dH4zLx-gDETR_grx*xl%sJVt0=9FX(z1 z&_)<29W9H=af38zXc5FFTvuk!Z)qTA)kHYC&_1CxKN5FcyNcSr{*bU?v8gZqglB(w zFW@y4+0|QqBmrF@pRmD$dn(jB!X#`+tVXNGn-{-`Txu}qKVy?_+^WRZBvftPp&U}& z(wliCAY`-HUK0JCBW=5A9-aM@I4DP?yqex*3jkK?E(kQHjm~*J9wH3 z;P0TYvvJKD?R!{U;QxgMNYmz{-EefHOk$B&ikp9)`_6o1WDOi(WHDSTNsMmHU^fA% zwkeoM%GlkOnUX&unD?9*C`;oGgk$j6TOT;2^Y|ViXAWyxDaWN&yOXErSAK4UX;pSP zJ1v}Iz;IE##Lro>hN^p1ycFsb@vb^$7XJG6x(+^OpTZs$rL4k}%d~VC_YXmV{&3aJ zWGl&=>E0sQr^uSv7vG|F$o2w4H&Z`bR|U!q%jKHx`Y8F2G%^=H&-H5sU|%~8=63be zk8mo-d15PPTqPafq*UXCUM1NN%(N`~$U)u8ZxH*)nbhiK$A zu-Mi3Qc6BpkkA5CsN=(1F?DA&@U*H||AnE0_3~9-$=0JFN^o4Jhtly-X z4`=nE4bBm^_H$@h6Z%fd7(#s+p&s>F{#-o9BKUQCVzb^SQ-j|QjK_BQr#xIm=E1hs7eoFmJ46 zd`^4g#93S=pTT{u<4fP#=CM=GV6GigL*A z831)k$gGBL%IYUwHN=#^h8(H%qvZ~{XQ+01?YeDs;`2iA$S2yByJO+V)2n})Y zmbw%W30A9v|F3LB92vlXIXELA37o)Tfl?5rfd_g)V-0iQE_h8tAK-vJds`3W(Dn#X|W;IO7KAPI_U=>j&OjTRob4F0L5c=iB;PrqV&=7A790%j@c2Io`XoMFB12Dqi79Jt}Pr-peBz|4*&Ho;F!oYfM hF_54wCjC#`|6AmN_*+ENRs((q?`x~@3# Date: Tue, 20 Aug 2024 14:41:38 +0800 Subject: [PATCH 19/63] update excel --- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes data/DB_VIP.dat | Bin 2296 -> 2293 bytes data/DB_VIP.json | 4 +--- public | 2 +- xlsx/DB_VIP.xlsx | Bin 20851 -> 20885 bytes 6 files changed, 2 insertions(+), 4 deletions(-) diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index d669ddae534c532f58b1bc44b6c849d0fdc186bc..cf721cb68ffd15dcd9d38848fb57c3739537c93d 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!*2WB`uS4m}Q2Gj#z6zq1I5-yevI!h$vE|a^U;?YZ4VAwErEfy% zTWIRTIUwev+k;gf&^=h~2a1F3Q{n`>qhakM7Oq$h7O+EL4ux3&a|p~Jum^w!z&r@E a80=7(!9e;B*x~FPi+~>e!py}$TL=JT8ay=s literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUwf4?1AY6s{`5((}&l7pgOQUN}OPKG^~BZ!WGNGg5m*~!(j&AfjS6gFp7tO Y2ErTy^8m!*>>P`L9{s}1#XwsK0Avz8H2?qr diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 31cd7aa6f2f03615362ddbc1fd73713615db5e58..a2207071c816d5e2c32abd530c67ef03e98d383e 100644 GIT binary patch delta 273 zcmdn2xmk0=S|&j@jzzs}0*qc991DT;f?l@C`m!A$T;~Jv$X(3e8pi#FE);g zZOj6j1z9FCPrkw>GI<+&EmXG%RChyX)npfr;>jZHBAZWh*fUNp;Sigwz*PWM#tc>V zV7budgOV diff --git a/data/DB_VIP.dat b/data/DB_VIP.dat index bc0b4f0779b40b861aa7e9217fa7ef3fd7bd6154..81b2a4828462a290e29cb6d819a7592106640fbd 100644 GIT binary patch delta 20 bcmew%_*IaJt9&9;5i29Z2F8?)H8mUnM&br! delta 23 ecmew=_(PD1t7;-s5eG8^1H%T!7wj7=Yd8Q_ZwB-L diff --git a/data/DB_VIP.json b/data/DB_VIP.json index 136ccb2..7717e2d 100644 --- a/data/DB_VIP.json +++ b/data/DB_VIP.json @@ -30,11 +30,9 @@ "更多VIP功能正待开发" ], "Privilege9": [ - 0, - 0, 0 ], - "PrivilegeShow": 1000 + "PrivilegeShow": 100 }, { "Id": 1, diff --git a/public b/public index fc20f70..5436469 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit fc20f707697bffbac116ad93e1c94cc530fd0cf3 +Subproject commit 5436469c04056f83ab69b52b7cdeb5d21832fa94 diff --git a/xlsx/DB_VIP.xlsx b/xlsx/DB_VIP.xlsx index a1f8201bc1a85102bee15f35ddc9c549d61e63c4..eec2439fd383d43d8d9d0a9ad3bc3cc71946518f 100644 GIT binary patch delta 12426 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 From 00b0e0100082fc05e0f671c6cdd0fc323ce4a521 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 21 Aug 2024 10:46:45 +0800 Subject: [PATCH 20/63] =?UTF-8?q?=E6=AF=94=E8=B5=9B=E8=A7=82=E6=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/action_tournament.go | 8 ++-- worldsrv/tmmatch.go | 8 +++- worldsrv/tournament.go | 78 ++++++++++++++++++++++++++++++++--- 3 files changed, 84 insertions(+), 10 deletions(-) diff --git a/worldsrv/action_tournament.go b/worldsrv/action_tournament.go index bcebbf6..dbbbf14 100644 --- a/worldsrv/action_tournament.go +++ b/worldsrv/action_tournament.go @@ -199,13 +199,15 @@ func CSRoomList(s *netlib.Session, packetId int, data interface{}, sid int64) er if v.matchCtx == nil { continue } + + p := PlayerMgrSington.GetPlayerBySnId(v.matchCtx.copySnid) + d := &tournament.MatchPlayer{ SnId: v.matchCtx.copySnid, - Name: v.Name, - HeadUrl: v.HeadUrl, + Name: p.GetName(), UseRoleId: v.matchCtx.copyRoleId, UseSkinId: v.matchCtx.copySkinId, - Rank: v.matchCtx.rank, + Rank: TournamentMgr.GetRank(tm.SortId, v.matchCtx.copySnid), Score: v.matchCtx.grade, } room.Players = append(room.Players, d) diff --git a/worldsrv/tmmatch.go b/worldsrv/tmmatch.go index 482162c..bc23dc5 100644 --- a/worldsrv/tmmatch.go +++ b/worldsrv/tmmatch.go @@ -19,6 +19,10 @@ import ( "mongo.games.com/game/srvdata" ) +func getSortId() int64 { + return time.Now().UnixMilli() +} + type TmPlayer struct { SnId int32 seq int // 报名序号(第几个报名的) @@ -30,6 +34,7 @@ type TmGradeInfo struct { copyLv int32 copyRoleId int32 CopySkinId int32 + rank int32 } type TmMatch struct { @@ -48,7 +53,7 @@ type TmMatch struct { func NewTmMatch(platform string, match *webapi_proto.GameMatchDate, players map[int32]*TmPlayer) *TmMatch { ret := &TmMatch{ - SortId: time.Now().UnixNano(), + SortId: getSortId(), TMId: match.Id, TmPlayer: make(map[int32]*TmPlayer), Platform: platform, @@ -307,6 +312,7 @@ func (tm *TmMatch) RobotGradesDecline(round int) { copyLv: info.copyLv, copyRoleId: info.copyRoleId, CopySkinId: info.CopySkinId, + rank: info.rank, } tm.robotGrades[lastRound][i] = gradeInfo if info.copySnid != 0 { diff --git a/worldsrv/tournament.go b/worldsrv/tournament.go index 02bf60e..8519cf2 100644 --- a/worldsrv/tournament.go +++ b/worldsrv/tournament.go @@ -154,8 +154,8 @@ func (this *Tournament) addFinalPlayer(sortId int64, p *PerRankInfo) { this.finalPerRank[sortId] = append(this.finalPerRank[sortId], p) } -// 查询一场比赛某轮的历史数据 -func (this *Tournament) getRoundPlayer(sortId int64, round int32) *PlayerRoundInfo { +// GetRoundPlayer 查询一场比赛某轮的历史数据 +func (this *Tournament) GetRoundPlayer(sortId int64, round int32) *PlayerRoundInfo { _, ok := this.roundPlayers[sortId] if !ok { return nil @@ -923,6 +923,59 @@ func (this *Tournament) getRank(sortId int64, round, snid int32, isFinals bool) return 0 } +// GetRank 获取排名 +func (this *Tournament) GetRank(sortId int64, snid int32) int32 { + tm := this.GetTm(sortId) + if tm == nil { + return 0 + } + round := this.GetRound(sortId) + useRobot := this.IsRobotOn(tm.gmd) + + robotRankFunc := func(n int, snid int32) int32 { + rank := int32(0) + for _, v := range tm.robotGrades[n] { + if v.copySnid == snid { + return v.rank + } + if v.copySnid == 0 { + rank = v.rank + } + } + return rank + } + + playerRankFunc := func(n int, snid int32) int32 { + d := this.GetRoundPlayer(sortId, int32(n)) + if d != nil { + for _, v := range d.players { + if v.p.SnId == snid { + return v.rank + } + } + } + d = this.GetRoundPlayer(sortId, int32(n-1)) + if d != nil { + for _, v := range d.players { + if v.p.SnId == snid { + return v.rank + } + } + } + return 0 + } + + if round <= 1 { + return 0 + } else { + if useRobot { + return robotRankFunc(int(round-1), snid) + } else { + return playerRankFunc(int(round-1), snid) + } + } +} + // UpdateMatchInfo 玩家比赛结束 更新积分 func (this *Tournament) UpdateMatchInfo(p *Player, sortId int64, grade, isWin int32, matchRobotGrades map[int32]int32) { logger.Logger.Tracef("UpdateMatchInfo: sortId:%v, grade:%v, isWin: %v, matchRobotGrades:%v", sortId, grade, isWin, matchRobotGrades) @@ -999,7 +1052,7 @@ func (this *Tournament) stopMatch(matchId int32, sortId int64) (isOver bool) { // 开启机器人时使用 func (this *Tournament) NextRoundStartSingle(sortId int64, playerCtx *PlayerMatchContext, matchRobotGrades map[int32]int32) { logger.Logger.Tracef("NextRoundStartSingle 当前第 %v 轮", playerCtx.round) - info := this.getRoundPlayer(sortId, playerCtx.round) + info := this.GetRoundPlayer(sortId, playerCtx.round) if info == nil { return } @@ -1042,11 +1095,24 @@ func (this *Tournament) NextRoundStartSingle(sortId int64, playerCtx *PlayerMatc } sort.Slice(arr, func(i, j int) bool { + if arr[i].grade == arr[j].grade { // 真人在前 + if arr[i].copySnid == 0 { + return true + } + if arr[j].copySnid == 0 { + return false + } + } return arr[i].grade > arr[j].grade }) + for k, v := range arr { + v.rank = int32(k + 1) + } + playerCtx.tm.robotGrades[int(round)] = arr for _, info := range arr { - logger.Logger.Tracef("NextRoundStart_Single 本轮积分排名 Snid:%v Grade:%v copyLv:%v copyRoleId:%v", info.copySnid, info.grade, info.copyLv, info.copyRoleId) + logger.Logger.Tracef("NextRoundStart_Single 本轮积分排名 round:%v Snid:%v Grade:%v copyLv:%v copyRoleId:%v rank:%v", + playerCtx.round, info.copySnid, info.grade, info.copyLv, info.copyRoleId, info.rank) } // 获取排名 @@ -1117,7 +1183,7 @@ func (this *Tournament) NextRoundStartSingle(sortId int64, playerCtx *PlayerMatc // 关闭机器时使用 func (this *Tournament) NextRoundStart(sortId int64, playerCtx *PlayerMatchContext) { logger.Logger.Tracef("NextRoundStart 当前第 %v 轮", playerCtx.round) - info := this.getRoundPlayer(sortId, playerCtx.round) + info := this.GetRoundPlayer(sortId, playerCtx.round) if info == nil { return } @@ -1158,7 +1224,7 @@ func (this *Tournament) NextRoundStart(sortId int64, playerCtx *PlayerMatchConte info.players = info.players[len(ps):] willOut := false - if promotionNum1 == this.getRoundPlayer(sortId, playerCtx.round-1).num { + if promotionNum1 == this.GetRoundPlayer(sortId, playerCtx.round-1).num { // 最后一个人打完了,确定要淘汰的人 willOut = true } else { From 71655d81266b603b76cc20da9e36edbde02743f7 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 21 Aug 2024 17:22:58 +0800 Subject: [PATCH 21/63] =?UTF-8?q?=E6=AF=94=E8=B5=9B=E8=A7=82=E6=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/scene.go | 2 +- gamesrv/tienlen/scenepolicy_tienlen.go | 2 +- worldsrv/action_game.go | 182 +++++----- worldsrv/action_server.go | 9 +- worldsrv/action_tournament.go | 6 + worldsrv/coinscenepool.go | 4 +- worldsrv/gamesess.go | 18 +- worldsrv/hundredscenemgr.go | 2 +- worldsrv/matchscenemgr.go | 14 +- worldsrv/player.go | 2 +- worldsrv/scene.go | 461 ++++++++----------------- worldsrv/scenemgr.go | 12 +- worldsrv/trascate_webapi.go | 18 +- 13 files changed, 283 insertions(+), 449 deletions(-) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 9d4bd8c..704027a 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -699,7 +699,7 @@ func (this *Scene) AudienceLeave(p *Player, reason int) { //当前状态不能离场 if !this.CanChangeCoinScene(p) { pack := &gamehall.SCLeaveRoom{ - OpRetCode: (gamehall.OpResultCode_Game(p.OpCode)), //protocol.OpResultCode_OPRC_Hundred_YouHadBetCannotLeave, + OpRetCode: gamehall.OpResultCode_Game(p.OpCode), //protocol.OpResultCode_OPRC_Hundred_YouHadBetCannotLeave, RoomId: proto.Int(this.SceneId), } proto.SetDefaults(pack) diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index aa163e9..57ed170 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -517,7 +517,7 @@ func TienLenCreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *TienLen //手牌 for j := int32(0); j < rule.HandCardNum; j++ { if nowPlayer.cards[j] != rule.InvalideCard { - if s.GetSceneState().GetState() == rule.TienLenSceneStateBilled { //结算状态显示用 + if s.GetSceneState().GetState() == rule.TienLenSceneStateBilled || p.IsMarkFlag(base.PlayerState_Audience) { //结算状态显示用 pd1.Cards = append(pd1.Cards, nowPlayer.cards[j]) } else { pd1.Cards = append(pd1.Cards, rule.InvalideCard) diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 282ea93..db1b05b 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -183,94 +183,6 @@ failed: return nil } -type CSAudienceEnterRoomHandler struct { -} - -func (this *CSAudienceEnterRoomHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { - logger.Logger.Trace("CSAudienceEnterRoomHandler Process recv ", data) - if msg, ok := data.(*gamehall.CSEnterRoom); ok { - p := PlayerMgrSington.GetPlayer(sid) - if p == nil { - return nil - } - var code = gamehall.OpResultCode_Game_OPRC_Sucess_Game - var sp ScenePolicy - var dbGameFree *server.DB_GameFree - var cfg *webapiproto.GameFree - scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId())) - if scene == nil { - code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game - logger.Logger.Trace("CSAudienceEnterRoomHandler scene == nil") - goto failed - } - if !scene.CanAudience() { - code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game - logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.CanAudience() %v", scene.sceneId) - goto failed - } - - if scene.IsMatchScene() && !PlatformMgrSingleton.IsMatchAudience(p.Platform, p.SnId) { - code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game - logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.IsMatchAudience() %v", scene.sceneId) - goto failed - } - if p.scene != nil { - code = gamehall.OpResultCode_Game_OPRC_CannotWatchReasonInOther_Game - logger.Logger.Trace("CSAudienceEnterRoomHandler p.scene != nil") - goto failed - } - cfg = PlatformMgrSingleton.GetGameFree(p.Platform, scene.dbGameFree.Id) - if cfg != nil && (cfg.GroupId != scene.groupId || cfg.GroupId == 0) { - if scene.limitPlatform != nil { - if scene.limitPlatform.Isolated && p.Platform != scene.limitPlatform.IdStr { - code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game - logger.Logger.Tracef("CSEnterRoomHandler ScenePolicy(gameid:%v mode:%v) scene.limitPlatform.Isolated && p.Platform != scene.limitPlatform.Name", scene.gameId, scene.gameMode) - goto failed - } - } - } - //if !scene.starting { - // code = gamehall.OpResultCode_Game_OPRC_CannotWatchReasonRoomNotStart_Game - // logger.Logger.Trace("CSAudienceEnterRoomHandler !scene.starting") - // goto failed - //} - if scene.deleting { - code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game - logger.Logger.Trace("CSAudienceEnterRoomHandler scene is deleting") - goto failed - } - if scene.closed { - code = gamehall.OpResultCode_Game_OPRC_RoomHadClosed_Game - logger.Logger.Trace("CSAudienceEnterRoomHandler scene is closed") - goto failed - } - //if scene.IsCoinScene() || scene.IsHundredScene() { - // code = gamehall.OpResultCode_Game_OPRC_Error_Game - // logger.Logger.Trace("CSAudienceEnterRoomHandler scene is IsCoinScene IsHundredScene") - // goto failed - //} - - sp = GetScenePolicy(scene.gameId, scene.gameMode) - if sp == nil { - code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game - logger.Logger.Tracef("CSAudienceEnterRoomHandler ScenePolicy(gameid:%v mode:%v) not registe", scene.gameId, scene.gameMode) - goto failed - } - dbGameFree = scene.dbGameFree - code = gamehall.OpResultCode_Game(CoinSceneMgrSingleton.AudienceEnter(p, dbGameFree.GetId(), msg.GetRoomId(), nil, true)) - - failed: - if code != gamehall.OpResultCode_Game_OPRC_Sucess_Game { - resp := &gamehall.SCEnterRoom{ - OpRetCode: code, - } - proto.SetDefaults(resp) - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_ENTERROOM), resp) - } - } - return nil -} - type CSReturnRoomPacketFactory struct { } type CSReturnRoomHandler struct { @@ -1235,10 +1147,95 @@ func (this *CSRecordAndNoticeHandler) Process(s *netlib.Session, packetid int, d return nil } +func CSAudienceEnterRoomHandler(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSAudienceEnterRoomHandler Process recv ", data) + msg, ok := data.(*gamehall.CSEnterRoom) + if !ok { + return nil + } + + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + return nil + } + + var code = gamehall.OpResultCode_Game_OPRC_Error_Game + var sp ScenePolicy + var cfg *webapiproto.GameFree + + // 房间是否存在 + scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId())) + if scene == nil { + code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game + logger.Logger.Trace("CSAudienceEnterRoomHandler scene == nil") + goto failed + } + // 房间是否正在销毁 + if scene.deleting { + code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game + logger.Logger.Trace("CSAudienceEnterRoomHandler scene is deleting") + goto failed + } + // 房间是否已经关闭 + if scene.closed { + code = gamehall.OpResultCode_Game_OPRC_RoomHadClosed_Game + logger.Logger.Trace("CSAudienceEnterRoomHandler scene is closed") + goto failed + } + // 玩家没有在房间中 + if p.scene != nil { + code = gamehall.OpResultCode_Game_OPRC_CannotWatchReasonInOther_Game + logger.Logger.Trace("CSAudienceEnterRoomHandler p.scene != nil") + goto failed + } + // 房间是否可以观战 + if !scene.CanAudience() { + code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game + logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.CanAudience() %v", scene.sceneId) + goto failed + } + // 比赛场白名单观众 + if scene.IsMatchScene() && !PlatformMgrSingleton.IsMatchAudience(p.Platform, p.SnId) { + code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game + logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.IsMatchAudience() %v", scene.sceneId) + goto failed + } + // 是不是相同平台 + cfg = PlatformMgrSingleton.GetGameFree(p.Platform, scene.dbGameFree.Id) + if cfg == nil || (scene.limitPlatform != nil && scene.limitPlatform.Isolated && p.Platform != scene.limitPlatform.IdStr) { + code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game + logger.Logger.Tracef("CSEnterRoomHandler ScenePolicy(gameid:%v mode:%v) scene.limitPlatform.Isolated && p.Platform != scene.limitPlatform.Name", scene.gameId, scene.gameMode) + goto failed + } + // 游戏规则是否存在 + sp = GetScenePolicy(scene.gameId, scene.gameMode) + if sp == nil { + code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game + logger.Logger.Tracef("CSAudienceEnterRoomHandler ScenePolicy(gameid:%v mode:%v) not registe", scene.gameId, scene.gameMode) + goto failed + } + + switch { + case scene.IsCoinScene(): + code = gamehall.OpResultCode_Game(CoinSceneMgrSingleton.AudienceEnter(p, cfg.GetDbGameFree().GetId(), msg.GetRoomId(), nil, true)) + case scene.IsHundredScene(): + + case scene.IsMatchScene(): + code = gamehall.OpResultCode_Game(MatchSceneMgrSingleton.AudienceEnter(p, cfg.GetDbGameFree().GetId(), int(msg.GetRoomId()), nil, true)) + } + +failed: + if code != gamehall.OpResultCode_Game_OPRC_Sucess_Game { + resp := &gamehall.SCEnterRoom{ + OpRetCode: code, + } + p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_ENTERROOM), resp) + } + + return nil +} + func init() { - // 观众进入房间 - common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM), &CSAudienceEnterRoomHandler{}) - netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM), &CSEnterRoomPacketFactory{}) // 返回房间 common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_RETURNROOM), &CSReturnRoomHandler{}) netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_RETURNROOM), &CSReturnRoomPacketFactory{}) @@ -1266,4 +1263,7 @@ func init() { //我的游戏信息及平台公告 common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_COMNOTICE), &CSRecordAndNoticeHandler{}) netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_COMNOTICE), &CSRecordAndNoticePacketFactory{}) + + // 观众进入房间 + common.Register(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM), &gamehall.CSEnterRoom{}, CSAudienceEnterRoomHandler) } diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 28e1e1a..6728c10 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -253,8 +253,11 @@ func init() { p.GameCoinTs = gameCoinTs p.dirty = true } - - CoinSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) + if scene.IsMatchScene() { + scene.AudienceLeave(p, int(msg.GetReason())) + } else { + CoinSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) + } //变化金币 p.dirty = true @@ -639,7 +642,7 @@ func init() { if msg, ok := pack.(*serverproto.GWChangeSceneEvent); ok { scene := SceneMgrSingleton.GetScene(int(msg.GetSceneId())) if scene != nil { - scene.PlayerTryChange() + //scene.PlayerTryChange() } } return nil diff --git a/worldsrv/action_tournament.go b/worldsrv/action_tournament.go index dbbbf14..4da5495 100644 --- a/worldsrv/action_tournament.go +++ b/worldsrv/action_tournament.go @@ -212,6 +212,12 @@ func CSRoomList(s *netlib.Session, packetId int, data interface{}, sid int64) er } room.Players = append(room.Players, d) } + sort.Slice(room.Players, func(i, j int) bool { + if room.Players[i].Rank == room.Players[j].Rank { + return room.Players[i].SnId < room.Players[j].SnId + } + return room.Players[i].Rank < room.Players[j].Rank + }) pack.List = append(pack.List, room) } p.SendToClient(int(tournament.TOURNAMENTID_PACKET_TM_SCRoomList), pack) diff --git a/worldsrv/coinscenepool.go b/worldsrv/coinscenepool.go index 6045eac..fb6ac10 100644 --- a/worldsrv/coinscenepool.go +++ b/worldsrv/coinscenepool.go @@ -330,7 +330,7 @@ func (csp *CoinScenePool) onPlayerLeave(s *Scene, p *Player) { // 玩家离开结算空房间的私人房 if s.IsPrivateScene() { if s.IsEmpty() { - s.DoDelete(false) + s.SendGameDelete(false) } return } @@ -345,7 +345,7 @@ func (csp *CoinScenePool) onPlayerLeave(s *Scene, p *Player) { } } if hasCnt > int(csp.dbGameFree.GetCreateRoomNum()) { - s.DoDelete(false) + s.SendGameDelete(false) } } } diff --git a/worldsrv/gamesess.go b/worldsrv/gamesess.go index eb7339a..2d28dd5 100644 --- a/worldsrv/gamesess.go +++ b/worldsrv/gamesess.go @@ -80,18 +80,14 @@ func (this *GameSession) GetSrvId() int32 { // 关闭其上的所有场景 func (this *GameSession) CloseAllScene() { for sceneId, scene := range this.scenes { - if scene.IsMiniGameScene() { - - } else { - scDestroyRoom := &gamehall_proto.SCDestroyRoom{ - RoomId: proto.Int(sceneId), - OpRetCode: gamehall_proto.OpResultCode_Game_OPRC_Sucess_Game, - IsForce: proto.Int(1), - } - proto.SetDefaults(scDestroyRoom) - scene.Broadcast(int(gamehall_proto.GameHallPacketID_PACKET_SC_DESTROYROOM), scDestroyRoom, 0) - SceneMgrSingleton.DestroyScene(sceneId, true) + scDestroyRoom := &gamehall_proto.SCDestroyRoom{ + RoomId: proto.Int(sceneId), + OpRetCode: gamehall_proto.OpResultCode_Game_OPRC_Sucess_Game, + IsForce: proto.Int(1), } + proto.SetDefaults(scDestroyRoom) + scene.Broadcast(int(gamehall_proto.GameHallPacketID_PACKET_SC_DESTROYROOM), scDestroyRoom, 0) + SceneMgrSingleton.DestroyScene(sceneId, true) } this.scenes = nil this.players = nil diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index 2726c9d..fed9fe0 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -392,7 +392,7 @@ func (this *HundredSceneMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCf } if scenes, exist := this.scenesOfPlatform[p.IdStr]; exist { if s, ok := scenes[newCfg.DbGameFree.Id]; ok { - s.DoDelete(false) + s.SendGameDelete(false) } } } diff --git a/worldsrv/matchscenemgr.go b/worldsrv/matchscenemgr.go index 1675d58..9367be7 100644 --- a/worldsrv/matchscenemgr.go +++ b/worldsrv/matchscenemgr.go @@ -5,6 +5,7 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/proto" + hallproto "mongo.games.com/game/protocol/gamehall" "mongo.games.com/game/protocol/server" ) @@ -172,11 +173,22 @@ func (ms *MatchSceneMgr) OnDestroyScene(sceneId int) { delete(ms.scenes, sceneId) } +func (ms *MatchSceneMgr) AudienceEnter(p *Player, id int32, roomId int, exclude []int32, ischangeroom bool) hallproto.OpResultCode { + scene, ok := ms.scenes[roomId] + if !ok { + return hallproto.OpResultCode_OPRC_RoomHadClosed + } + if !scene.AudienceEnter(p, ischangeroom) { + return hallproto.OpResultCode_OPRC_RoomHadClosed + } + return hallproto.OpResultCode_OPRC_Sucess +} + func (ms *MatchSceneMgr) MatchStop(tm *TmMatch) { if SceneMgrSingleton.scenes != nil && tm != nil { for _, scene := range SceneMgrSingleton.scenes { if scene.IsMatchScene() && scene.matchId == tm.SortId { - scene.DoDelete(false) + scene.SendGameDelete(false) } } } diff --git a/worldsrv/player.go b/worldsrv/player.go index 1e405c5..b7959ed 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -1662,7 +1662,7 @@ func (this *Player) OnLogouted() { this.Save(true) } -func (this *Player) MarshalData(gameid int) (d []byte, e error) { +func (this *Player) MarshalData() (d []byte, e error) { d, e = netlib.Gob.Marshal(this.PlayerData) return } diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 407af35..4429361 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -18,7 +18,6 @@ import ( "mongo.games.com/game/model" "mongo.games.com/game/proto" hallproto "mongo.games.com/game/protocol/gamehall" - playerproto "mongo.games.com/game/protocol/player" serverproto "mongo.games.com/game/protocol/server" "mongo.games.com/game/srvdata" ) @@ -50,11 +49,11 @@ type PlayerGameCtx struct { type Scene struct { sceneId int //场景id gameId int //游戏id - gameMode int //游戏模式 + gameMode int //游戏模式(玩法) sceneMode int //房间模式,参考common.SceneMode_XXX params []int64 //场景参数 paramsEx []int32 //其他扩展参数 - playerNum int //人数 + playerNum int //房间最大人数 robotNum int //机器人数量 robotLimit int //最大限制机器人数量 preInviteRobNum int //准备邀请机器人的数量 @@ -145,7 +144,7 @@ func NewScene(agentor, creator int32, id, gameId, gameMode, sceneMode int, clycl s.playerNum = int(sp.GetPlayerNum(s)) s.lastTime = s.createTime - if s.IsHallScene() || s.IsCoinScene() { + if s.IsCoinScene() { code := SceneMgrSingleton.AllocReplayCode() s.replayCode = code } @@ -228,6 +227,13 @@ func (this *Scene) RobotIsLimit() bool { return false } +func (this *Scene) GetPlayerGameCtx(snid int32) *PlayerGameCtx { + if ctx, exist := this.gameCtx[snid]; exist { + return ctx + } + return nil +} + func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { logger.Logger.Infof("(this *Scene:%v) PlayerEnter(%v, %v) ", this.sceneId, p.SnId, pos) @@ -273,15 +279,6 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { this.players[p.SnId] = p this.gameSess.AddPlayer(p) - switch { - case this.IsCoinScene(): - - case this.IsHundredScene(): - - case this.IsMatchScene(): - - } - // 如果正在等待比赛,退赛 if !this.IsMatchScene() { isWaiting, tmid := TournamentMgr.IsMatchWaiting(p.Platform, p.SnId) @@ -458,8 +455,7 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { logger.Logger.Tracef("(this *Scene) PlayerEnter(%v) robot(%v) robotlimit(%v)", name, this.robotNum, this.robotLimit) } - //todo:send add msg to gamesrv - data, err := p.MarshalData(this.gameId) + data, err := p.MarshalData() if err == nil { var gateSid int64 if p.gateSess != nil { @@ -563,158 +559,111 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { } } -func ExePMCmd(s *netlib.Session, cmd string) { - CSPMCmd := &playerproto.CSPMCmd{ - Cmd: proto.String(cmd), +func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool { + logger.Logger.Infof("(this *Scene:%v) AudienceEnter(%v) ", this.sceneId, p.SnId) + p.scene = this + takeCoin := p.Coin + p.takeCoin = takeCoin + this.audiences[p.SnId] = p + this.gameSess.AddPlayer(p) + + data, err := p.MarshalData() + if err != nil { + return false } - proto.SetDefaults(CSPMCmd) - logger.Logger.Trace("CSPMCmd:", CSPMCmd) - s.Send(int(playerproto.PlayerPacketID_PACKET_CS_PMCMD), CSPMCmd) -} -func (this *Scene) GetPlayerGameCtx(snid int32) *PlayerGameCtx { - if ctx, exist := this.gameCtx[snid]; exist { - return ctx + var gateSid int64 + if p.gateSess != nil { + if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil { + sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0) + gateSid = sessionId.Get() + } } - return nil -} -func (this *Scene) PlayerLeave(p *Player, reason int) { - logger.Logger.Infof("(this *Scene:%v) PlayerLeave(%v, %v) ", this.sceneId, p.SnId, reason) - //if !this.IsMatchScene() { - //pack := &hall_proto.SCLeaveRoom{ - // Reason: proto.Int(reason), - // OpRetCode: hall_proto.OpResultCode_Game_OPRC_Sucess_Game, - // Mode: proto.Int(0), - // RoomId: proto.Int(this.sceneId), - //} - //proto.SetDefaults(pack) - //p.SendToClient(int(hall_proto.GameHallPacketID_PACKET_SC_LEAVEROOM), pack) - pack := &hallproto.SCQuitGame{ - Id: int32(this.dbGameFree.Id), - Reason: proto.Int(reason), + msg := &serverproto.WGPlayerEnter{ + Sid: proto.Int64(p.sid), + SnId: proto.Int32(p.SnId), + GateSid: proto.Int64(gateSid), + SceneId: proto.Int(this.sceneId), + PlayerData: data, + TakeCoin: takeCoin, + IsLoaded: proto.Bool(ischangeroom), + IsQM: false, + IParams: p.MarshalIParam(), + SParams: p.MarshalSParam(), + CParams: p.MarshalCParam(), } - pack.OpCode = hallproto.OpResultCode_Game_OPRC_Sucess_Game - proto.SetDefaults(pack) - p.SendToClient(int(hallproto.GameHallPacketID_PACKET_SC_QUITGAME), pack) - //} - //其他人直接从房间退出来 - this.DelPlayer(p) - - // 玩家最后所在游戏 - p.LastGameId = int(this.dbGameFree.GetGameId()) - if !p.IsRob { + if !p.IsRob { //保存下进入时的环境 + p.enterts = time.Now() + this.gameCtx[p.SnId] = &PlayerGameCtx{ + takeCoin: p.takeCoin, + enterTs: p.enterts.Unix(), + } this.lastTime = time.Now() } + this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_AUDIENCEENTER), msg) + return true } func (this *Scene) DelPlayer(p *Player) bool { if p.scene != this { - inroomid := 0 + roomId := 0 if p.scene != nil { - inroomid = p.scene.sceneId + roomId = p.scene.sceneId } - logger.Logger.Warnf("(this *Scene) DelPlayer found player:%v in room:%v but room:%v", p.SnId, inroomid, this.sceneId) + logger.Logger.Errorf("DelPlayer found player:%v in room:%v but room:%v", p.SnId, roomId, this.sceneId) } + if this.gameSess != nil { this.gameSess.DelPlayer(p) } - delete(this.players, p.SnId) + // 玩家离开游戏 + if _, ok := this.players[p.SnId]; ok { + delete(this.players, p.SnId) + if p.IsRobot() { + this.robotNum-- + } + // 记录玩家最近玩游戏的房间 + SceneMgrSingleton.OnPlayerLeaveScene(this, p) + // 玩家最后所在游戏 + p.LastGameId = int(this.dbGameFree.GetGameId()) + } + // 观众离开游戏 + if _, ok := this.audiences[p.SnId]; ok { + delete(this.audiences, p.SnId) + } + for k, v := range this.seats { + if v != nil && v.SnId == p.SnId { + p.pos = -1 + this.seats[k] = nil + break + } + } if !p.IsRob { delete(this.gameCtx, p.SnId) } - p.scene = nil - SceneMgrSingleton.OnPlayerLeaveScene(this, p) - - switch { - case this.IsHundredScene(): - //case this.IsHallScene(): - // PlatformMgrSingleton.OnPlayerLeaveScene(this, p) - // for i := 0; i < this.playerNum; i++ { - // if this.seats[i] == p { - // p.pos = -1 - // this.seats[i] = nil - // break - // } - // } - case this.IsCoinScene() || this.IsMatchScene(): - for i := 0; i < this.playerNum; i++ { - if this.seats[i] == p { - p.pos = -1 - this.seats[i] = nil - break - } - } + if !p.IsRob { + this.lastTime = time.Now() } - - if p.IsRob { - this.robotNum-- - name := this.GetSceneName() - logger.Logger.Tracef("(this *Scene) PlayerLeave(%v) robot(%v) robotlimit(%v)", name, this.robotNum, this.robotLimit) - } - //from gameserver, so don't need send msg return true } -func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool { - logger.Logger.Infof("(this *Scene:%v) AudienceEnter(%v) ", this.sceneId, p.SnId) - p.scene = this - this.audiences[p.SnId] = p - this.gameSess.AddPlayer(p) - - //todo:send add msg to gamesrv - data, err := p.MarshalData(this.gameId) - if err == nil { - var gateSid int64 - if p.gateSess != nil { - if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil { - sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0) - gateSid = sessionId.Get() - } - } - isQuMin := false - //if !p.IsRob { - // pt := PlatformMgrSingleton.GetPackageTag(p.PackageID) - // if pt != nil && pt.SpreadTag == 1 { - // isQuMin = true - // } - //} - msg := &serverproto.WGPlayerEnter{ - Sid: proto.Int64(p.sid), - SnId: proto.Int32(p.SnId), - GateSid: proto.Int64(gateSid), - SceneId: proto.Int(this.sceneId), - PlayerData: data, - IsLoaded: proto.Bool(ischangeroom), - IsQM: proto.Bool(isQuMin), - IParams: p.MarshalIParam(), - SParams: p.MarshalSParam(), - CParams: p.MarshalCParam(), - } - - if !p.IsRob { //保存下进入时的环境 - this.gameCtx[p.SnId] = &PlayerGameCtx{ - takeCoin: p.takeCoin, - enterTs: p.enterts.Unix(), - totalConvertibleFlow: p.TotalConvertibleFlow, - } - this.lastTime = time.Now() - } - - takeCoin := p.Coin - p.takeCoin = takeCoin - msg.TakeCoin = proto.Int64(takeCoin) - proto.SetDefaults(msg) - this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_AUDIENCEENTER), msg) - p.enterts = time.Now() - return true +// PlayerLeave 玩家离开 +func (this *Scene) PlayerLeave(p *Player, reason int) { + logger.Logger.Infof("(this *Scene:%v) PlayerLeave(%v, %v) ", this.sceneId, p.SnId, reason) + pack := &hallproto.SCQuitGame{ + Id: this.dbGameFree.Id, + Reason: proto.Int(reason), } - - return false + pack.OpCode = hallproto.OpResultCode_Game_OPRC_Sucess_Game + p.SendToClient(int(hallproto.GameHallPacketID_PACKET_SC_QUITGAME), pack) + logger.Logger.Tracef("SCQuitGame: %v, %v", p.SnId, pack) + this.DelPlayer(p) } +// AudienceLeave 观众离开 func (this *Scene) AudienceLeave(p *Player, reason int) { logger.Logger.Infof("(this *Scene:%v) AudienceLeave(%v, %v) ", this.sceneId, p.SnId, reason) pack := &hallproto.SCLeaveRoom{ @@ -723,97 +672,25 @@ func (this *Scene) AudienceLeave(p *Player, reason int) { Mode: proto.Int(0), RoomId: proto.Int(this.sceneId), } - proto.SetDefaults(pack) p.SendToClient(int(hallproto.GameHallPacketID_PACKET_SC_LEAVEROOM), pack) - //观众直接从房间退出来 - this.DelAudience(p) - if !p.IsRob { - this.lastTime = time.Now() - } + logger.Logger.Tracef("AudienceLeave SCLeaveRoom: %v, %v", p.SnId, pack) + this.DelPlayer(p) } -func (this *Scene) DelAudience(p *Player) bool { - logger.Logger.Infof("(this *Scene:%v) DelAudience(%v) ", this.sceneId, p.SnId) - if p.scene != this { - return false - } - if this.gameSess != nil { - this.gameSess.DelPlayer(p) - } - delete(this.audiences, p.SnId) - if !p.IsRob { - delete(this.gameCtx, p.SnId) - } - p.scene = nil - SceneMgrSingleton.OnPlayerLeaveScene(this, p) - //from gameserver, so don't need send msg - return true -} - -//观众坐下 -//func (this *Scene) AudienceSit(p *Player, pos int) bool { -// logger.Logger.Infof("(this *Scene:%v) AudienceSit(%v, %v, %v) ", this.sceneId, p.SnId, pos) -// if _, exist := this.audiences[p.SnId]; exist { -// if pos == -1 && !this.IsHundredScene() { //自动匹配;百人场没座位概念 -// for i := 0; i < this.playerNum; i++ { -// if this.seats[i] == nil { -// pos = i -// break -// } -// } -// } -// if pos != -1 || this.IsHundredScene() { -// if !this.IsHundredScene() { -// if this.seats[pos] != nil { -// return false -// } -// p.pos = pos -// p.applyPos = -1 -// this.seats[pos] = p -// } -// delete(this.audiences, p.SnId) -// } -// -// p.scene = this -// this.players[p.SnId] = p -// -// NpcServerAgentSington.OnPlayerEnterScene(this, p) -// if this.IsCoinScene() { -// CoinSceneMgrSingleton.OnPlayerEnter(p, int32(this.sceneId)) -// } else if this.IsHallScene() { -// PlatformMgrSingleton.OnPlayerEnterScene(this, p) -// } -// -// msg := &protocol.WGAudienceSit{ -// SnId: proto.Int32(p.SnId), -// SceneId: proto.Int(this.sceneId), -// Pos: proto.Int(pos), -// } -// p.takeCoin = p.Coin -// msg.TakeCoin = proto.Int64(p.Coin) -// proto.SetDefaults(msg) -// this.SendToGame(int(protocol.MmoPacketID_PACKET_WG_AUDIENCESIT), msg) -// this.lastTime = time.Now() -// return true -// } -// return false -//} - +// AudienceSit 观众坐下 func (this *Scene) AudienceSit(p *Player, pos int) bool { logger.Logger.Infof("(this *Scene:%v) AudienceSit(%v, %v, %v) ", this.sceneId, p.SnId, pos, this.dbGameFree.GetId()) if _, exist := this.audiences[p.SnId]; exist { delete(this.audiences, p.SnId) p.scene = this - this.players[p.SnId] = p - - msg := &serverproto.WGAudienceSit{ - SnId: proto.Int32(p.SnId), - SceneId: proto.Int(this.sceneId), - Pos: proto.Int(pos), - } p.takeCoin = p.Coin - msg.TakeCoin = proto.Int64(p.Coin) - proto.SetDefaults(msg) + this.players[p.SnId] = p + msg := &serverproto.WGAudienceSit{ + SnId: proto.Int32(p.SnId), + TakeCoin: p.Coin, + SceneId: proto.Int(this.sceneId), + Pos: proto.Int(pos), + } this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_AUDIENCESIT), msg) if !p.IsRob { this.lastTime = time.Now() @@ -871,6 +748,8 @@ func (this *Scene) GetAudienceCnt() int { return len(this.audiences) } +// IsFull 是否满人 +// 不包含观众 func (this *Scene) IsFull() bool { return this.GetPlayerCnt() >= this.playerNum } @@ -883,23 +762,24 @@ func (this *Scene) AllIsRobot() bool { return len(this.players) == this.robotNum } +// OnClose 房间销毁 func (this *Scene) OnClose() { scDestroyRoom := &hallproto.SCDestroyRoom{ RoomId: proto.Int(this.sceneId), OpRetCode: hallproto.OpResultCode_Game_OPRC_Sucess_Game, IsForce: proto.Int(1), } - proto.SetDefaults(scDestroyRoom) this.Broadcast(int(hallproto.GameHallPacketID_PACKET_SC_DESTROYROOM), scDestroyRoom, 0) + this.deleting = true this.closed = true this.sp.OnStop(this) - //NpcServerAgentSington.OnSceneClose(this) + for _, p := range this.players { this.DelPlayer(p) } for _, p := range this.audiences { - this.DelAudience(p) + this.DelPlayer(p) } this.players = nil this.audiences = nil @@ -913,17 +793,13 @@ func (this *Scene) SendToGame(packetId int, pack interface{}) bool { } return false } -func (this *Scene) SendToClient(packetid int, rawpack interface{}, excludeId int32) { - for snid, value := range this.players { - if snid == excludeId { + +func (this *Scene) SendToClient(packetId int, pack interface{}, excludeId int32) { + for v, value := range this.players { + if v == excludeId { continue } - value.SendToClient(packetid, rawpack) - } -} -func (this *Scene) BilledRoomCard(snid []int32) { - if this.sp != nil { - this.sp.BilledRoomCard(this, snid) + value.SendToClient(packetId, pack) } } @@ -936,7 +812,7 @@ func (this *Scene) IsLongTimeInactive() bool { return false } -func (this *Scene) DoDelete(isGrace bool) { +func (this *Scene) SendGameDelete(isGrace bool) { if !isGrace { this.deleting = true this.force = true @@ -949,46 +825,32 @@ func (this *Scene) DoDelete(isGrace bool) { logger.Logger.Tracef("WG_DESTROYSCENE: %v", pack) } -func (this *Scene) Shutdown() { - if this.hadCost && this.sp != nil { - this.sp.OnShutdown(this) - } -} - -// 小游戏场 -func (this *Scene) IsMiniGameScene() bool { - return this.sceneId >= common.MiniGameSceneStartId && this.sceneId < common.MiniGameSceneMaxId -} - -// 比赛场 +// IsMatchScene 比赛场 func (this *Scene) IsMatchScene() bool { return this.sceneId >= common.MatchSceneStartId && this.sceneId < common.MatchSceneMaxId } -// 大厅场 -func (this *Scene) IsHallScene() bool { - return this.sceneId >= common.HallSceneStartId && this.sceneId < common.HallSceneMaxId -} - -// 金币场 +// IsCoinScene 金币场 func (this *Scene) IsCoinScene() bool { return this.sceneId >= common.CoinSceneStartId && this.sceneId < common.CoinSceneMaxId } -// 百人场 +// IsHundredScene 百人场 func (this *Scene) IsHundredScene() bool { return this.sceneId >= common.HundredSceneStartId && this.sceneId < common.HundredSceneMaxId } -// 私人房间 +// IsPrivateScene 私人房间 func (this *Scene) IsPrivateScene() bool { return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId || this.sceneMode == common.SceneMode_Private } +// IsSceneMode 房间模式 func (this *Scene) IsSceneMode(mode int) bool { return this.sceneMode == mode } +// IsRankMatch 排位赛 func (this *Scene) IsRankMatch() bool { if this.dbGameFree == nil { return false @@ -996,6 +858,7 @@ func (this *Scene) IsRankMatch() bool { return this.dbGameFree.RankType > 0 } +// IsTestScene 试玩场 func (this *Scene) IsTestScene() bool { if this.dbGameFree != nil { return this.dbGameFree.GetSceneType() == -1 @@ -1010,6 +873,9 @@ func (this *Scene) IsTestScene() bool { } func (this *Scene) GetSceneName() string { + if this.dbGameFree != nil { + return this.dbGameFree.GetName() + this.dbGameFree.GetTitle() + } if len(this.paramsEx) > 0 { dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(this.paramsEx[0]) if dbGameFree != nil { @@ -1020,6 +886,21 @@ func (this *Scene) GetSceneName() string { } func (this *Scene) RandRobotCnt() { + if this.dbGameFree != nil { + numrng := this.dbGameFree.GetRobotNumRng() + if len(numrng) >= 2 { + if numrng[1] == numrng[0] { + this.robotLimit = int(numrng[0]) + } else { + if numrng[1] < numrng[0] { + numrng[1], numrng[0] = numrng[0], numrng[1] + } + this.robotLimit = int(numrng[1]) //int(numrng[0] + rand.Int31n(numrng[1]-numrng[0]) + 1) + } + } + return + } + if len(this.paramsEx) > 0 { gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.paramsEx[0]) if gps != nil { @@ -1045,7 +926,7 @@ func (this *Scene) RandRobotCnt() { } } -func (this *Scene) isPlatform(platform string) bool { +func (this *Scene) IsPlatform(platform string) bool { if platform == "0" || platform == this.limitPlatform.IdStr { return true } @@ -1106,31 +987,7 @@ func (this *Scene) GetTruePlayerCnt() int { return len(this.players) - this.robotNum } -func (this *Scene) GetPlayerType(gameid, gamefreeid int32) (types []int32) { - for _, p := range this.players { - t := int32(0) - if p.IsRob { - t = common.PlayerType_Rob - } else if p.WBLevel < 0 { - t = common.PlayerType_Black - } else if p.WBLevel > 0 { - t = common.PlayerType_White - } else { - pt := p.CheckType(gameid, gamefreeid) - if pt != nil { - t = pt.GetId() - } else { - t = common.PlayerType_Undefine - } - } - if !common.InSliceInt32(types, t) { - types = append(types, t) - } - } - return -} - -func (this *Scene) Broadcast(packetid int, msg rawproto.Message, excludeSid int64) { +func (this *Scene) Broadcast(packetId int, msg rawproto.Message, excludeSid int64) { mgs := make(map[*netlib.Session][]*srvlibproto.MCSessionUnion) for _, p := range this.players { if p != nil { @@ -1159,7 +1016,7 @@ func (this *Scene) Broadcast(packetid int, msg rawproto.Message, excludeSid int6 for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { - pack, err := common.CreateMulticastPacket(packetid, msg, v...) + pack, err := common.CreateMulticastPacket(packetId, msg, v...) if err == nil { proto.SetDefaults(pack) gateSess.Send(int(srvlibproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack) @@ -1171,12 +1028,11 @@ func (this *Scene) Broadcast(packetid int, msg rawproto.Message, excludeSid int6 func (this *Scene) HasSameIp(ip string) bool { for _, p := range this.players { if !p.IsRob { - if p.GMLevel == 0 && p.Ip == ip { + if p.Ip == ip { return true } } } - return false } @@ -1184,45 +1040,6 @@ func (this *Scene) IsPreCreateScene() bool { return this.dbGameFree.GetCreateRoomNum() > 0 } -func (this *Scene) PlayerTryChange() { - var member []*Player - var player *Player - for _, value := range this.players { - if !value.IsRob { - member = append(member, value) - player = value - } - } - if len(member) <= 1 { - return - } - gameFreeId := this.dbGameFree.GetId() - gameConfig := PlatformMgrSingleton.GetGameFree(player.Platform, gameFreeId) - if gameConfig != nil && gameConfig.DbGameFree.GetMatchMode() == 1 { - return - } - for i := 0; i < len(member)-1; i++ { - p := member[i] - other := member[i+1:] - if this.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlaceBySnid(other, p, - this.dbGameFree.GetGameId(), this.dbGameFree.GetSamePlaceLimit()) { - if p.scene.IsPrivateScene() { - //if ClubSceneMgrSington.PlayerInChanging(p) { - // continue - //} - //ClubSceneMgrSington.PlayerTryChange(p, gameFreeId, []int32{int32(this.sceneId)}, false) - } else { - if CoinSceneMgrSingleton.PlayerInChanging(p) { - continue - } - excludeSceneIds := p.lastSceneId[gameFreeId] - CoinSceneMgrSingleton.PlayerTryChange(p, gameFreeId, excludeSceneIds, false) - } - } - - } -} - func (this *Scene) GetParamEx(idx int) int32 { if idx < 0 || idx > len(this.paramsEx) { return -1 @@ -1238,7 +1055,7 @@ func (this *Scene) SetParamEx(idx int, val int32) { } } -func (this *Scene) TryForceDelectMatchInfo() { +func (this *Scene) TryForceDeleteMatchInfo() { if !this.IsMatchScene() { return } diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 9b6b36f..bf4bb2b 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -435,18 +435,18 @@ func (m *SceneMgr) OnMiniTimer() { case s.IsCoinScene(): if s.IsLongTimeInactive() { if s.dbGameFree.GetCreateRoomNum() == 0 { - logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene DoDelete scene:%v IsLongTimeInactive", s.sceneId) - s.DoDelete(false) + logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDelete scene:%v IsLongTimeInactive", s.sceneId) + s.SendGameDelete(false) } if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp != nil && s.csp.GetRoomNum() > int(s.dbGameFree.GetCreateRoomNum()) { - logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene DoDelete scene:%v IsLongTimeInactive", s.sceneId) - s.DoDelete(false) + logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDelete scene:%v IsLongTimeInactive", s.sceneId) + s.SendGameDelete(false) } } case s.IsPrivateScene(): if s.IsLongTimeInactive() { - logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive PrivateScene DoDelete scene:%v IsLongTimeInactive", s.sceneId) - s.DoDelete(false) + logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive PrivateScene SendGameDelete scene:%v IsLongTimeInactive", s.sceneId) + s.SendGameDelete(false) } } } diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 1620b44..2b39fb5 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -1747,24 +1747,24 @@ func init() { switch msg.DestroyType { case 1: //删除所有空房间 for _, s := range SceneMgrSingleton.scenes { - if !s.isPlatform(platform) { + if !s.IsPlatform(platform) { continue } if s != nil && !s.deleting && len(s.players) == 0 { logger.Logger.Warnf("WebService SpecailEmptySceneId destroyroom scene:%v", s.sceneId) - s.TryForceDelectMatchInfo() - s.DoDelete(false) + s.TryForceDeleteMatchInfo() + s.SendGameDelete(false) } } case 2: //删除所有未开始的房间 for _, s := range SceneMgrSingleton.scenes { - if !s.isPlatform(platform) { + if !s.IsPlatform(platform) { continue } if s != nil && !s.deleting && !s.starting && !s.IsHundredScene() { logger.Logger.Warnf("WebService SpecailUnstartSceneId destroyroom scene:%v", s.sceneId) - s.TryForceDelectMatchInfo() - s.DoDelete(false) + s.TryForceDeleteMatchInfo() + s.SendGameDelete(false) } } default: //删除指定房间 @@ -1780,14 +1780,14 @@ func init() { pack.Msg = "the sceneid is nil" return common.ResponseTag_NoFindRoom, pack } - if !s.isPlatform(platform) { + if !s.IsPlatform(platform) { pack.Tag = webapiproto.TagCode_FAILED pack.Msg = "the sceneid is not ower platform" return common.ResponseTag_NoFindRoom, pack } logger.Logger.Warnf("WebService destroyroom scene:%v", s.sceneId) - s.TryForceDelectMatchInfo() - s.DoDelete(false) + s.TryForceDeleteMatchInfo() + s.SendGameDelete(false) } } return common.ResponseTag_Ok, pack From 18e3e5cd7dabbf570a0dc051c780988604823ecf Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 22 Aug 2024 13:49:33 +0800 Subject: [PATCH 22/63] =?UTF-8?q?=E6=AF=94=E8=B5=9B=E8=A7=82=E6=88=98?= =?UTF-8?q?=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 6 +++ model/config.go | 2 +- protocol/player/player.pb.go | 2 +- protocol/player/player.proto | 2 +- public | 2 +- worldsrv/etcd.go | 22 ++++++----- worldsrv/player.go | 76 +++++++++++++++++++++++++++++------- worldsrv/playermgr.go | 16 ++++++++ 8 files changed, 100 insertions(+), 28 deletions(-) diff --git a/common/constant.go b/common/constant.go index 8e66d95..f5b3613 100644 --- a/common/constant.go +++ b/common/constant.go @@ -853,3 +853,9 @@ const ( On = 1 // 开启 Off = 2 // 关闭 ) + +const ( + DataConfigAll = 0 // 全部配置 + DataConfigSprite = 1 // 精灵配置 + DataConfigMatchAudience = 2 // 赛事观战开关 +) diff --git a/model/config.go b/model/config.go index cce71af..f3336f8 100644 --- a/model/config.go +++ b/model/config.go @@ -135,7 +135,7 @@ type AllConfig struct { *webapi.AwardLogConfig // 新手引导配置 *webapi.GuideConfig - MatchAudience map[int32]*webapi.MatchAudience // 比赛观众列表 + MatchAudience map[int32]*webapi.MatchAudience // 比赛观众列表 key: 玩家id // 小精灵配置 *webapi.SpiritConfig } diff --git a/protocol/player/player.pb.go b/protocol/player/player.pb.go index d6670e6..ada7556 100644 --- a/protocol/player/player.pb.go +++ b/protocol/player/player.pb.go @@ -10903,7 +10903,7 @@ type Config struct { // Tp 类型: // 1:小精灵快捷入口 On开关 Value地址 - // 2: ... + // 2:比赛观战开关 On开关 // ... Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` On bool `protobuf:"varint,2,opt,name=On,proto3" json:"On,omitempty"` diff --git a/protocol/player/player.proto b/protocol/player/player.proto index 4b45515..d336347 100644 --- a/protocol/player/player.proto +++ b/protocol/player/player.proto @@ -1351,7 +1351,7 @@ message SCGuideConfig{ message Config{ // Tp 类型: // 1:小精灵快捷入口 On开关 Value地址 - // 2: ... + // 2:比赛观战开关 On开关 // ... int32 Tp = 1; bool On = 2; diff --git a/public b/public index 5436469..e754bb1 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 5436469c04056f83ab69b52b7cdeb5d21832fa94 +Subproject commit e754bb123f44b0f524ec9dd6d67a1e9d2803a7c5 diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index a3bf947..ba725f7 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -323,15 +323,7 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e case *webapi.SpiritConfig: PlatformMgrSingleton.GetConfig(config.Platform).SpiritConfig = config if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(config.Platform, int(playerproto.PlayerPacketID_PACKET_SCDataConfig), &playerproto.SCDataConfig{ - Cfg: []*playerproto.Config{ - { - Tp: 1, - On: config.GetOn() == 1, - Value: config.GetUrl(), - }, - }, - }) + PlayerMgrSington.BroadcastDataConfigToPlatform(config.Platform, common.DataConfigSprite) } default: logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey) @@ -404,8 +396,20 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c switch event.Type { case clientv3.EventTypePut: PlatformMgrSingleton.AddMatchAudience(config) + if !isInit { + p := PlayerMgrSington.GetPlayerBySnId(config.GetSnId()) + if p != nil { + p.SCDataConfig(common.DataConfigMatchAudience) + } + } case clientv3.EventTypeDelete: PlatformMgrSingleton.DelMatchAudience(config) + if !isInit { + p := PlayerMgrSington.GetPlayerBySnId(config.GetSnId()) + if p != nil { + p.SCDataConfig(common.DataConfigMatchAudience) + } + } } default: diff --git a/worldsrv/player.go b/worldsrv/player.go index b7959ed..b02c455 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -3101,8 +3101,8 @@ func (this *Player) SendPlayerInfo() { this.SCItems() // 引导配置 this.SCGuide() - // 小精灵配置 - this.SCSpirit() + // 其它配置 + this.SCDataConfig(common.DataConfigAll) } //func (this *Player) SendJackpotInfo() { @@ -4951,20 +4951,66 @@ func (this *Player) SCGuide() { logger.Logger.Tracef("SCGuideConfig: %v", pack) } -func (this *Player) SCSpirit() { - cfg := PlatformMgrSingleton.GetConfig(this.Platform).SpiritConfig - if cfg == nil { +// DataConfigFuncMap 配置查询方法 +var DataConfigFuncMap = map[int]func(platform string, p *Player) *playerproto.Config{ + common.DataConfigSprite: func(platform string, p *Player) *playerproto.Config { + cfg := PlatformMgrSingleton.GetConfig(platform).SpiritConfig + if cfg == nil { + return nil + } + return &playerproto.Config{ + Tp: common.DataConfigSprite, + On: cfg.On == 1, + Value: cfg.Url, + } + }, + common.DataConfigMatchAudience: func(platform string, p *Player) *playerproto.Config { + if p == nil { + return nil + } + cfg := PlatformMgrSingleton.GetConfig(platform).MatchAudience + if cfg == nil { + return nil + } + d, ok := cfg[p.GetSnId()] + if !ok || d == nil { + return &playerproto.Config{ + Tp: common.DataConfigMatchAudience, + On: false, + } + } + return &playerproto.Config{ + Tp: common.DataConfigMatchAudience, + On: true, + } + }, +} + +// SCDataConfig 通知配置 +// tp 类型 0所有 1小精灵 2比赛观众开关 +func (this *Player) SCDataConfig(tp int) { + if this == nil { return } - pack := &playerproto.SCDataConfig{ - Cfg: []*playerproto.Config{ - { - Tp: 1, - On: cfg.On == 1, - Value: cfg.Url, - }, - }, + pack := &playerproto.SCDataConfig{} + if tp == common.DataConfigAll { + for _, f := range DataConfigFuncMap { + d := f(this.Platform, this) + if d != nil { + pack.Cfg = append(pack.Cfg, d) + } + } + } else { + f, ok := DataConfigFuncMap[tp] + if ok { + d := f(this.Platform, this) + if d != nil { + pack.Cfg = append(pack.Cfg, d) + } + } + } + if len(pack.Cfg) > 0 { + this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCDataConfig), pack) + logger.Logger.Tracef("SCDataConfig: %v", pack) } - this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCDataConfig), pack) - logger.Logger.Tracef("SCDataConfig: %v", pack) } diff --git a/worldsrv/playermgr.go b/worldsrv/playermgr.go index 7d76256..9ee00c9 100644 --- a/worldsrv/playermgr.go +++ b/worldsrv/playermgr.go @@ -15,6 +15,7 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/proto" + playerproto "mongo.games.com/game/protocol/player" serverproto "mongo.games.com/game/protocol/server" "mongo.games.com/game/worldsrv/internal" ) @@ -328,6 +329,21 @@ func (this *PlayerMgr) BroadcastMessageToPlatform(platform string, packetid int, } } +func (this *PlayerMgr) BroadcastDataConfigToPlatform(platform string, tp int) { + packetId := int(playerproto.PlayerPacketID_PACKET_SCDataConfig) + pack := &playerproto.SCDataConfig{} + f, ok := DataConfigFuncMap[tp] + if ok { + d := f(platform, nil) + if d != nil { + pack.Cfg = append(pack.Cfg, d) + } + } + if len(pack.Cfg) > 0 { + this.BroadcastMessageToPlatform(platform, packetId, pack) + } +} + func (this *PlayerMgr) BroadcastMessageToPlatformByFunc(platform string, packetid int, rawpack interface{}, f func(p *Player) bool) { if platform == "" { this.BroadcastMessage(packetid, rawpack) From 7ebe12c3dea3517b2102835d05fb2fb4ae780dbb Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 22 Aug 2024 14:48:06 +0800 Subject: [PATCH 23/63] review --- worldsrv/coinscenemgr.go | 6 +- worldsrv/coinscenepool.go | 4 +- worldsrv/hundredscenemgr.go | 6 +- worldsrv/matchscenemgr.go | 2 +- worldsrv/player.go | 15 ----- worldsrv/scene.go | 39 +++++++++++- worldsrv/scenemgr.go | 123 ++++++++++-------------------------- worldsrv/scenepolicydata.go | 4 -- worldsrv/trascate_webapi.go | 6 +- 9 files changed, 82 insertions(+), 123 deletions(-) diff --git a/worldsrv/coinscenemgr.go b/worldsrv/coinscenemgr.go index 8f25966..007922f 100644 --- a/worldsrv/coinscenemgr.go +++ b/worldsrv/coinscenemgr.go @@ -370,7 +370,7 @@ func (m *CoinSceneMgr) OnPlatformDestroy(p *Platform) { } } } - SceneMgrSingleton.DoDelete(ids, true) + SceneMgrSingleton.SendGameDestroy(ids, true) } func (m *CoinSceneMgr) OnPlatformChangeDisabled(p *Platform, disabled bool) { @@ -395,7 +395,7 @@ func (m *CoinSceneMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCfg *web for _, scene := range cps.scenes { ids = append(ids, scene.sceneId) } - SceneMgrSingleton.DoDelete(ids, true) + SceneMgrSingleton.SendGameDestroy(ids, true) m.TouchCreateRoom(p.IdStr, newCfg.DbGameFree.Id) } } @@ -414,7 +414,7 @@ func (m *CoinSceneMgr) OnPlatformDestroyByGameFreeId(p *Platform, gameFreeId int } } } - SceneMgrSingleton.DoDelete(ids, true) + SceneMgrSingleton.SendGameDestroy(ids, true) } //=========================PlatformGameGroupObserver============================== diff --git a/worldsrv/coinscenepool.go b/worldsrv/coinscenepool.go index fb6ac10..c4782fb 100644 --- a/worldsrv/coinscenepool.go +++ b/worldsrv/coinscenepool.go @@ -330,7 +330,7 @@ func (csp *CoinScenePool) onPlayerLeave(s *Scene, p *Player) { // 玩家离开结算空房间的私人房 if s.IsPrivateScene() { if s.IsEmpty() { - s.SendGameDelete(false) + s.SendGameDestroy(false) } return } @@ -345,7 +345,7 @@ func (csp *CoinScenePool) onPlayerLeave(s *Scene, p *Player) { } } if hasCnt > int(csp.dbGameFree.GetCreateRoomNum()) { - s.SendGameDelete(false) + s.SendGameDestroy(false) } } } diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index fed9fe0..aaedd3c 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -373,7 +373,7 @@ func (this *HundredSceneMgr) OnPlatformDestroy(p *Platform) { for _, scene := range ss { ids = append(ids, scene.sceneId) } - SceneMgrSingleton.DoDelete(ids, true) + SceneMgrSingleton.SendGameDestroy(ids, true) } } @@ -392,7 +392,7 @@ func (this *HundredSceneMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCf } if scenes, exist := this.scenesOfPlatform[p.IdStr]; exist { if s, ok := scenes[newCfg.DbGameFree.Id]; ok { - s.SendGameDelete(false) + s.SendGameDestroy(false) } } } @@ -412,7 +412,7 @@ func (this *HundredSceneMgr) OnPlatformDestroyByGameFreeId(p *Platform, gameFree ids = append(ids, scene.sceneId) } } - SceneMgrSingleton.DoDelete(ids, true) + SceneMgrSingleton.SendGameDestroy(ids, true) } } diff --git a/worldsrv/matchscenemgr.go b/worldsrv/matchscenemgr.go index 9367be7..1016408 100644 --- a/worldsrv/matchscenemgr.go +++ b/worldsrv/matchscenemgr.go @@ -188,7 +188,7 @@ func (ms *MatchSceneMgr) MatchStop(tm *TmMatch) { if SceneMgrSingleton.scenes != nil && tm != nil { for _, scene := range SceneMgrSingleton.scenes { if scene.IsMatchScene() && scene.matchId == tm.SortId { - scene.SendGameDelete(false) + scene.SendGameDestroy(false) } } } diff --git a/worldsrv/player.go b/worldsrv/player.go index b7959ed..517bfb3 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -2415,21 +2415,6 @@ func (this *Player) GetIP() string { return this.Ip } -func (this *Player) CreateScene(sceneId, gameId, gameMode, sceneMode int, numOfGames int32, params []int64, dbGameFree *serverproto.DB_GameFree) (*Scene, hallproto.OpResultCode_Game) { - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Warnf("(this *Player) EnterScene %v, %v GameSessMgrSington.GetMinLoadSess() = nil ", this.SnId, gameId) - return nil, hallproto.OpResultCode_Game_OPRC_SceneServerMaintain_Game - } - - s := SceneMgrSingleton.CreateScene(0, this.SnId, sceneId, gameId, gameMode, sceneMode, 1, numOfGames, params, gs, this.GetPlatform(), 0, dbGameFree, dbGameFree.GetId()) - if s == nil { - logger.Logger.Tracef("(this *Player) EnterScene %v, SceneMgrSingleton.CreateScene() = nil ", this.SnId) - return nil, hallproto.OpResultCode_Game_OPRC_Error_Game - } - return s, hallproto.OpResultCode_Game_OPRC_Sucess_Game -} - func (this *Player) CreateLocalGameScene(sceneId, gameId, gameSite, sceneMode, playerNum int, params []int64, dbGameFree *serverproto.DB_GameFree, baseScore, groupId int32) (*Scene, hallproto.OpResultCode_Game) { gs := GameSessMgrSington.GetMinLoadSess(gameId) diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 4429361..8412ba9 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -606,6 +606,41 @@ func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool { return true } +func (this *Scene) lastScene(p *Player) { + // 记录玩家在每个游戏场次最后进入的房间号 + // 只记录金币场 + if this.IsCoinScene() { + const MINHOLD = 10 + const MAXHOLD = 20 + holdCnt := MINHOLD + if this.csp != nil { + holdCnt = this.csp.GetHasTruePlayerSceneCnt() + 2 + if holdCnt < MINHOLD { + holdCnt = MINHOLD + } + if holdCnt > MAXHOLD { + holdCnt = MAXHOLD + } + } + if p.lastSceneId == nil { + p.lastSceneId = make(map[int32][]int32) + } + id := this.dbGameFree.GetId() + if sceneIds, exist := p.lastSceneId[id]; exist { + if !common.InSliceInt32(sceneIds, int32(this.sceneId)) { + sceneIds = append(sceneIds, int32(this.sceneId)) + cnt := len(sceneIds) + if cnt > holdCnt { + sceneIds = sceneIds[cnt-holdCnt:] + } + p.lastSceneId[id] = sceneIds + } + } else { + p.lastSceneId[id] = []int32{int32(this.sceneId)} + } + } +} + func (this *Scene) DelPlayer(p *Player) bool { if p.scene != this { roomId := 0 @@ -625,7 +660,7 @@ func (this *Scene) DelPlayer(p *Player) bool { this.robotNum-- } // 记录玩家最近玩游戏的房间 - SceneMgrSingleton.OnPlayerLeaveScene(this, p) + this.lastScene(p) // 玩家最后所在游戏 p.LastGameId = int(this.dbGameFree.GetGameId()) } @@ -812,7 +847,7 @@ func (this *Scene) IsLongTimeInactive() bool { return false } -func (this *Scene) SendGameDelete(isGrace bool) { +func (this *Scene) SendGameDestroy(isGrace bool) { if !isGrace { this.deleting = true this.force = true diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index bf4bb2b..f86165e 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -10,7 +10,7 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" serverproto "mongo.games.com/game/protocol/server" - webapi2 "mongo.games.com/game/protocol/webapi" + webapiproto "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/webapi" ) @@ -28,21 +28,13 @@ var SceneMgrSingleton = &SceneMgr{ // SceneMgr 房间管理器 type SceneMgr struct { - BaseClockSinker // 驱动时间事件 + BaseClockSinker // 驱动时间事件 + scenes map[int]*Scene // 房间id: Scene - scenes map[int]*Scene // 房间id: Scene - privateAutoId int // 私人房房间号 - matchAutoId int // 比赛场房间号 - coinSceneAutoId int // 金币场房间号 - hundredSceneAutoId int // 百人场房间号 -} - -func (m *SceneMgr) GetPlatformBySceneId(sceneId int) string { - s := m.GetScene(sceneId) - if s != nil && s.limitPlatform != nil { - return s.limitPlatform.IdStr - } - return "" + privateAutoId int // 私人房房间号 + matchAutoId int // 比赛场房间号 + coinSceneAutoId int // 金币场房间号 + hundredSceneAutoId int // 百人场房间号 } // AllocReplayCode 获取回访码 @@ -87,6 +79,14 @@ func (m *SceneMgr) GenOneMatchSceneId() int { return m.matchAutoId } +func (m *SceneMgr) GetPlatformBySceneId(sceneId int) string { + s := m.GetScene(sceneId) + if s != nil && s.limitPlatform != nil { + return s.limitPlatform.IdStr + } + return "" +} + // GetScene 获取房间对象 func (m *SceneMgr) GetScene(sceneId int) *Scene { if s, exist := m.scenes[sceneId]; exist && !s.deleting { @@ -123,6 +123,8 @@ func (m *SceneMgr) GetScenesByGameFreeId(gameFreeId int32) []*Scene { return scenes } +// GetMatchRoom 获取比赛房间 +// sortId 比赛id func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene { var scenes []*Scene for _, value := range m.scenes { @@ -137,9 +139,10 @@ func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene { } // MarshalAllRoom 获取房间列表 +// 返回 房间列表,总页数,总条数 func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode, clubId, sceneMode, sceneId int, - gameFreeId, snId int32, start, end, pageSize int32) ([]*webapi2.RoomInfo, int32, int32) { - roomInfo := make([]*webapi2.RoomInfo, 0, len(m.scenes)) + gameFreeId, snId int32, start, end, pageSize int32) ([]*webapiproto.RoomInfo, int32, int32) { + roomInfo := make([]*webapiproto.RoomInfo, 0, len(m.scenes)) var isNeedFindAll = false if model.GameParamData.IsFindRoomByGroup && platform != "" && snId != 0 && gameId == 0 && gameMode == 0 && sceneId == -1 && groupId == 0 && clubId == 0 && sceneMode == 0 { @@ -159,7 +162,7 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode platformName = s.limitPlatform.IdStr } - si := &webapi2.RoomInfo{ + si := &webapiproto.RoomInfo{ Platform: platformName, SceneId: int32(s.sceneId), GameId: int32(s.gameId), @@ -266,18 +269,21 @@ func (m *SceneMgr) CreateScene(agentor, creator int32, sceneId, gameId, gameMode numOfGames int32, params []int64, gs *GameSession, limitPlatform *Platform, groupId int32, dbGameFree *serverproto.DB_GameFree, paramsEx ...int32) *Scene { logger.Logger.Trace("(this *SceneMgr) CreateScene ") + // 创建房间 s := NewScene(agentor, creator, sceneId, gameId, gameMode, sceneMode, clycleTimes, numOfGames, params, gs, limitPlatform, groupId, dbGameFree, paramsEx...) if s == nil { return nil } - m.scenes[sceneId] = s + + // 创建水池 if !s.IsMatchScene() && dbGameFree != nil && limitPlatform != nil { //平台水池设置 gs.DetectCoinPoolSetting(limitPlatform.IdStr, dbGameFree.GetId(), s.groupId) } + // 添加到游戏服记录中 gs.AddScene(s) var platformName string if limitPlatform != nil { @@ -298,10 +304,9 @@ func (m *SceneMgr) CreateLocalGameScene(creator int32, sceneId, gameId, gameSite if s == nil { return nil } - m.scenes[sceneId] = s - gs.AddScene(s) + gs.AddScene(s) var platformName string if limitPlatform != nil { platformName = limitPlatform.IdStr @@ -336,44 +341,7 @@ func (m *SceneMgr) DestroyScene(sceneId int, isCompleted bool) { logger.Logger.Infof("(this *SceneMgr) DestroyScene, SceneId=%v", sceneId) } -func (m *SceneMgr) OnPlayerLeaveScene(s *Scene, p *Player) { - logger.Logger.Trace("(this *SceneMgr) OnPlayerLeaveScene", p.SnId) - - // 记录玩家在每个游戏场次最后进入的房间号 - // 只记录金币场 - if s.IsCoinScene() { - const MINHOLD = 10 - const MAXHOLD = 20 - holdCnt := MINHOLD - if s.csp != nil { - holdCnt = s.csp.GetHasTruePlayerSceneCnt() + 2 - if holdCnt < MINHOLD { - holdCnt = MINHOLD - } - if holdCnt > MAXHOLD { - holdCnt = MAXHOLD - } - } - if p.lastSceneId == nil { - p.lastSceneId = make(map[int32][]int32) - } - id := s.dbGameFree.GetId() - if sceneIds, exist := p.lastSceneId[id]; exist { - if !common.InSliceInt32(sceneIds, int32(s.sceneId)) { - sceneIds = append(sceneIds, int32(s.sceneId)) - cnt := len(sceneIds) - if cnt > holdCnt { - sceneIds = sceneIds[cnt-holdCnt:] - } - p.lastSceneId[id] = sceneIds - } - } else { - p.lastSceneId[id] = []int32{int32(s.sceneId)} - } - } -} - -func (m *SceneMgr) DoDelete(sceneId []int, isGrace bool) { +func (m *SceneMgr) SendGameDestroy(sceneId []int, isGrace bool) { if len(sceneId) == 0 { return } @@ -393,31 +361,6 @@ func (m *SceneMgr) DoDelete(sceneId []int, isGrace bool) { srvlib.ServerSessionMgrSington.Broadcast(int(serverproto.SSPacketID_PACKET_WG_DESTROYSCENE), pack, common.GetSelfAreaId(), srvlib.GameServerType) } -// GetThirdScene 获取三方游戏房间 -//func (m *SceneMgr) GetThirdScene(i webapi.IThirdPlatform) *Scene { -// if i == nil { -// return nil -// } -// sceneId := i.GetPlatformBase().SceneId -// scene := m.scenes[sceneId] -// if scene != nil { -// return scene -// } -// -// gs := GameSessMgrSington.GetMinLoadSess(i.GetPlatformBase().BaseGameID) -// if gs != nil { -// limitPlatform := PlatformMgrSingleton.GetPlatform(DefaultPlatform) -// var gameMode = common.SceneMode_Thr -// dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(i.GetPlatformBase().VultGameID) -// scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, i.GetPlatformBase().BaseGameID, gameMode, int(common.SceneMode_Thr), 1, -1, -// []int64{}, gs, limitPlatform, 0, dbGameFree, i.GetPlatformBase().VultGameID) -// return scene -// } else { -// logger.Logger.Errorf("Get %v game min session failed.", i.GetPlatformBase().BaseGameID) -// return nil -// } -//} - //=========================ClockSinker=============================== // InterestClockEvent 接收所有时间事件 @@ -435,18 +378,18 @@ func (m *SceneMgr) OnMiniTimer() { case s.IsCoinScene(): if s.IsLongTimeInactive() { if s.dbGameFree.GetCreateRoomNum() == 0 { - logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDelete scene:%v IsLongTimeInactive", s.sceneId) - s.SendGameDelete(false) + logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) + s.SendGameDestroy(false) } if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp != nil && s.csp.GetRoomNum() > int(s.dbGameFree.GetCreateRoomNum()) { - logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDelete scene:%v IsLongTimeInactive", s.sceneId) - s.SendGameDelete(false) + logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) + s.SendGameDestroy(false) } } case s.IsPrivateScene(): if s.IsLongTimeInactive() { - logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive PrivateScene SendGameDelete scene:%v IsLongTimeInactive", s.sceneId) - s.SendGameDelete(false) + logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive PrivateScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) + s.SendGameDestroy(false) } } } diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 4fd458b..2b03d6f 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -61,10 +61,6 @@ type ScenePolicyData struct { customIndexParams []*ScenePolicyDataParam } -func alignto(val, align int32) int32 { - return (val + align - 1) / align -} - func (spd *ScenePolicyData) Init() bool { spd.nameMap = make(map[string]*ScenePolicyDataParam) spd.aliasNameMap = make(map[string]*ScenePolicyDataParam) diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 2b39fb5..1800f00 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -1753,7 +1753,7 @@ func init() { if s != nil && !s.deleting && len(s.players) == 0 { logger.Logger.Warnf("WebService SpecailEmptySceneId destroyroom scene:%v", s.sceneId) s.TryForceDeleteMatchInfo() - s.SendGameDelete(false) + s.SendGameDestroy(false) } } case 2: //删除所有未开始的房间 @@ -1764,7 +1764,7 @@ func init() { if s != nil && !s.deleting && !s.starting && !s.IsHundredScene() { logger.Logger.Warnf("WebService SpecailUnstartSceneId destroyroom scene:%v", s.sceneId) s.TryForceDeleteMatchInfo() - s.SendGameDelete(false) + s.SendGameDestroy(false) } } default: //删除指定房间 @@ -1787,7 +1787,7 @@ func init() { } logger.Logger.Warnf("WebService destroyroom scene:%v", s.sceneId) s.TryForceDeleteMatchInfo() - s.SendGameDelete(false) + s.SendGameDestroy(false) } } return common.ResponseTag_Ok, pack From 8736f54fe1e934da699f1f00d513befd5d6cace8 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 22 Aug 2024 16:07:17 +0800 Subject: [PATCH 24/63] =?UTF-8?q?=E7=8E=B0=E9=87=91=E8=B4=AD=E4=B9=B0?= =?UTF-8?q?=E5=90=8Evip=E7=BB=8F=E9=AA=8C=E8=8E=B7=E5=BE=97=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/player.go | 8 ++++---- worldsrv/trascate_webapi.go | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/worldsrv/player.go b/worldsrv/player.go index 654bf6e..bcc7c3e 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -3817,9 +3817,9 @@ func (this *Player) SCVIPInfo() { logger.Logger.Tracef("send vipinfo to client:%v", pack) } -func (this *Player) GetVIPExpByPay(payTotal int32) int32 { +func (this *Player) GetVIPExpByPay(payTotal int64) int64 { vips := VipMgrSington.GetVIPcfg(this.Platform) - return int32(math.Floor(float64(payTotal) * vips.MoneyRatio / 100)) + return payTotal * int64(vips.MoneyRatio) } func (this *Player) VIPDraw(id, vip int32) { @@ -3978,7 +3978,7 @@ func (this *Player) GetVIPLevel() int32 { vips := VipMgrSington.GetVIPcfg(this.Platform) vip := int32(0) if vips != nil && this.MoneyPayTotal != 0 { - allExp := int64(float64(this.MoneyPayTotal) * vips.MoneyRatio) + allExp := this.MoneyPayTotal * int64(vips.MoneyRatio) for _, v := range vips.List { if allExp >= int64(v.VipEx) { vip = v.VipId @@ -4111,7 +4111,7 @@ func (this *Player) GetPayGoodsInfo() { this.dirty = true this.SendDiffData() - info.Amount[2] = this.GetVIPExpByPay(info.ConsumeNum) + info.Amount[2] = int32(this.GetVIPExpByPay(int64(info.ConsumeNum))) BagMgrSingleton.AddItems(this, items, 0, info.GainWay, info.Operator, info.Remark, 0, 0, false) diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 1800f00..76435ab 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -3444,7 +3444,7 @@ func init() { player.MoneyTotal += int64(info.ConsumeTypeNum) player.dirty = true player.SendDiffData() - info.Amount[2] = player.GetVIPExpByPay(info.ConsumeNum) + info.Amount[2] = int32(player.GetVIPExpByPay(int64(info.ConsumeNum))) var itemInfo []*playerproto.PayItem var items []*Item From 85ba5689b16cac19d67bdf09da519bcb4682b8e2 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 22 Aug 2024 16:17:51 +0800 Subject: [PATCH 25/63] =?UTF-8?q?=E6=B7=BB=E5=8A=A0tienlen=E6=88=BF?= =?UTF-8?q?=E5=8D=A1=E5=9C=BA=E6=B8=B8=E6=88=8F=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 12 +- data/DB_GameFree.dat | Bin 22776 -> 23210 bytes data/DB_GameFree.json | 100 ++ data/DB_GameRule.dat | Bin 1115 -> 1273 bytes data/DB_GameRule.json | 24 + data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes data/gameconfig/tienlencustom.json | 13 + data/gameconfig/tienlencustom_toend.json | 13 + data/gameconfig/tienlencustom_yl.json | 13 + data/gameconfig/tienlencustom_yl_toend.json | 13 + protocol/server/pbdata.pb.go | 1541 ++++++++++--------- protocol/server/pbdata.proto | 2 + xlsx/DB_GameFree.xlsx | Bin 61827 -> 63243 bytes xlsx/DB_GameRule.xlsx | Bin 12558 -> 12784 bytes 15 files changed, 963 insertions(+), 768 deletions(-) create mode 100644 data/gameconfig/tienlencustom.json create mode 100644 data/gameconfig/tienlencustom_toend.json create mode 100644 data/gameconfig/tienlencustom_yl.json create mode 100644 data/gameconfig/tienlencustom_yl_toend.json diff --git a/common/constant.go b/common/constant.go index f5b3613..fd8a9f0 100644 --- a/common/constant.go +++ b/common/constant.go @@ -66,6 +66,10 @@ const ( GameID_Thirteen8 = 212 // 十三张(八人场) GameID_ThirteenFree = 213 // 十三张(自由场经典场) GameID_ThirteenFreeLaiZi = 214 // 十三张(自由场癞子场) + GameId_TienLenCustom = 215 // tienlen房卡经典版 + GameId_TienLenCustom_yl = 216 // tienlen房卡娱乐版 + GameId_TienLenCustom_toend = 217 // tienlen房卡典版(打到底) + GameId_TienLenCustom_yl_toend = 218 // tienlen房卡娱乐版(打到底) __GameId_Slot_Min__ = 300 //################拉霸类################ GameId_CaiShen = 301 // 财神 GameId_Avengers = 302 // 复仇者联盟 @@ -116,7 +120,9 @@ func IsTienLenYuLe(gameId int) bool { GameId_TienLenSelect_yl, GameId_TienLenRank_yl, GameId_TienLenSelect_yl_toend, - GameId_TienLenRank_yl_toend: + GameId_TienLenRank_yl_toend, + GameId_TienLenCustom_yl, + GameId_TienLenCustom_yl_toend: return true } return false @@ -131,7 +137,9 @@ func IsTienLenToEnd(gameId int) bool { GameId_TienLenSelect_toend, GameId_TienLenSelect_yl_toend, GameId_TienLenRank_toend, - GameId_TienLenRank_yl_toend: + GameId_TienLenRank_yl_toend, + GameId_TienLenCustom_toend, + GameId_TienLenCustom_yl_toend: return true } return false diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index 7ee49a4984bcbd19cd6046bf42d8b3f9d1c9f6b9..f91cbf96ddf4a88212669a12c826ac2ef671a4fe 100644 GIT binary patch delta 370 zcmeydk#W^l#tp~x-O@Nd&S_>85-!P1&C5y6d)Bf4Y45`4yZfKE?vUby@Se`urEs0m z;?HtM2PO~3Bu0Y_<_(NohZva*4K6VKcTGh${U)Quk(DHvzOcO& b-E@ePv6_C1(PG6a{HC)*-M;y-zNsbvL+hDq delta 14 WcmZ3rmGQ?$#tp~xH&+-MX#xN?wFYMZ diff --git a/data/DB_GameFree.json b/data/DB_GameFree.json index 0ddecf2..c02ccb5 100644 --- a/data/DB_GameFree.json +++ b/data/DB_GameFree.json @@ -3424,6 +3424,106 @@ "BetWaterRate": 100, "IsDrop": 1 }, + { + "Id": 2150001, + "Name": "tienlen房卡经典", + "Title": "房卡场", + "GameId": 215, + "GameRule": 21500, + "GameType": 2, + "SceneType": 1, + "Desc": "0", + "ShowType": 3, + "BaseScore": 10, + "BetDec": "10", + "Ai": [ + 0 + ], + "OtherIntParams": [ + 0 + ], + "GameDif": "207", + "GameClass": 1, + "PlatformName": "越南棋牌", + "PlayerWaterRate": 100, + "BetWaterRate": 100, + "IsCustom": 1 + }, + { + "Id": 2160001, + "Name": "tienlen房卡娱乐", + "Title": "房卡场", + "GameId": 216, + "GameRule": 21600, + "GameType": 2, + "SceneType": 1, + "Desc": "0", + "ShowType": 3, + "BaseScore": 10, + "BetDec": "10", + "Ai": [ + 0 + ], + "OtherIntParams": [ + 0 + ], + "GameDif": "207", + "GameClass": 1, + "PlatformName": "越南棋牌", + "PlayerWaterRate": 100, + "BetWaterRate": 100, + "IsCustom": 1 + }, + { + "Id": 2170001, + "Name": "tienlen房卡经典打到底", + "Title": "房卡场", + "GameId": 217, + "GameRule": 21700, + "GameType": 2, + "SceneType": 1, + "Desc": "0", + "ShowType": 3, + "BaseScore": 10, + "BetDec": "10", + "Ai": [ + 0 + ], + "OtherIntParams": [ + 0 + ], + "GameDif": "207", + "GameClass": 1, + "PlatformName": "越南棋牌", + "PlayerWaterRate": 100, + "BetWaterRate": 100, + "IsCustom": 1 + }, + { + "Id": 2180001, + "Name": "tienlen房卡娱乐打到底", + "Title": "房卡场", + "GameId": 218, + "GameRule": 21800, + "GameType": 2, + "SceneType": 1, + "Desc": "0", + "ShowType": 3, + "BaseScore": 10, + "BetDec": "10", + "Ai": [ + 0 + ], + "OtherIntParams": [ + 0 + ], + "GameDif": "207", + "GameClass": 1, + "PlatformName": "越南棋牌", + "PlayerWaterRate": 100, + "BetWaterRate": 100, + "IsCustom": 1 + }, { "Id": 8070001, "Name": "Tienlen经典", diff --git a/data/DB_GameRule.dat b/data/DB_GameRule.dat index 0f2fb338a315bcd66b3338a44c97381c9919d76a..3e94de63ec4cb336d5bdc1b5ebec1784a40de21d 100644 GIT binary patch delta 171 zcmcc3@so3dKXbhz$DielLc%4Psd+i6dCxlbKkZ%ke0TrT)*TYp8LgO&3{ANdIUcM) zSMqel#wR-`NZbG`G2_zWII@yaNCt~3&pIbR?bz^i*Hnp{V72BzwJTP^)yhGwgqVj= Od<(4DVzVDJFCzfqLrwhv delta 12 Tcmey#d7EQ{KlA3d%sh+$Bmo4N diff --git a/data/DB_GameRule.json b/data/DB_GameRule.json index 8295ccb..d200ca5 100644 --- a/data/DB_GameRule.json +++ b/data/DB_GameRule.json @@ -142,6 +142,30 @@ "GameId": 247, "GameDif": "247" }, + { + "Id": 21500, + "Name": "tienlen房卡经典", + "GameId": 215, + "GameDif": "215" + }, + { + "Id": 21600, + "Name": "tienlen房卡娱乐", + "GameId": 216, + "GameDif": "216" + }, + { + "Id": 21700, + "Name": "tienlen房卡经典打到底", + "GameId": 217, + "GameDif": "217" + }, + { + "Id": 21800, + "Name": "tienlen房卡娱乐打到底", + "GameId": 218, + "GameDif": "218" + }, { "Id": 60600, "Name": "愤怒大叔", diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index cf721cb68ffd15dcd9d38848fb57c3739537c93d..f9031710cf856fc3845657304ab3d4d2da51d05f 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;Ik1}#HWz3=%p9;jB=^AVM=@WC6YP$LwU1c1VmVmA4neUPXuut)LtqBLEP{Cq XW+BXAlmJj-=U4>v=oe-#2HHXZW^z0= literal 384 zcmd-w<6snElw#w!*2WB`uS4m}Q2Gj#z6zq1I5-yevI!h$vE|a^U;?YZ4VAwErEfy% zTWIRTIUwev+k;gf&^=h~2a1F3Q{n`>qhakM7Oq$h7O+EL4ux3&a|p~Jum^w!z&r@E a80=7(!9e;B*x~FPi+~>e!py}$TL=JT8ay=s diff --git a/data/DB_Task.dat b/data/DB_Task.dat index a2207071c816d5e2c32abd530c67ef03e98d383e..5c05cb71f34940747b3f81de2a97d99721b9ef06 100644 GIT binary patch delta 305 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 lCIJAdyX=4H93vR1Z=8=#BS4))^5L>CjzSFU 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

b5A5vv219sWR=zGr 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 diff --git a/xlsx/DB_GameRule.xlsx b/xlsx/DB_GameRule.xlsx index eddc77e4e252126ae58c7b821849029fd12a44b1..67bd886dbafaa84c269f78b9947d3264d7b8a4e6 100644 GIT binary patch delta 4831 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 dy!?B2C;C22gWv}`3%^dHzrlovwM71&{tp9PO- delta 4613 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 DdzWbo From ab974063e89e4e0e691f7eb753e7712716a0bb19 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 22 Aug 2024 17:48:10 +0800 Subject: [PATCH 26/63] =?UTF-8?q?tienlen=E6=AF=94=E8=B5=9B=E5=9C=BA?= =?UTF-8?q?=E8=A7=82=E6=88=98=E5=8F=91=E9=80=81=E7=8E=A9=E5=AE=B6=E6=89=8B?= =?UTF-8?q?=E7=89=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/tienlen/scenedata_tienlen.go | 6 + protocol/tienlen/tienlen.pb.go | 329 ++++++++++++++------------- protocol/tienlen/tienlen.proto | 1 + 3 files changed, 176 insertions(+), 160 deletions(-) diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index 7bfc44e..cd8d905 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -619,6 +619,9 @@ func (this *TienLenSceneData) SendHandCard_Match() { proto.SetDefaults(pack) seat.SendToClient(int(tienlen.TienLenPacketID_PACKET_SCTienLenCard), pack) logger.Logger.Trace("SnId: ", seat.SnId, ";SCTienLenCard: ", pack.Cards) + + pack.SnId = seat.SnId + this.BroadcastToAudience(int(tienlen.TienLenPacketID_PACKET_SCTienLenCard), pack) } } @@ -652,6 +655,9 @@ func (this *TienLenSceneData) SendHandCard_Match() { proto.SetDefaults(pack) seat.SendToClient(int(tienlen.TienLenPacketID_PACKET_SCTienLenCard), pack) logger.Logger.Trace("SnId: ", seat.SnId, ";SCTienLenCard: ", pack.Cards) + + pack.SnId = seat.SnId + this.BroadcastToAudience(int(tienlen.TienLenPacketID_PACKET_SCTienLenCard), pack) } } } diff --git a/protocol/tienlen/tienlen.pb.go b/protocol/tienlen/tienlen.pb.go index d75921d..9f4afc6 100644 --- a/protocol/tienlen/tienlen.pb.go +++ b/protocol/tienlen/tienlen.pb.go @@ -1501,6 +1501,7 @@ type SCTienLenCard struct { Cards []int32 `protobuf:"varint,1,rep,packed,name=Cards,proto3" json:"Cards,omitempty"` //手牌 IsOutRecord bool `protobuf:"varint,2,opt,name=IsOutRecord,proto3" json:"IsOutRecord,omitempty"` // 是否有出牌记录 + SnId int32 `protobuf:"varint,3,opt,name=SnId,proto3" json:"SnId,omitempty"` //玩家id } func (x *SCTienLenCard) Reset() { @@ -1549,6 +1550,13 @@ func (x *SCTienLenCard) GetIsOutRecord() bool { return false } +func (x *SCTienLenCard) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + //测试数据 type SCTienLenCardTest struct { state protoimpl.MessageState @@ -2485,171 +2493,172 @@ var file_tienlen_proto_rawDesc = []byte{ 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x22, 0x47, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, + 0x6e, 0x22, 0x5b, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, - 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x11, 0x53, + 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x88, + 0x02, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, + 0x54, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, - 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x2e, 0x47, 0x72, 0x61, - 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, - 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x4c, 0x6f, - 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x72, - 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7f, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, - 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x4e, - 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x44, 0x65, - 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, - 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x3b, 0x0a, 0x19, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, - 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, - 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x1a, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, - 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, - 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x42, 0x6f, 0x6d, 0x62, 0x5f, - 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x42, 0x6f, 0x6d, 0x62, 0x4e, - 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x43, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x5f, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, - 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, - 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, - 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, - 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, - 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, - 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, - 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, - 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, - 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, - 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x27, 0x0a, 0x10, - 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, - 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, - 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x27, - 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, - 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, - 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x28, 0x0a, 0x10, 0x4f, 0x74, 0x68, 0x65, 0x72, - 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, - 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, - 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x31, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x24, 0x0a, - 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x32, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, - 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, - 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x33, 0x12, 0x2a, 0x0a, 0x11, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, - 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, - 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, - 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, - 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, - 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x14, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, - 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x15, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x16, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x20, 0x0a, 0x0c, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x17, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x19, - 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x45, - 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, - 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, - 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x41, 0x0a, 0x1b, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x68, 0x69, - 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x68, 0x69, - 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x68, 0x0a, - 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, - 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, - 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, - 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x50, 0x65, 0x74, 0x53, - 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x2a, 0x3e, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0x80, 0x05, 0x0a, 0x0f, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x5a, 0x45, 0x52, - 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x10, - 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, - 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xfc, - 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xfd, 0x29, - 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, - 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x10, 0x80, 0x2a, 0x12, - 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x81, 0x2a, - 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, 0x82, 0x2a, 0x12, - 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, - 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, 0x2a, 0x12, 0x26, 0x0a, 0x21, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, - 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, 0x86, 0x2a, 0x12, 0x1f, 0x0a, - 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, 0x87, 0x2a, 0x12, 0x1d, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, - 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, 0x88, 0x2a, 0x12, 0x21, 0x0a, - 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x10, 0x89, 0x2a, + 0x2e, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x47, 0x72, + 0x61, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, + 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x39, + 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7f, 0x0a, 0x11, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, + 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x3b, 0x0a, 0x19, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, + 0x72, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x1a, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, + 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, + 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41, 0x75, 0x64, 0x69, + 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x42, + 0x6f, 0x6d, 0x62, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x42, + 0x6f, 0x6d, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x43, 0x61, 0x72, 0x64, 0x5f, 0x70, + 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, + 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, + 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, + 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, + 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, + 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, + 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, + 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, + 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, + 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, + 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, + 0x66, 0x74, 0x5f, 0x31, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, + 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, + 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, + 0x74, 0x32, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, + 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, + 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x28, 0x0a, 0x10, 0x4f, + 0x74, 0x68, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, + 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x31, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, + 0x31, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, + 0x73, 0x5f, 0x32, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x33, 0x12, 0x2a, 0x0a, + 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, + 0x64, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, + 0x75, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x46, 0x69, + 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, + 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x14, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x20, 0x0a, 0x0c, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x15, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x20, + 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x16, + 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, + 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, + 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, + 0x74, 0x33, 0x12, 0x19, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x18, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, + 0x45, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, + 0x1a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, + 0x49, 0x73, 0x57, 0x69, 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, + 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, + 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x41, + 0x0a, 0x1b, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, + 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, + 0x74, 0x22, 0x68, 0x0a, 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, + 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, + 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, + 0x52, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, + 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x2a, 0x3e, 0x0a, 0x0c, 0x4f, + 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0x80, 0x05, 0x0a, 0x0f, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, + 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, + 0x6e, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4f, 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, + 0x70, 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, + 0x10, 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, + 0x64, 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, + 0x10, 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, + 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, - 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, - 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x74, 0x69, 0x65, 0x6e, - 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, + 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, 0x86, + 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, + 0x87, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, 0x88, + 0x2a, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, + 0x74, 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, + 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, 0x1b, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, + 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x42, 0x27, + 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/tienlen/tienlen.proto b/protocol/tienlen/tienlen.proto index af58b66..a5bfbd3 100644 --- a/protocol/tienlen/tienlen.proto +++ b/protocol/tienlen/tienlen.proto @@ -185,6 +185,7 @@ message SCTienLenSmallGameBilled { message SCTienLenCard { repeated int32 Cards = 1; //手牌 bool IsOutRecord = 2; // 是否有出牌记录 + int32 SnId = 3; //玩家id } //测试数据 From 825f22a3bf2fc18f46118a8d3b17e8990bcf3c69 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 22 Aug 2024 17:51:13 +0800 Subject: [PATCH 27/63] update public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index e754bb1..302312b 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit e754bb123f44b0f524ec9dd6d67a1e9d2803a7c5 +Subproject commit 302312bde7d4eca8836828933c5eab055a0b1e15 From a13ed034d767f73dbc39172496ac16036a706caf Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 23 Aug 2024 09:43:51 +0800 Subject: [PATCH 28/63] =?UTF-8?q?=E6=AF=94=E8=B5=9B=E8=A7=82=E6=88=98?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocol/gamehall/game.pb.go | 443 ++++++++++++++++++----------------- protocol/gamehall/game.proto | 1 + public | 2 +- worldsrv/action_game.go | 2 +- 4 files changed, 227 insertions(+), 221 deletions(-) diff --git a/protocol/gamehall/game.pb.go b/protocol/gamehall/game.pb.go index fb0a199..151699a 100644 --- a/protocol/gamehall/game.pb.go +++ b/protocol/gamehall/game.pb.go @@ -50,6 +50,7 @@ const ( OpResultCode_Game_OPRC_AllocRoomIdFailed_Game OpResultCode_Game = 1097 //房间id获取失败 OpResultCode_Game_OPRC_PrivateRoomCountLimit_Game OpResultCode_Game = 1098 //私人房间上限 OpResultCode_Game_OPRC_RoomNotExit OpResultCode_Game = 1099 // 已经不在房间了 + OpResultCode_Game_OPRC_MatchAudience OpResultCode_Game = 1100 // 比赛观战白名单 OpResultCode_Game_OPRC_LowerRice_ScenceMax_Game OpResultCode_Game = 1075 //超过最大下米数量 OpResultCode_Game_OPRC_LowerRice_PlayerMax_Game OpResultCode_Game = 1076 //超过单个用户最大下米数 OpResultCode_Game_OPRC_LowerRice_PlayerDownMax_Game OpResultCode_Game = 1077 @@ -95,6 +96,7 @@ var ( 1097: "OPRC_AllocRoomIdFailed_Game", 1098: "OPRC_PrivateRoomCountLimit_Game", 1099: "OPRC_RoomNotExit", + 1100: "OPRC_MatchAudience", 1075: "OPRC_LowerRice_ScenceMax_Game", 1076: "OPRC_LowerRice_PlayerMax_Game", 1077: "OPRC_LowerRice_PlayerDownMax_Game", @@ -136,6 +138,7 @@ var ( "OPRC_AllocRoomIdFailed_Game": 1097, "OPRC_PrivateRoomCountLimit_Game": 1098, "OPRC_RoomNotExit": 1099, + "OPRC_MatchAudience": 1100, "OPRC_LowerRice_ScenceMax_Game": 1075, "OPRC_LowerRice_PlayerMax_Game": 1076, "OPRC_LowerRice_PlayerDownMax_Game": 1077, @@ -7942,7 +7945,7 @@ var file_game_proto_rawDesc = []byte{ 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, - 0x2a, 0xe6, 0x09, 0x0a, 0x11, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, + 0x2a, 0xff, 0x09, 0x0a, 0x11, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, @@ -7993,226 +7996,228 @@ var file_game_proto_rawDesc = []byte{ 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xca, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, - 0x6f, 0x74, 0x45, 0x78, 0x69, 0x74, 0x10, 0xcb, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, 0x53, 0x63, 0x65, 0x6e, - 0x63, 0x65, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb3, 0x08, 0x12, 0x22, 0x0a, - 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb4, - 0x08, 0x12, 0x26, 0x0a, 0x21, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, - 0x69, 0x63, 0x65, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x4d, 0x61, - 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb5, 0x08, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, 0x72, 0x65, 0x47, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x43, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0xb6, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x50, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x47, 0x61, - 0x6d, 0x65, 0x10, 0xc8, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, - 0x6f, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x10, 0xcf, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x75, 0x73, 0x74, - 0x42, 0x69, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, - 0x65, 0x10, 0xd9, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x70, 0x72, 0x63, 0x5f, 0x43, 0x6c, 0x75, - 0x62, 0x5f, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x73, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x47, 0x61, - 0x6d, 0x65, 0x10, 0x9f, 0x27, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, - 0x5f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0xa8, 0x46, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa9, 0x46, 0x12, 0x19, - 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x45, 0x72, - 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xaa, 0x46, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, - 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xab, 0x46, 0x12, 0x1c, 0x0a, 0x17, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x73, - 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb2, 0x46, 0x2a, 0xd0, 0x17, 0x0a, 0x10, 0x47, 0x61, - 0x6d, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6c, - 0x6c, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x98, - 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4a, - 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x99, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, - 0x4f, 0x4d, 0x10, 0x9a, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9b, 0x11, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, - 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9c, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, - 0x4d, 0x10, 0x9d, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9e, 0x11, 0x12, - 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x45, 0x54, - 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9f, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, - 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xa0, 0x11, 0x12, 0x18, 0x0a, - 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa1, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa2, - 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, - 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa3, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, - 0x10, 0xa4, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x43, 0x41, 0x52, 0x44, 0x47, 0x41, 0x49, 0x4e, 0x57, 0x41, 0x59, 0x10, 0xa5, 0x11, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x53, - 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa6, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, - 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, - 0x41, 0x53, 0x4b, 0x43, 0x48, 0x47, 0x10, 0xa8, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x43, 0x4f, 0x4d, 0x50, 0x4c, - 0x45, 0x54, 0x45, 0x10, 0xa9, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x44, 0x45, 0x4c, 0x10, 0xaa, 0x11, 0x12, 0x1c, - 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x43, 0x4b, - 0x44, 0x52, 0x41, 0x57, 0x50, 0x52, 0x49, 0x5a, 0x45, 0x10, 0xab, 0x11, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x44, 0x52, - 0x41, 0x57, 0x50, 0x52, 0x49, 0x5a, 0x45, 0x10, 0xac, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xaf, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xb0, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xb1, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, 0x10, - 0xb2, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, 0x10, 0xb3, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0xb4, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x47, 0x45, 0x54, 0x4c, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, 0x49, - 0x44, 0x53, 0x10, 0xb5, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x4c, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, - 0x49, 0x44, 0x53, 0x10, 0xb6, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x10, 0xb7, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, - 0xb8, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x10, 0xb9, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc0, 0x11, 0x12, 0x18, 0x0a, - 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc1, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc2, - 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, - 0x45, 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc3, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, - 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc4, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, - 0x53, 0x54, 0x10, 0xc5, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, - 0x45, 0x52, 0x10, 0xc6, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, - 0x56, 0x45, 0x10, 0xc7, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x10, 0xc8, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4e, 0x55, 0x4d, 0x10, - 0xc9, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x42, 0x55, 0x4c, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xca, 0x11, - 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x42, 0x55, - 0x4c, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xcb, 0x11, 0x12, 0x1f, - 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, - 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcc, 0x11, 0x12, - 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x55, 0x53, - 0x54, 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcd, 0x11, - 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, - 0x54, 0x45, 0x52, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xce, 0x11, 0x12, 0x1a, 0x0a, 0x15, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x44, - 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xcf, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x44, 0x47, 0x47, 0x41, 0x4d, - 0x45, 0x10, 0xd0, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd1, 0x11, - 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x41, 0x4e, 0x53, 0x57, - 0x45, 0x52, 0x10, 0xd2, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, 0x49, 0x43, 0x10, 0xd3, 0x11, 0x12, 0x25, 0x0a, 0x20, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, - 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, 0x49, 0x43, - 0x10, 0xd4, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0xd5, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, - 0x4e, 0x54, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0xd6, 0x11, 0x12, 0x1d, 0x0a, - 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd7, 0x11, 0x12, 0x1d, 0x0a, 0x18, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x54, - 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd8, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, - 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd9, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, 0x52, - 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xda, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, - 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdb, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x4c, 0x49, - 0x53, 0x54, 0x10, 0xdc, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, - 0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xdd, 0x11, 0x12, 0x25, 0x0a, 0x20, + 0x6f, 0x74, 0x45, 0x78, 0x69, 0x74, 0x10, 0xcb, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x10, + 0xcc, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, + 0x52, 0x69, 0x63, 0x65, 0x5f, 0x53, 0x63, 0x65, 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x10, 0xb3, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, + 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, + 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb4, 0x08, 0x12, 0x26, 0x0a, 0x21, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, + 0xb5, 0x08, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, + 0x72, 0x65, 0x47, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb6, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xc8, 0x08, 0x12, 0x1c, + 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xcf, 0x08, 0x12, 0x1f, 0x0a, 0x1a, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x75, 0x73, 0x74, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xd9, 0x08, 0x12, 0x1f, 0x0a, + 0x1a, 0x4f, 0x70, 0x72, 0x63, 0x5f, 0x43, 0x6c, 0x75, 0x62, 0x5f, 0x43, 0x6c, 0x75, 0x62, 0x49, + 0x73, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9f, 0x27, 0x12, 0x1b, + 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa8, 0x46, 0x12, 0x1a, 0x0a, 0x15, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x5f, + 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa9, 0x46, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x44, 0x67, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, + 0xaa, 0x46, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x51, 0x75, + 0x6f, 0x74, 0x61, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, + 0x65, 0x10, 0xab, 0x46, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x72, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, + 0xb2, 0x46, 0x2a, 0xd0, 0x17, 0x0a, 0x10, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, + 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4a, + 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x98, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, + 0x10, 0x99, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9a, 0x11, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x52, 0x45, 0x41, + 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9b, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, + 0x10, 0x9c, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9d, 0x11, 0x12, 0x19, 0x0a, + 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, + 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9e, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, + 0x10, 0x9f, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, + 0x4f, 0x4f, 0x4d, 0x10, 0xa0, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa1, 0x11, + 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, + 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa2, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, + 0x10, 0xa3, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa4, 0x11, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x41, 0x52, 0x44, 0x47, 0x41, + 0x49, 0x4e, 0x57, 0x41, 0x59, 0x10, 0xa5, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa6, + 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, + 0x41, 0x53, 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x43, 0x48, 0x47, 0x10, + 0xa8, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x54, 0x41, 0x43, 0x4b, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xa9, 0x11, 0x12, + 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, + 0x4b, 0x44, 0x45, 0x4c, 0x10, 0xaa, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x57, 0x50, 0x52, 0x49, + 0x5a, 0x45, 0x10, 0xab, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x57, 0x50, 0x52, 0x49, 0x5a, 0x45, + 0x10, 0xac, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, + 0x10, 0xaf, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, + 0x10, 0xb0, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, + 0x10, 0xb1, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, 0x10, 0xb2, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, + 0x10, 0xb3, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xb4, 0x11, 0x12, 0x1f, 0x0a, + 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x4c, 0x41, + 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, 0x49, 0x44, 0x53, 0x10, 0xb5, 0x11, 0x12, 0x1f, + 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x4c, + 0x41, 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, 0x49, 0x44, 0x53, 0x10, 0xb6, 0x11, 0x12, + 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, + 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0xb7, 0x11, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, + 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0xb8, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x47, + 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0xb9, 0x11, 0x12, 0x18, 0x0a, 0x13, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x48, + 0x41, 0x4c, 0x4c, 0x10, 0xc0, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc1, 0x11, + 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, + 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc2, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, + 0x4c, 0x10, 0xc3, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc4, + 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48, + 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc5, 0x11, 0x12, 0x1e, + 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xc6, 0x11, 0x12, 0x1e, + 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xc7, 0x11, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x10, 0xc8, 0x11, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4e, 0x55, 0x4d, 0x10, 0xc9, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x42, 0x55, 0x4c, 0x4c, 0x45, 0x54, 0x49, + 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xca, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x42, 0x55, 0x4c, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xcb, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, 0x46, + 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcc, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, + 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcd, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x44, 0x47, 0x47, 0x41, + 0x4d, 0x45, 0x10, 0xce, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xcf, + 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, + 0x45, 0x41, 0x56, 0x45, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd0, 0x11, 0x12, 0x1a, 0x0a, + 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, + 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd1, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x43, + 0x48, 0x41, 0x52, 0x47, 0x45, 0x41, 0x4e, 0x53, 0x57, 0x45, 0x52, 0x10, 0xd2, 0x11, 0x12, 0x25, + 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, + 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, + 0x49, 0x43, 0x10, 0xd3, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, + 0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, 0x49, 0x43, 0x10, 0xd4, 0x11, 0x12, 0x23, 0x0a, 0x1e, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, + 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0xd5, + 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, + 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x46, 0x45, 0x52, 0x10, 0xd6, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, + 0x4d, 0x45, 0x10, 0xd7, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, + 0x45, 0x10, 0xd8, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, + 0x10, 0xd9, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, + 0xda, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, + 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdb, 0x11, + 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, + 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdc, 0x11, 0x12, 0x25, + 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, + 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x10, 0xdd, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, + 0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xde, 0x11, 0x12, 0x2a, 0x0a, 0x25, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, - 0x10, 0xde, 0x11, 0x12, 0x2a, 0x0a, 0x25, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, - 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xdf, 0x11, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe0, - 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, - 0x52, 0x45, 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, - 0x10, 0xe1, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, - 0x49, 0x53, 0x54, 0x10, 0xe2, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, - 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe3, 0x11, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, - 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0xe4, 0x11, 0x12, - 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, - 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, 0x53, 0x54, 0x4f, - 0x52, 0x59, 0x10, 0xe5, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, - 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe6, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, - 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe7, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, - 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, 0x4f, 0x4d, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe9, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x54, - 0x10, 0xeb, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4f, 0x42, 0x53, 0x45, 0x52, 0x56, 0x45, 0x10, 0xec, 0x11, 0x12, - 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, - 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xed, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x47, 0x41, 0x4d, 0x45, 0x46, - 0x52, 0x45, 0x45, 0x10, 0xee, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x53, 0x59, 0x4e, 0x43, 0x10, - 0xef, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x4c, 0x4f, 0x47, 0x10, 0xf0, 0x11, 0x12, 0x19, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, - 0x52, 0x59, 0x4c, 0x4f, 0x47, 0x10, 0xf1, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x42, 0x49, 0x4c, - 0x4c, 0x10, 0xf2, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf3, 0x11, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x55, 0x50, 0x4c, 0x4f, - 0x41, 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf4, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, - 0x54, 0x10, 0xf5, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf6, 0x11, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4f, - 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xf7, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, - 0x45, 0x10, 0xf8, 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x53, 0x57, 0x49, - 0x54, 0x43, 0x48, 0x10, 0xf9, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x10, 0xfa, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc1, 0x3e, 0x12, 0x18, 0x0a, - 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, - 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc2, 0x3e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, - 0x10, 0xc3, 0x3e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc4, 0x3e, 0x12, - 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x4f, 0x52, - 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xc5, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, - 0x52, 0x54, 0x10, 0xc6, 0x3e, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x4c, 0x45, 0x41, 0x56, - 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc7, 0x3e, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x57, 0x49, - 0x54, 0x43, 0x48, 0x46, 0x4c, 0x41, 0x47, 0x10, 0xc8, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x10, 0xc9, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0xca, 0x3e, 0x42, 0x28, 0x5a, 0x26, - 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xdf, 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, + 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe0, 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x50, 0x52, + 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe1, 0x11, 0x12, 0x21, 0x0a, 0x1c, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, + 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe2, 0x11, 0x12, + 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, + 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, + 0xe3, 0x11, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, + 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, + 0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0xe4, 0x11, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, + 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0xe5, 0x11, 0x12, 0x21, + 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x54, + 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe6, + 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, + 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, + 0x4d, 0x10, 0xe7, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, + 0xe8, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe9, 0x11, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, + 0x4d, 0x45, 0x53, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xeb, 0x11, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4f, 0x42, + 0x53, 0x45, 0x52, 0x56, 0x45, 0x10, 0xec, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, + 0xed, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x53, 0x59, 0x4e, 0x43, 0x47, 0x41, 0x4d, 0x45, 0x46, 0x52, 0x45, 0x45, 0x10, 0xee, 0x11, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, + 0x54, 0x45, 0x52, 0x59, 0x53, 0x59, 0x4e, 0x43, 0x10, 0xef, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, + 0x4c, 0x4f, 0x47, 0x10, 0xf0, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x4c, 0x4f, 0x47, 0x10, 0xf1, + 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, + 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x42, 0x49, 0x4c, 0x4c, 0x10, 0xf2, 0x11, 0x12, 0x18, 0x0a, + 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, + 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf3, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf4, + 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, + 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf5, 0x11, 0x12, 0x1a, 0x0a, + 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, + 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf6, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, + 0x10, 0xf7, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xf8, 0x11, 0x12, 0x20, 0x0a, + 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, + 0x45, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xf9, 0x11, 0x12, + 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4e, 0x6f, 0x74, + 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xfa, 0x11, 0x12, 0x18, 0x0a, 0x13, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, + 0x4f, 0x4f, 0x4d, 0x10, 0xc1, 0x3e, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc2, 0x3e, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, + 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc3, 0x3e, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, + 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc4, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, + 0x10, 0xc5, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xc6, 0x3e, 0x12, 0x21, + 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, + 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc7, + 0x3e, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x46, 0x4c, 0x41, 0x47, + 0x10, 0xc8, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0xc9, 0x3e, 0x12, 0x17, 0x0a, 0x12, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x10, 0xca, 0x3e, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, + 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/gamehall/game.proto b/protocol/gamehall/game.proto index 33cc8fb..8f2d081 100644 --- a/protocol/gamehall/game.proto +++ b/protocol/gamehall/game.proto @@ -30,6 +30,7 @@ enum OpResultCode_Game { OPRC_AllocRoomIdFailed_Game = 1097; //房间id获取失败 OPRC_PrivateRoomCountLimit_Game = 1098; //私人房间上限 OPRC_RoomNotExit = 1099; // 已经不在房间了 + OPRC_MatchAudience = 1100; // 不在比赛观战白名单 OPRC_LowerRice_ScenceMax_Game = 1075; //超过最大下米数量 OPRC_LowerRice_PlayerMax_Game = 1076; //超过单个用户最大下米数 diff --git a/public b/public index 302312b..1ebdfd6 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 302312bde7d4eca8836828933c5eab055a0b1e15 +Subproject commit 1ebdfd67f04b361e59c2738d9870867fc44219a4 diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index db1b05b..51843df 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1196,7 +1196,7 @@ func CSAudienceEnterRoomHandler(s *netlib.Session, packetId int, data interface{ } // 比赛场白名单观众 if scene.IsMatchScene() && !PlatformMgrSingleton.IsMatchAudience(p.Platform, p.SnId) { - code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game + code = gamehall.OpResultCode_Game_OPRC_MatchAudience logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.IsMatchAudience() %v", scene.sceneId) goto failed } From 4c0c6f7c2b42f9d99effffdb51f96d5f23e140dc Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 23 Aug 2024 18:10:22 +0800 Subject: [PATCH 29/63] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etcd/keyconf.go | 2 + model/config.go | 32 ++- protocol/webapi/common.pb.go | 518 ++++++++++++++++++++++++++++------- protocol/webapi/common.proto | 29 ++ worldsrv/etcd.go | 161 ++++++++++- 5 files changed, 626 insertions(+), 116 deletions(-) diff --git a/etcd/keyconf.go b/etcd/keyconf.go index 1dc4fd5..0f1813b 100644 --- a/etcd/keyconf.go +++ b/etcd/keyconf.go @@ -41,4 +41,6 @@ const ( ETCDKEY_GUIDE = "/game/guide_config" //新手引导配置 ETCDKEY_MatchAudience = "/game/match_audience" //比赛观众 ETCDKEY_Spirit = "/game/spirit" // 小精灵配置 + ETCDKEY_RoomType = "/game/room_type" // 房间类型配置 + ETCDKEY_RoomConfig = "/game/room_config" // 房间配置 ) diff --git a/model/config.go b/model/config.go index f3336f8..e60e6fa 100644 --- a/model/config.go +++ b/model/config.go @@ -1,10 +1,13 @@ package model import ( + "strconv" + + "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/common" "mongo.games.com/game/protocol/shop" "mongo.games.com/game/protocol/webapi" - "strconv" ) /* @@ -138,6 +141,10 @@ type AllConfig struct { MatchAudience map[int32]*webapi.MatchAudience // 比赛观众列表 key: 玩家id // 小精灵配置 *webapi.SpiritConfig + // 房卡场房间类型 + RoomType map[int32]*webapi.RoomType // key: 房间类型id + // 房卡场房间配置 + RoomConfig map[int32]*webapi.RoomConfig // key: 房间配置id } type GlobalConfig struct { @@ -167,6 +174,8 @@ func (cm *ConfigMgr) GetConfig(platform string) *AllConfig { ShopInfos: make(map[int32]*ShopInfo), ChannelSwitch: make(map[int32]*webapi.ChannelSwitchConfig), MatchAudience: make(map[int32]*webapi.MatchAudience), + RoomType: make(map[int32]*webapi.RoomType), + RoomConfig: make(map[int32]*webapi.RoomConfig), } cm.platform[platform] = c } @@ -366,8 +375,9 @@ func (cm *ConfigMgr) AddMatchAudience(d *webapi.MatchAudience) { cfg.MatchAudience[d.GetSnId()] = d } -func (cm *ConfigMgr) DelMatchAudience(d *webapi.MatchAudience) { - delete(cm.GetConfig(d.Platform).MatchAudience, d.GetSnId()) +func (cm *ConfigMgr) DelMatchAudience(plt string, snid int32) { + logger.Logger.Tracef("del match audience plt:%s, snid:%d", plt, snid) + delete(cm.GetConfig(plt).MatchAudience, snid) } // IsMatchAudience 是不是比赛场观众 @@ -375,3 +385,19 @@ func (cm *ConfigMgr) IsMatchAudience(plt string, snId int32) bool { _, ok := cm.GetConfig(plt).MatchAudience[snId] return ok } + +func (cm *ConfigMgr) UpdateRoomType(data *webapi.RoomType) { + cm.GetConfig(data.GetPlatform()).RoomType[data.GetId()] = data +} + +func (cm *ConfigMgr) DelRoomType(plt string, id int32) { + delete(cm.GetConfig(plt).RoomType, id) +} + +func (cm *ConfigMgr) UpdateRoomConfig(data *webapi.RoomConfig) { + cm.GetConfig(data.GetPlatform()).RoomConfig[data.GetId()] = data +} + +func (cm *ConfigMgr) DelRoomConfig(plt string, id int32) { + delete(cm.GetConfig(plt).RoomConfig, id) +} diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index cecb617..d672d3c 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -8273,6 +8273,254 @@ func (x *SpiritConfig) GetUrl() string { return "" } +// etcd /game/room_type +type RoomType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台 + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 配置ID + Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"` // 类型名称 + On int32 `protobuf:"varint,4,opt,name=On,proto3" json:"On,omitempty"` // 开关 1开启 2关闭 + SortId int32 `protobuf:"varint,5,opt,name=SortId,proto3" json:"SortId,omitempty"` // 排序ID +} + +func (x *RoomType) Reset() { + *x = RoomType{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoomType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoomType) ProtoMessage() {} + +func (x *RoomType) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[88] + 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 RoomType.ProtoReflect.Descriptor instead. +func (*RoomType) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{88} +} + +func (x *RoomType) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *RoomType) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *RoomType) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoomType) GetOn() int32 { + if x != nil { + return x.On + } + return 0 +} + +func (x *RoomType) GetSortId() int32 { + if x != nil { + return x.SortId + } + return 0 +} + +// etcd /game/room_config +type RoomConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台 + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 配置id + Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"` // 配置名称 + RoomType int32 `protobuf:"varint,4,opt,name=RoomType,proto3" json:"RoomType,omitempty"` // 房间类型id + On int32 `protobuf:"varint,5,opt,name=On,proto3" json:"On,omitempty"` // 开关 1开启 2关闭 + SortId int32 `protobuf:"varint,6,opt,name=SortId,proto3" json:"SortId,omitempty"` // 排序ID + Cost []*ItemInfo `protobuf:"bytes,7,rep,name=Cost,proto3" json:"Cost,omitempty"` // 进入房间消耗 + Reward []*ItemInfo `protobuf:"bytes,8,rep,name=Reward,proto3" json:"Reward,omitempty"` // 进入房间奖励 + OnChannelName []string `protobuf:"bytes,9,rep,name=OnChannelName,proto3" json:"OnChannelName,omitempty"` // 开启的渠道名称 + GameFreeId []int32 `protobuf:"varint,10,rep,packed,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` // 场次id + Round []int32 `protobuf:"varint,11,rep,packed,name=Round,proto3" json:"Round,omitempty"` // 局数 + PlayerNum []int32 `protobuf:"varint,12,rep,packed,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` // 人数 + NeedPassword int32 `protobuf:"varint,13,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` // 是否需要密码 1是 2否 3自定义 + CostType int32 `protobuf:"varint,14,opt,name=CostType,proto3" json:"CostType,omitempty"` // 消耗类型 1AA 2房主 3自定义 + Voice int32 `protobuf:"varint,15,opt,name=Voice,proto3" json:"Voice,omitempty"` // 是否开启语音 1是 2否 3自定义 + ImageURI string `protobuf:"bytes,16,opt,name=ImageURI,proto3" json:"ImageURI,omitempty"` // 奖励图片 +} + +func (x *RoomConfig) Reset() { + *x = RoomConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoomConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoomConfig) ProtoMessage() {} + +func (x *RoomConfig) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[89] + 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 RoomConfig.ProtoReflect.Descriptor instead. +func (*RoomConfig) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{89} +} + +func (x *RoomConfig) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *RoomConfig) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *RoomConfig) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoomConfig) GetRoomType() int32 { + if x != nil { + return x.RoomType + } + return 0 +} + +func (x *RoomConfig) GetOn() int32 { + if x != nil { + return x.On + } + return 0 +} + +func (x *RoomConfig) GetSortId() int32 { + if x != nil { + return x.SortId + } + return 0 +} + +func (x *RoomConfig) GetCost() []*ItemInfo { + if x != nil { + return x.Cost + } + return nil +} + +func (x *RoomConfig) GetReward() []*ItemInfo { + if x != nil { + return x.Reward + } + return nil +} + +func (x *RoomConfig) GetOnChannelName() []string { + if x != nil { + return x.OnChannelName + } + return nil +} + +func (x *RoomConfig) GetGameFreeId() []int32 { + if x != nil { + return x.GameFreeId + } + return nil +} + +func (x *RoomConfig) GetRound() []int32 { + if x != nil { + return x.Round + } + return nil +} + +func (x *RoomConfig) GetPlayerNum() []int32 { + if x != nil { + return x.PlayerNum + } + return nil +} + +func (x *RoomConfig) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *RoomConfig) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *RoomConfig) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +func (x *RoomConfig) GetImageURI() string { + if x != nil { + return x.ImageURI + } + return "" +} + var File_common_proto protoreflect.FileDescriptor var file_common_proto_rawDesc = []byte{ @@ -9569,10 +9817,46 @@ var file_common_proto_rawDesc = []byte{ 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, - 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, + 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0xcc, + 0x03, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, + 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, + 0x64, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, + 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, + 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, + 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, + 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x42, 0x26, 0x5a, + 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9587,7 +9871,7 @@ func file_common_proto_rawDescGZIP() []byte { return file_common_proto_rawDescData } -var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 98) +var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 100) var file_common_proto_goTypes = []interface{}{ (*MysqlDbSetting)(nil), // 0: webapi.MysqlDbSetting (*MongoDbSetting)(nil), // 1: webapi.MongoDbSetting @@ -9677,105 +9961,109 @@ var file_common_proto_goTypes = []interface{}{ (*GuideConfig)(nil), // 85: webapi.GuideConfig (*MatchAudience)(nil), // 86: webapi.MatchAudience (*SpiritConfig)(nil), // 87: webapi.SpiritConfig - nil, // 88: webapi.Platform.BindTelRewardEntry - nil, // 89: webapi.PlayerData.RankScoreEntry - nil, // 90: webapi.ItemShop.AwardEntry - nil, // 91: webapi.VIPcfg.AwardEntry - nil, // 92: webapi.VIPcfg.Privilege1Entry - nil, // 93: webapi.VIPcfg.Privilege7Entry - nil, // 94: webapi.VIPcfg.Privilege9Entry - nil, // 95: webapi.ActInviteConfig.PayScoreEntry - nil, // 96: webapi.SkinLevel.UpItemEntry - nil, // 97: webapi.SkinItem.UnlockParamEntry - (*server.DB_GameFree)(nil), // 98: server.DB_GameFree - (*server.DB_GameItem)(nil), // 99: server.DB_GameItem + (*RoomType)(nil), // 88: webapi.RoomType + (*RoomConfig)(nil), // 89: webapi.RoomConfig + nil, // 90: webapi.Platform.BindTelRewardEntry + nil, // 91: webapi.PlayerData.RankScoreEntry + nil, // 92: webapi.ItemShop.AwardEntry + nil, // 93: webapi.VIPcfg.AwardEntry + nil, // 94: webapi.VIPcfg.Privilege1Entry + nil, // 95: webapi.VIPcfg.Privilege7Entry + nil, // 96: webapi.VIPcfg.Privilege9Entry + nil, // 97: webapi.ActInviteConfig.PayScoreEntry + nil, // 98: webapi.SkinLevel.UpItemEntry + nil, // 99: webapi.SkinItem.UnlockParamEntry + (*server.DB_GameFree)(nil), // 100: server.DB_GameFree + (*server.DB_GameItem)(nil), // 101: server.DB_GameItem } var file_common_proto_depIdxs = []int32{ - 2, // 0: webapi.Platform.Leaderboard:type_name -> webapi.RankSwitch - 3, // 1: webapi.Platform.ClubConfig:type_name -> webapi.ClubConfig - 4, // 2: webapi.Platform.ThirdGameMerchant:type_name -> webapi.ThirdGame - 88, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry - 6, // 4: webapi.GameConfigGlobal.GameStatus:type_name -> webapi.GameStatus - 98, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree - 8, // 6: webapi.PlatformGameConfig.DbGameFrees:type_name -> webapi.GameFree - 0, // 7: webapi.PlatformDbConfig.Mysql:type_name -> webapi.MysqlDbSetting - 1, // 8: webapi.PlatformDbConfig.MongoDb:type_name -> webapi.MongoDbSetting - 1, // 9: webapi.PlatformDbConfig.MongoDbLog:type_name -> webapi.MongoDbSetting - 98, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree - 89, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry - 32, // 12: webapi.PlayerData.Items:type_name -> webapi.ItemInfo - 14, // 13: webapi.PlayerData.RoleUnlockList:type_name -> webapi.ModInfo - 14, // 14: webapi.PlayerData.PetUnlockList:type_name -> webapi.ModInfo - 14, // 15: webapi.PlayerData.PetSkillUnlockList:type_name -> webapi.ModInfo - 14, // 16: webapi.PlayerData.SkinUnlockList:type_name -> webapi.ModInfo - 21, // 17: webapi.OnlineReport.GameCount:type_name -> webapi.OnlineGameCnt - 23, // 18: webapi.CommonNoticeList.List:type_name -> webapi.CommonNotice - 27, // 19: webapi.ExchangeShop.ExType:type_name -> webapi.ExchangeType - 26, // 20: webapi.ExchangeShop.TelData:type_name -> webapi.TelChargeData - 32, // 21: webapi.ExchangeShop.Items:type_name -> webapi.ItemInfo - 25, // 22: webapi.ExchangeShopList.List:type_name -> webapi.ExchangeShop - 29, // 23: webapi.ExchangeShopList.Weight:type_name -> webapi.ShopWeight - 90, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry - 30, // 25: webapi.ItemShopList.List:type_name -> webapi.ItemShop - 32, // 26: webapi.MatchInfoAward.ItemId:type_name -> webapi.ItemInfo - 33, // 27: webapi.GameMatchDate.Award:type_name -> webapi.MatchInfoAward - 32, // 28: webapi.GameMatchDate.SignupCostItem:type_name -> webapi.ItemInfo - 34, // 29: webapi.GameMatchDateList.List:type_name -> webapi.GameMatchDate - 36, // 30: webapi.GameMatchType.List:type_name -> webapi.MatchTypeInfo - 38, // 31: webapi.WelfareTurnplateDate.Date:type_name -> webapi.WelfareDate - 39, // 32: webapi.WelfareTurnplateDateList.List:type_name -> webapi.WelfareTurnplateDate - 40, // 33: webapi.WelfareTurnplateDateList.RateList:type_name -> webapi.WelfareTurnplateRate - 38, // 34: webapi.AddUpWelfareDate.AddUpDate:type_name -> webapi.WelfareDate - 38, // 35: webapi.Welfare7SignDate.Date:type_name -> webapi.WelfareDate - 42, // 36: webapi.Welfare7SignDate.AddUpDate:type_name -> webapi.AddUpWelfareDate - 42, // 37: webapi.Welfare7SignDate.AddUpDate2:type_name -> webapi.AddUpWelfareDate - 42, // 38: webapi.Welfare7SignDate.AddUpDate2Google:type_name -> webapi.AddUpWelfareDate - 43, // 39: webapi.Welfare7SignDate.AddUpDate2Type:type_name -> webapi.AddUpDate2TypeData - 44, // 40: webapi.Welfare7SignDateList.List:type_name -> webapi.Welfare7SignDate - 46, // 41: webapi.WelfareBlindBoxDataList.List:type_name -> webapi.BlindBoxData - 38, // 42: webapi.WelfareSpree.Item:type_name -> webapi.WelfareDate - 48, // 43: webapi.WelfareFirstPayDataList.List:type_name -> webapi.WelfareSpree - 48, // 44: webapi.WelfareContinuousPayDataList.List:type_name -> webapi.WelfareSpree - 91, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry - 92, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry - 93, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry - 94, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry - 51, // 49: webapi.VIPcfgDataList.List:type_name -> webapi.VIPcfg - 38, // 50: webapi.ChessRankConfig.Item:type_name -> webapi.WelfareDate - 55, // 51: webapi.ChessRankcfgData.Datas:type_name -> webapi.ChessRankConfig - 95, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry - 62, // 53: webapi.ActInviteConfig.Awards1:type_name -> webapi.RankAward - 62, // 54: webapi.ActInviteConfig.Awards2:type_name -> webapi.RankAward - 62, // 55: webapi.ActInviteConfig.Awards3:type_name -> webapi.RankAward - 32, // 56: webapi.PermitLevelConfig.Award1:type_name -> webapi.ItemInfo - 32, // 57: webapi.PermitLevelConfig.Award2:type_name -> webapi.ItemInfo - 32, // 58: webapi.PermitExchangeConfig.Gain:type_name -> webapi.ItemInfo - 32, // 59: webapi.PermitExchangeConfig.Cost:type_name -> webapi.ItemInfo - 32, // 60: webapi.PermitRankConfig.ItemId:type_name -> webapi.ItemInfo - 64, // 61: webapi.PermitChannelConfig.LevelConfig:type_name -> webapi.PermitLevelConfig - 65, // 62: webapi.PermitChannelConfig.ExchangeConfig:type_name -> webapi.PermitExchangeConfig - 66, // 63: webapi.PermitChannelConfig.RankConfig:type_name -> webapi.PermitRankConfig - 67, // 64: webapi.ActPermitConfig.Configs:type_name -> webapi.PermitChannelConfig - 71, // 65: webapi.DiamondLotteryPlayers.Award:type_name -> webapi.AwardData - 69, // 66: webapi.DiamondLotteryData.Info:type_name -> webapi.DiamondLotteryInfo - 70, // 67: webapi.DiamondLotteryData.Players:type_name -> webapi.DiamondLotteryPlayers - 72, // 68: webapi.DiamondLotteryConfig.LotteryData:type_name -> webapi.DiamondLotteryData - 99, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem - 32, // 70: webapi.RankAwardInfo.Item:type_name -> webapi.ItemInfo - 75, // 71: webapi.RankTypeInfo.Award:type_name -> webapi.RankAwardInfo - 76, // 72: webapi.RankTypeConfig.Info:type_name -> webapi.RankTypeInfo - 96, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry - 97, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry - 78, // 75: webapi.SkinItem.Levels:type_name -> webapi.SkinLevel - 79, // 76: webapi.SkinConfig.Items:type_name -> webapi.SkinItem - 82, // 77: webapi.AwardLogConfig.AwardLog:type_name -> webapi.AwardLogData - 84, // 78: webapi.AwardLogConfig.AnnouncerLog:type_name -> webapi.AnnouncerLogInfo - 83, // 79: webapi.AwardLogData.AwardLog:type_name -> webapi.AwardLogInfo - 80, // [80:80] is the sub-list for method output_type - 80, // [80:80] is the sub-list for method input_type - 80, // [80:80] is the sub-list for extension type_name - 80, // [80:80] is the sub-list for extension extendee - 0, // [0:80] is the sub-list for field type_name + 2, // 0: webapi.Platform.Leaderboard:type_name -> webapi.RankSwitch + 3, // 1: webapi.Platform.ClubConfig:type_name -> webapi.ClubConfig + 4, // 2: webapi.Platform.ThirdGameMerchant:type_name -> webapi.ThirdGame + 90, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry + 6, // 4: webapi.GameConfigGlobal.GameStatus:type_name -> webapi.GameStatus + 100, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree + 8, // 6: webapi.PlatformGameConfig.DbGameFrees:type_name -> webapi.GameFree + 0, // 7: webapi.PlatformDbConfig.Mysql:type_name -> webapi.MysqlDbSetting + 1, // 8: webapi.PlatformDbConfig.MongoDb:type_name -> webapi.MongoDbSetting + 1, // 9: webapi.PlatformDbConfig.MongoDbLog:type_name -> webapi.MongoDbSetting + 100, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree + 91, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry + 32, // 12: webapi.PlayerData.Items:type_name -> webapi.ItemInfo + 14, // 13: webapi.PlayerData.RoleUnlockList:type_name -> webapi.ModInfo + 14, // 14: webapi.PlayerData.PetUnlockList:type_name -> webapi.ModInfo + 14, // 15: webapi.PlayerData.PetSkillUnlockList:type_name -> webapi.ModInfo + 14, // 16: webapi.PlayerData.SkinUnlockList:type_name -> webapi.ModInfo + 21, // 17: webapi.OnlineReport.GameCount:type_name -> webapi.OnlineGameCnt + 23, // 18: webapi.CommonNoticeList.List:type_name -> webapi.CommonNotice + 27, // 19: webapi.ExchangeShop.ExType:type_name -> webapi.ExchangeType + 26, // 20: webapi.ExchangeShop.TelData:type_name -> webapi.TelChargeData + 32, // 21: webapi.ExchangeShop.Items:type_name -> webapi.ItemInfo + 25, // 22: webapi.ExchangeShopList.List:type_name -> webapi.ExchangeShop + 29, // 23: webapi.ExchangeShopList.Weight:type_name -> webapi.ShopWeight + 92, // 24: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry + 30, // 25: webapi.ItemShopList.List:type_name -> webapi.ItemShop + 32, // 26: webapi.MatchInfoAward.ItemId:type_name -> webapi.ItemInfo + 33, // 27: webapi.GameMatchDate.Award:type_name -> webapi.MatchInfoAward + 32, // 28: webapi.GameMatchDate.SignupCostItem:type_name -> webapi.ItemInfo + 34, // 29: webapi.GameMatchDateList.List:type_name -> webapi.GameMatchDate + 36, // 30: webapi.GameMatchType.List:type_name -> webapi.MatchTypeInfo + 38, // 31: webapi.WelfareTurnplateDate.Date:type_name -> webapi.WelfareDate + 39, // 32: webapi.WelfareTurnplateDateList.List:type_name -> webapi.WelfareTurnplateDate + 40, // 33: webapi.WelfareTurnplateDateList.RateList:type_name -> webapi.WelfareTurnplateRate + 38, // 34: webapi.AddUpWelfareDate.AddUpDate:type_name -> webapi.WelfareDate + 38, // 35: webapi.Welfare7SignDate.Date:type_name -> webapi.WelfareDate + 42, // 36: webapi.Welfare7SignDate.AddUpDate:type_name -> webapi.AddUpWelfareDate + 42, // 37: webapi.Welfare7SignDate.AddUpDate2:type_name -> webapi.AddUpWelfareDate + 42, // 38: webapi.Welfare7SignDate.AddUpDate2Google:type_name -> webapi.AddUpWelfareDate + 43, // 39: webapi.Welfare7SignDate.AddUpDate2Type:type_name -> webapi.AddUpDate2TypeData + 44, // 40: webapi.Welfare7SignDateList.List:type_name -> webapi.Welfare7SignDate + 46, // 41: webapi.WelfareBlindBoxDataList.List:type_name -> webapi.BlindBoxData + 38, // 42: webapi.WelfareSpree.Item:type_name -> webapi.WelfareDate + 48, // 43: webapi.WelfareFirstPayDataList.List:type_name -> webapi.WelfareSpree + 48, // 44: webapi.WelfareContinuousPayDataList.List:type_name -> webapi.WelfareSpree + 93, // 45: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry + 94, // 46: webapi.VIPcfg.Privilege1:type_name -> webapi.VIPcfg.Privilege1Entry + 95, // 47: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry + 96, // 48: webapi.VIPcfg.Privilege9:type_name -> webapi.VIPcfg.Privilege9Entry + 51, // 49: webapi.VIPcfgDataList.List:type_name -> webapi.VIPcfg + 38, // 50: webapi.ChessRankConfig.Item:type_name -> webapi.WelfareDate + 55, // 51: webapi.ChessRankcfgData.Datas:type_name -> webapi.ChessRankConfig + 97, // 52: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry + 62, // 53: webapi.ActInviteConfig.Awards1:type_name -> webapi.RankAward + 62, // 54: webapi.ActInviteConfig.Awards2:type_name -> webapi.RankAward + 62, // 55: webapi.ActInviteConfig.Awards3:type_name -> webapi.RankAward + 32, // 56: webapi.PermitLevelConfig.Award1:type_name -> webapi.ItemInfo + 32, // 57: webapi.PermitLevelConfig.Award2:type_name -> webapi.ItemInfo + 32, // 58: webapi.PermitExchangeConfig.Gain:type_name -> webapi.ItemInfo + 32, // 59: webapi.PermitExchangeConfig.Cost:type_name -> webapi.ItemInfo + 32, // 60: webapi.PermitRankConfig.ItemId:type_name -> webapi.ItemInfo + 64, // 61: webapi.PermitChannelConfig.LevelConfig:type_name -> webapi.PermitLevelConfig + 65, // 62: webapi.PermitChannelConfig.ExchangeConfig:type_name -> webapi.PermitExchangeConfig + 66, // 63: webapi.PermitChannelConfig.RankConfig:type_name -> webapi.PermitRankConfig + 67, // 64: webapi.ActPermitConfig.Configs:type_name -> webapi.PermitChannelConfig + 71, // 65: webapi.DiamondLotteryPlayers.Award:type_name -> webapi.AwardData + 69, // 66: webapi.DiamondLotteryData.Info:type_name -> webapi.DiamondLotteryInfo + 70, // 67: webapi.DiamondLotteryData.Players:type_name -> webapi.DiamondLotteryPlayers + 72, // 68: webapi.DiamondLotteryConfig.LotteryData:type_name -> webapi.DiamondLotteryData + 101, // 69: webapi.ItemConfig.Items:type_name -> server.DB_GameItem + 32, // 70: webapi.RankAwardInfo.Item:type_name -> webapi.ItemInfo + 75, // 71: webapi.RankTypeInfo.Award:type_name -> webapi.RankAwardInfo + 76, // 72: webapi.RankTypeConfig.Info:type_name -> webapi.RankTypeInfo + 98, // 73: webapi.SkinLevel.UpItem:type_name -> webapi.SkinLevel.UpItemEntry + 99, // 74: webapi.SkinItem.UnlockParam:type_name -> webapi.SkinItem.UnlockParamEntry + 78, // 75: webapi.SkinItem.Levels:type_name -> webapi.SkinLevel + 79, // 76: webapi.SkinConfig.Items:type_name -> webapi.SkinItem + 82, // 77: webapi.AwardLogConfig.AwardLog:type_name -> webapi.AwardLogData + 84, // 78: webapi.AwardLogConfig.AnnouncerLog:type_name -> webapi.AnnouncerLogInfo + 83, // 79: webapi.AwardLogData.AwardLog:type_name -> webapi.AwardLogInfo + 32, // 80: webapi.RoomConfig.Cost:type_name -> webapi.ItemInfo + 32, // 81: webapi.RoomConfig.Reward:type_name -> webapi.ItemInfo + 82, // [82:82] is the sub-list for method output_type + 82, // [82:82] is the sub-list for method input_type + 82, // [82:82] is the sub-list for extension type_name + 82, // [82:82] is the sub-list for extension extendee + 0, // [0:82] is the sub-list for field type_name } func init() { file_common_proto_init() } @@ -10840,6 +11128,30 @@ func file_common_proto_init() { return nil } } + file_common_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoomType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoomConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -10847,7 +11159,7 @@ func file_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_common_proto_rawDesc, NumEnums: 0, - NumMessages: 98, + NumMessages: 100, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto index 77e0520..f02ef15 100644 --- a/protocol/webapi/common.proto +++ b/protocol/webapi/common.proto @@ -904,4 +904,33 @@ message SpiritConfig { string Platform = 1; // 平台 int32 On = 2; // 精灵开关 1开启 2关闭 string Url = 3; +} + +// etcd /game/room_type +message RoomType { + string Platform = 1; // 平台 + int32 Id = 2; // 配置ID + string Name = 3; // 类型名称 + int32 On = 4; // 开关 1开启 2关闭 + int32 SortId = 5; // 排序ID +} + +// etcd /game/room_config +message RoomConfig { + string Platform = 1; // 平台 + int32 Id = 2; // 配置id + string Name = 3; // 配置名称 + int32 RoomType = 4; // 房间类型id + int32 On = 5; // 开关 1开启 2关闭 + int32 SortId = 6; // 排序ID + repeated ItemInfo Cost = 7; // 进入房间消耗 + repeated ItemInfo Reward = 8; // 进入房间奖励 + repeated string OnChannelName = 9; // 开启的渠道名称 + repeated int32 GameFreeId = 10; // 场次id + repeated int32 Round = 11; // 局数 + repeated int32 PlayerNum = 12; // 人数 + int32 NeedPassword = 13; // 是否需要密码 1是 2否 3自定义 + int32 CostType = 14; // 消耗类型 1AA 2房主 3自定义 + int32 Voice = 15; // 是否开启语音 1是 2否 3自定义 + string ImageURI = 16; // 奖励图片 } \ No newline at end of file diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index ba725f7..5eadcbc 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -56,7 +56,7 @@ func init() { // 代理 etcd.Register(etcd.ETCDKEY_PROMOTER_PREFIX, PromoterConfig{}, handlerEvent) // 赠送 - etcd.Register(etcd.ETCDKEY_ACT_GIVE_PREFIX, PromoterConfig{}, handlerEvent) + etcd.Register(etcd.ETCDKEY_ACT_GIVE_PREFIX, ActGivePlateformConfig{}, handlerEvent) // 7日签到 etcd.Register(etcd.ETCDKEY_ACT_7SIGN, webapi.Welfare7SignDateList{}, platformConfigEvent) // 转盘 @@ -93,6 +93,46 @@ func init() { etcd.Register(etcd.ETCDKEY_MatchAudience, webapi.MatchAudience{}, handlerEvent) // 小精灵配置 etcd.Register(etcd.ETCDKEY_Spirit, webapi.SpiritConfig{}, platformConfigEvent) + + PlatformMgrSingleton.GetConfig("1").RoomType = map[int32]*webapi.RoomType{ + 1: { + Platform: "1", + Id: 1, + Name: "话费赛", + On: 1, + SortId: 1, + }, + } + PlatformMgrSingleton.GetConfig("1").RoomConfig = map[int32]*webapi.RoomConfig{ + 1: { + Platform: "1", + Id: 1, + Name: "1元话费赛", + RoomType: 1, + On: 1, + SortId: 1, + Cost: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + Reward: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, + GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, + Round: []int32{1, 2, 3, 4}, + PlayerNum: []int32{2, 3, 4}, + NeedPassword: 3, + CostType: 3, + Voice: 3, + ImageURI: "", + }, + } } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { @@ -331,12 +371,43 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e } func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { - if data == nil { - return + var plt string + var param []int + equalFunc := func(key string) bool { + plt = "" + param = param[:0] + if strings.HasPrefix(completeKey, key) { + arr := strings.Split(strings.TrimPrefix(completeKey, key), "/") + for k, v := range arr { + if v == "" { + continue + } + if len(v) > 0 { + plt = v + for _, v := range arr[k+1:] { + n, err := strconv.Atoi(v) + if err != nil { + continue + } + param = append(param, n) + } + return true + } + } + } + return false } - switch config := data.(type) { - case *BlackInfoApi: + + switch { + case equalFunc(etcd.ETCDKEY_BLACKLIST_PREFIX): + var config *BlackInfoApi + if data != nil { + config = data.(*BlackInfoApi) + } if isInit { + if config == nil { + return + } BlackListMgrSington.InitBlackInfo(config) } else { switch event.Type { @@ -353,6 +424,9 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } } case clientv3.EventTypePut: + if config == nil { + return + } BlackListMgrSington.UpsertBlackInfo(config) if (config.Space & int32(BlackState_Login)) != 0 { var targetPlayer []*Player //确定用户是否在线 @@ -372,8 +446,16 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } } } - case *PromoterConfig: + + case equalFunc(etcd.ETCDKEY_PROMOTER_PREFIX): + var config *PromoterConfig + if data != nil { + config = data.(*PromoterConfig) + } if isInit { + if config == nil { + return + } PromoterMgrSington.AddConfig(config) } else { switch event.Type { @@ -385,16 +467,32 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c PromoterMgrSington.RemoveConfigByKey(promoterConfig) } case clientv3.EventTypePut: + if config == nil { + return + } PromoterMgrSington.AddConfig(config) } } - case *ActGivePlateformConfig: + + case equalFunc(etcd.ETCDKEY_ACT_GIVE_PREFIX): + var config *ActGivePlateformConfig + if data != nil { + config = data.(*ActGivePlateformConfig) + } + if config == nil { + return + } if isInit || event.Type == clientv3.EventTypePut { ActMgrSington.AddGiveConfig(config, config.Platform) } - case *webapi.MatchAudience: + + case equalFunc(etcd.ETCDKEY_MatchAudience): switch event.Type { case clientv3.EventTypePut: + if data == nil { + return + } + config := data.(*webapi.MatchAudience) PlatformMgrSingleton.AddMatchAudience(config) if !isInit { p := PlayerMgrSington.GetPlayerBySnId(config.GetSnId()) @@ -403,15 +501,58 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } } case clientv3.EventTypeDelete: - PlatformMgrSingleton.DelMatchAudience(config) + if plt == "" || len(param) == 0 { + return + } + PlatformMgrSingleton.DelMatchAudience(plt, int32(param[0])) if !isInit { - p := PlayerMgrSington.GetPlayerBySnId(config.GetSnId()) + p := PlayerMgrSington.GetPlayerBySnId(int32(param[0])) if p != nil { p.SCDataConfig(common.DataConfigMatchAudience) } } } + case equalFunc(etcd.ETCDKEY_RoomType): + switch event.Type { + case clientv3.EventTypePut: + if data == nil { + return + } + config := data.(*webapi.RoomType) + PlatformMgrSingleton.UpdateRoomType(config) + if !isInit { + PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) + } + case clientv3.EventTypeDelete: + if plt == "" || len(param) == 0 { + return + } + PlatformMgrSingleton.DelRoomType(plt, int32(param[0])) + if !isInit { + PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) + } + } + case equalFunc(etcd.ETCDKEY_RoomConfig): + switch event.Type { + case clientv3.EventTypePut: + if data == nil { + return + } + config := data.(*webapi.RoomConfig) + PlatformMgrSingleton.UpdateRoomConfig(config) + if !isInit { + PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) + } + case clientv3.EventTypeDelete: + if plt == "" || len(param) == 0 { + return + } + PlatformMgrSingleton.DelRoomConfig(plt, int32(param[0])) + if !isInit { + PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) + } + } default: logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey) } From a040d3035411f2967a32be2d1ce750c78bd89d40 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 24 Aug 2024 15:49:07 +0800 Subject: [PATCH 30/63] =?UTF-8?q?=E9=81=93=E5=85=B7=E5=87=BA=E5=94=AE?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E7=94=A8int64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/action_bag.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/worldsrv/action_bag.go b/worldsrv/action_bag.go index ad535f0..3049b2f 100644 --- a/worldsrv/action_bag.go +++ b/worldsrv/action_bag.go @@ -286,12 +286,13 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e if isF { pack.RetCode = bag.OpResultCode_OPRC_Sucess if item.SaleGold > 0 { + n := int64(item.SaleGold) * int64(msg.ItemNum) if item.SaleType == 1 { - p.AddCoin(int64(item.SaleGold*msg.ItemNum), 0, common.GainWay_Item_Sale, "sys", remark) - pack.Coin = int64(item.SaleGold * msg.ItemNum) + p.AddCoin(n, 0, common.GainWay_Item_Sale, "sys", remark) + pack.Coin = n } else if item.SaleType == 2 { - p.AddDiamond(int64(item.SaleGold*msg.ItemNum), 0, common.GainWay_Item_Sale, "sys", remark) - pack.Diamond = int64(item.SaleGold * msg.ItemNum) + p.AddDiamond(n, 0, common.GainWay_Item_Sale, "sys", remark) + pack.Diamond = n } } pack.NowItemId = item.ItemId From f4434bd945d37cbd0b891302ace7a42009f1b3db Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 24 Aug 2024 18:21:06 +0800 Subject: [PATCH 31/63] =?UTF-8?q?=E5=8E=BB=E6=8E=89ParamsEx,agentor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_server.go | 3 +- gamesrv/base/player.go | 2 +- gamesrv/base/scene.go | 60 ++------------------ gamesrv/base/scene_mgr.go | 4 +- gamesrv/fishing/scenedata_fishing.go | 1 - gamesrv/thirteen/scene.go | 1 - gamesrv/tienlen/scenepolicy_tienlen.go | 5 ++ model/config.go | 76 +++++++++++++++++++++++++- protocol/server/server.pb.go | 6 +- protocol/server/server.proto | 2 +- 10 files changed, 93 insertions(+), 67 deletions(-) diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 10b4483..7089130 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -64,7 +64,6 @@ func init() { gameMode := int(msg.GetGameMode()) sceneMode := int(msg.GetSceneMode()) gameId := int(msg.GetGameId()) - paramsEx := msg.GetParamsEx() hallId := msg.GetHallId() groupId := msg.GetGroupId() dbGameFree := msg.GetDBGameFree() @@ -74,7 +73,7 @@ func init() { playerNum := int(msg.GetPlayerNum()) scene := base.SceneMgrSington.CreateScene(s, sceneId, gameMode, sceneMode, gameId, msg.GetPlatform(), msg.GetParams(), msg.GetAgentor(), msg.GetCreator(), msg.GetReplayCode(), hallId, groupId, totalOfGames, dbGameFree, - bEnterAfterStart, baseScore, playerNum, msg.GetChessRank(), paramsEx...) + bEnterAfterStart, baseScore, playerNum, msg.GetChessRank()) if scene != nil { if scene.IsMatchScene() { if len(scene.Params) > 0 { diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index 6611f02..b3543ee 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -628,7 +628,7 @@ func (this *Player) SaveSceneCoinLog(takeCoin, changecoin, coin, totalbet, taxco } log := model.NewSceneCoinLogEx(this.SnId, changecoin, takeCoin, coin, eventType, int64(this.scene.DbGameFree.GetBaseScore()), totalbet, int32(this.scene.GameId), this.PlayerData.Ip, - this.scene.paramsEx[0], this.Pos, this.Platform, this.Channel, this.BeUnderAgentCode, int32(this.scene.SceneId), + this.scene.GetGameFreeId(), this.Pos, this.Platform, this.Channel, this.BeUnderAgentCode, int32(this.scene.SceneId), this.scene.DbGameFree.GetGameMode(), this.scene.GetGameFreeId(), taxcoin, wincoin, jackpotWinCoin, smallGameWinCoin, this.PackageID) if log != nil { diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 704027a..d4d70d1 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -63,7 +63,6 @@ type Scene struct { SceneType int // 场次,新手场,中级场... Platform string // 平台id Params []int64 - paramsEx []int32 Creator int32 agentor int32 hallId int32 @@ -139,7 +138,8 @@ type Scene struct { } func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, params []int64, - agentor, creator int32, replayCode string, hallId, groupId, totalOfGames int32, dbGameFree *server.DB_GameFree, bEnterAfterStart bool, baseScore int32, playerNum int, cherank []int32, paramsEx ...int32) *Scene { + agentor, creator int32, replayCode string, hallId, groupId, totalOfGames int32, dbGameFree *server.DB_GameFree, + bEnterAfterStart bool, baseScore int32, playerNum int, cherank []int32) *Scene { sp := GetScenePolicy(gameId, gameMode) if sp == nil { logger.Logger.Errorf("Game id %v not register in ScenePolicyPool.", gameId) @@ -154,9 +154,7 @@ func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, plat SceneMode: sceneMode, SceneType: int(dbGameFree.GetSceneType()), Params: params, - paramsEx: paramsEx, Creator: creator, - agentor: agentor, replayCode: replayCode, Players: make(map[int32]*Player), audiences: make(map[int32]*Player), @@ -236,23 +234,10 @@ func (this *Scene) init() bool { this.nextInviteTime = tNow.Add(time.Second * time.Duration(this.Rand.Int63n(model.GameParamData.RobotInviteInitInterval))) this.RandRobotCnt() - if len(this.paramsEx) != 0 { - if this.IsMatchScene() { - //this.mp = GetMatchPolicy(this.gameId) - baseScore := this.GetParamEx(common.PARAMEX_MATCH_BASESCORE) - this.DbGameFree.BaseScore = proto.Int32(baseScore) - } else { - if this.DbGameFree.GetSceneType() == -1 { - this.Testing = true - } else { - this.Testing = false - } - } + this.KeyGameId = strconv.Itoa(int(this.DbGameFree.GetGameId())) + this.KeyGamefreeId = strconv.Itoa(int(this.DbGameFree.GetId())) + this.KeyGameDif = this.DbGameFree.GetGameDif() - this.KeyGameId = strconv.Itoa(int(this.DbGameFree.GetGameId())) - this.KeyGamefreeId = strconv.Itoa(int(this.DbGameFree.GetId())) - this.KeyGameDif = this.DbGameFree.GetGameDif() - } // test //for i := 0; i < 100; i++ { // n := this.rand.Intn(10) @@ -284,29 +269,6 @@ func (this *Scene) IsDisbanding() bool { return this.hDisband != timer.TimerHandle(0) } -func (this *Scene) GetParamEx(idx int) int32 { - if idx < 0 || idx > len(this.paramsEx) { - return -1 - } - - return this.paramsEx[idx] -} - -func (this *Scene) SetParamEx(idx int, val int32) { - cnt := len(this.paramsEx) - if idx >= 0 && idx < cnt { - this.paramsEx[idx] = val - } -} - -func (this *Scene) GetMatchTotalOfGame() int { - return int(this.GetParamEx(common.PARAMEX_MATCH_NUMOFGAME)) -} - -func (this *Scene) GetMatchBaseScore() int32 { - return this.GetParamEx(common.PARAMEX_MATCH_BASESCORE) -} - func (this *Scene) GetGameFreeId() int32 { return this.DbGameFree.Id } @@ -394,12 +356,6 @@ func (this *Scene) GetParams() []int64 { func (this *Scene) SetParams(params []int64) { this.Params = params } -func (this *Scene) GetParamsEx() []int32 { - return this.paramsEx -} -func (this *Scene) SetParamsEx(paramsEx []int32) { - this.paramsEx = paramsEx -} func (this *Scene) GetStateStartTime() time.Time { return this.StateStartTime } @@ -433,12 +389,6 @@ func (this *Scene) SetCpCtx(cpCtx model.CoinPoolCtx) { func (this *Scene) GetAudiences() map[int32]*Player { return this.audiences } -func (this *Scene) GetAgentor() int32 { - return this.agentor -} -func (this *Scene) SetAgentor(agentor int32) { - this.agentor = agentor -} func (this *Scene) GetDisbandGen() int { return this.disbandGen } diff --git a/gamesrv/base/scene_mgr.go b/gamesrv/base/scene_mgr.go index 1b5b320..1fef20c 100644 --- a/gamesrv/base/scene_mgr.go +++ b/gamesrv/base/scene_mgr.go @@ -34,9 +34,9 @@ func (this *SceneMgr) makeKey(gameid, gamemode int) int { func (this *SceneMgr) CreateScene(s *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, params []int64, agentor, creator int32, replayCode string, hallId, groupId, totalOfGames int32, - dbGameFree *server.DB_GameFree, bEnterAfterStart bool, baseScore int32, playerNum int, chessRank []int32, paramsEx ...int32) *Scene { + dbGameFree *server.DB_GameFree, bEnterAfterStart bool, baseScore int32, playerNum int, chessRank []int32) *Scene { scene := NewScene(s, sceneId, gameMode, sceneMode, gameId, platform, params, agentor, creator, replayCode, - hallId, groupId, totalOfGames, dbGameFree, bEnterAfterStart, baseScore, playerNum, chessRank, paramsEx...) + hallId, groupId, totalOfGames, dbGameFree, bEnterAfterStart, baseScore, playerNum, chessRank) if scene == nil { logger.Logger.Error("(this *SceneMgr) CreateScene, scene == nil") return nil diff --git a/gamesrv/fishing/scenedata_fishing.go b/gamesrv/fishing/scenedata_fishing.go index c0ffaff..e8b4bc8 100644 --- a/gamesrv/fishing/scenedata_fishing.go +++ b/gamesrv/fishing/scenedata_fishing.go @@ -113,7 +113,6 @@ func (this *FishingSceneData) init() bool { this.testing = this.GetTesting() this.gamefreeId = this.GetGameFreeId() this.groupId = this.GetGroupId() - this.agentor = this.GetAgentor() this.sceneMode = this.GetSceneMode() this.TimePoint = 0 this.lastLittleBossTime = time.Now().Unix() diff --git a/gamesrv/thirteen/scene.go b/gamesrv/thirteen/scene.go index 2f5e805..1236c1e 100644 --- a/gamesrv/thirteen/scene.go +++ b/gamesrv/thirteen/scene.go @@ -173,7 +173,6 @@ func (this *SceneEx) ThirteenWaterCreateRoomInfoPacket(s *base.Scene, p *base.Pl Creator: proto.Int32(s.GetCreator()), GameId: proto.Int(s.GetGameId()), RoomMode: proto.Int(s.GetSceneMode()), - AgentId: proto.Int32(s.GetAgentor()), SceneType: s.GetDBGameFree().SceneType, State: proto.Int(s.GetSceneState().GetState()), TimeOut: proto.Int(s.GetSceneState().GetTimeout(s)), diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 57ed170..525fe17 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -2780,6 +2780,11 @@ func init() { base.RegisteScenePolicy(common.GameId_TienLenRank_toend, 0, ScenePolicyTienLenSingleton) base.RegisteScenePolicy(common.GameId_TienLenRank_yl, 0, ScenePolicyTienLenSingleton) base.RegisteScenePolicy(common.GameId_TienLenRank_yl_toend, 0, ScenePolicyTienLenSingleton) + // 房卡场 + base.RegisteScenePolicy(common.GameId_TienLenCustom, 0, ScenePolicyTienLenSingleton) + base.RegisteScenePolicy(common.GameId_TienLenCustom_toend, 0, ScenePolicyTienLenSingleton) + base.RegisteScenePolicy(common.GameId_TienLenCustom_yl, 0, ScenePolicyTienLenSingleton) + base.RegisteScenePolicy(common.GameId_TienLenCustom_yl_toend, 0, ScenePolicyTienLenSingleton) return nil }) } diff --git a/model/config.go b/model/config.go index e60e6fa..bd47bb1 100644 --- a/model/config.go +++ b/model/config.go @@ -1,6 +1,7 @@ package model import ( + "mongo.games.com/game/protocol/gamehall" "strconv" "mongo.games.com/goserver/core/logger" @@ -144,7 +145,8 @@ type AllConfig struct { // 房卡场房间类型 RoomType map[int32]*webapi.RoomType // key: 房间类型id // 房卡场房间配置 - RoomConfig map[int32]*webapi.RoomConfig // key: 房间配置id + RoomConfig map[int32]*webapi.RoomConfig // key: 房间配置id + RoomTypeMap map[int32][]*webapi.RoomConfig // key: 房间类型id:房间配置 } type GlobalConfig struct { @@ -176,6 +178,7 @@ func (cm *ConfigMgr) GetConfig(platform string) *AllConfig { MatchAudience: make(map[int32]*webapi.MatchAudience), RoomType: make(map[int32]*webapi.RoomType), RoomConfig: make(map[int32]*webapi.RoomConfig), + RoomTypeMap: make(map[int32][]*webapi.RoomConfig), } cm.platform[platform] = c } @@ -396,8 +399,79 @@ func (cm *ConfigMgr) DelRoomType(plt string, id int32) { func (cm *ConfigMgr) UpdateRoomConfig(data *webapi.RoomConfig) { cm.GetConfig(data.GetPlatform()).RoomConfig[data.GetId()] = data + d := cm.GetConfig(data.GetPlatform()).RoomTypeMap[data.GetRoomType()] + if d == nil { + d = make([]*webapi.RoomConfig, 0) + } + d = append(d, data) + cm.GetConfig(data.GetPlatform()).RoomTypeMap[data.GetRoomType()] = d } func (cm *ConfigMgr) DelRoomConfig(plt string, id int32) { + d := cm.GetConfig(plt).RoomConfig[id] + if d != nil { + b := cm.GetConfig(plt).RoomTypeMap[d.GetRoomType()] + if b != nil { + for i, v := range b { + if v.GetId() == id { + b = append(b[:i], b[i+1:]...) + cm.GetConfig(plt).RoomTypeMap[d.GetRoomType()] = b + } + } + } + } delete(cm.GetConfig(plt).RoomConfig, id) } + +func (cm *ConfigMgr) GetRoomConfig(plt string) *gamehall.SCRoomConfig { + pack := &gamehall.SCRoomConfig{} + for _, v := range cm.GetConfig(plt).RoomType { + if v.GetOn() != common.On { + continue + } + var list []*gamehall.RoomConfigInfo + for _, vv := range cm.GetConfig(plt).RoomTypeMap[v.GetId()] { + if vv.GetOn() != common.On { + continue + } + var cost, reward []*gamehall.ItemInfo + for _, item := range vv.GetCost() { + cost = append(cost, &gamehall.ItemInfo{ + Id: item.GetItemId(), + Num: int32(item.GetItemNum()), + }) + } + for _, item := range vv.GetReward() { + reward = append(reward, &gamehall.ItemInfo{ + Id: item.GetItemId(), + Num: int32(item.GetItemNum()), + }) + } + list = append(list, &gamehall.RoomConfigInfo{ + Id: vv.GetId(), + Name: vv.GetName(), + RoomType: vv.GetRoomType(), + On: vv.GetOn(), + SortId: vv.GetSortId(), + Cost: cost, + Reward: reward, + OnChannelName: vv.GetOnChannelName(), + GameFreeId: vv.GetGameFreeId(), + Round: vv.GetRound(), + PlayerNum: vv.GetPlayerNum(), + NeedPassword: vv.GetNeedPassword(), + CostType: vv.GetCostType(), + Voice: vv.GetVoice(), + ImageURI: vv.GetImageURI(), + }) + } + pack.List = append(pack.List, &gamehall.RoomTypeInfo{ + Id: v.GetId(), + Name: v.GetName(), + On: v.GetOn(), + SortId: v.GetSortId(), + List: list, + }) + } + return pack +} diff --git a/protocol/server/server.pb.go b/protocol/server/server.pb.go index 19e37f1..f3d15c9 100644 --- a/protocol/server/server.pb.go +++ b/protocol/server/server.pb.go @@ -858,7 +858,7 @@ type WGCreateScene struct { Creator int32 `protobuf:"varint,5,opt,name=Creator,proto3" json:"Creator,omitempty"` Agentor int32 `protobuf:"varint,6,opt,name=Agentor,proto3" json:"Agentor,omitempty"` ReplayCode string `protobuf:"bytes,7,opt,name=ReplayCode,proto3" json:"ReplayCode,omitempty"` - ParamsEx []int32 `protobuf:"varint,8,rep,packed,name=ParamsEx,proto3" json:"ParamsEx,omitempty"` + ParamsEx []int64 `protobuf:"varint,8,rep,packed,name=ParamsEx,proto3" json:"ParamsEx,omitempty"` SceneMode int32 `protobuf:"varint,9,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` HallId int32 `protobuf:"varint,10,opt,name=HallId,proto3" json:"HallId,omitempty"` Platform string `protobuf:"bytes,11,opt,name=Platform,proto3" json:"Platform,omitempty"` @@ -957,7 +957,7 @@ func (x *WGCreateScene) GetReplayCode() string { return "" } -func (x *WGCreateScene) GetParamsEx() []int32 { +func (x *WGCreateScene) GetParamsEx() []int64 { if x != nil { return x.ParamsEx } @@ -8757,7 +8757,7 @@ var file_server_proto_rawDesc = []byte{ 0x6e, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, diff --git a/protocol/server/server.proto b/protocol/server/server.proto index f460326..c6b140b 100644 --- a/protocol/server/server.proto +++ b/protocol/server/server.proto @@ -170,7 +170,7 @@ message WGCreateScene { int32 Creator = 5; int32 Agentor = 6; string ReplayCode = 7; - repeated int32 ParamsEx = 8; + repeated int64 ParamsEx = 8; int32 SceneMode = 9; int32 HallId = 10; string Platform = 11; From 1db62f9d9068e626616fae6d7c027afed83b2d13 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 24 Aug 2024 18:23:47 +0800 Subject: [PATCH 32/63] gameconfig --- data/gameconfig/tienlen_m.json | 1 + data/gameconfig/tienlen_m_toend.json | 1 + 2 files changed, 2 insertions(+) diff --git a/data/gameconfig/tienlen_m.json b/data/gameconfig/tienlen_m.json index 6411cc8..8e18938 100644 --- a/data/gameconfig/tienlen_m.json +++ b/data/gameconfig/tienlen_m.json @@ -12,6 +12,7 @@ "DependentPlayerCnt":true, "EnterAfterStart":true, "PerGameTakeCard":100, + "BaseScore": 10, "Params":[ ] } \ No newline at end of file diff --git a/data/gameconfig/tienlen_m_toend.json b/data/gameconfig/tienlen_m_toend.json index 86cf29a..1a883b5 100644 --- a/data/gameconfig/tienlen_m_toend.json +++ b/data/gameconfig/tienlen_m_toend.json @@ -12,6 +12,7 @@ "DependentPlayerCnt":true, "EnterAfterStart":true, "PerGameTakeCard":100, + "BaseScore": 10, "Params":[ ] } \ No newline at end of file From 72224264697165aa43e3dc917b2b27ce48d0c869 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 24 Aug 2024 18:25:03 +0800 Subject: [PATCH 33/63] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 94 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 64 insertions(+), 30 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index 5eadcbc..51d5c27 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -98,41 +98,75 @@ func init() { 1: { Platform: "1", Id: 1, - Name: "话费赛", + Name: "{\"zh\":\"话费赛\",\"kh\":\"话费赛\",\"vi\":\"话费赛\",\"en\":\"话费赛\"}", On: 1, SortId: 1, }, - } - PlatformMgrSingleton.GetConfig("1").RoomConfig = map[int32]*webapi.RoomConfig{ - 1: { + 2: { Platform: "1", - Id: 1, - Name: "1元话费赛", - RoomType: 1, + Id: 2, + Name: "{\"zh\":\"物品赛\",\"kh\":\"物品赛\",\"vi\":\"物品赛\",\"en\":\"物品赛\"}", On: 1, - SortId: 1, - Cost: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - Reward: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, - GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, - Round: []int32{1, 2, 3, 4}, - PlayerNum: []int32{2, 3, 4}, - NeedPassword: 3, - CostType: 3, - Voice: 3, - ImageURI: "", + SortId: 2, }, } + + PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ + Platform: "1", + Id: 1, + Name: "{\"zh\":\"1元话费赛\",\"kh\":\"1元话费赛\",\"vi\":\"1元话费赛\",\"en\":\"1元话费赛\"}", + RoomType: 1, + On: 1, + SortId: 1, + Cost: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + Reward: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, + GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, + Round: []int32{1, 2, 3, 4}, + PlayerNum: []int32{2, 3, 4}, + NeedPassword: 3, + CostType: 3, + Voice: 3, + ImageURI: "", + }) + PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ + Platform: "1", + Id: 1, + Name: "{\"zh\":\"2元话费赛\",\"kh\":\"2元话费赛\",\"vi\":\"2元话费赛\",\"en\":\"2元话费赛\"}", + RoomType: 1, + On: 1, + SortId: 2, + Cost: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + Reward: []*webapi.ItemInfo{ + { + ItemId: 100001, + ItemNum: 12, + }, + }, + OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, + GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, + Round: []int32{1, 2, 3, 4}, + PlayerNum: []int32{2, 3, 4}, + NeedPassword: 3, + CostType: 3, + Voice: 3, + ImageURI: "", + }) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { @@ -542,7 +576,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c config := data.(*webapi.RoomConfig) PlatformMgrSingleton.UpdateRoomConfig(config) if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) + //PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) } case clientv3.EventTypeDelete: if plt == "" || len(param) == 0 { @@ -550,7 +584,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } PlatformMgrSingleton.DelRoomConfig(plt, int32(param[0])) if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) + //PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) } } default: From 4e6b92cd333bf3acc30ecf183d181e78ff7dde3b Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sat, 24 Aug 2024 18:26:31 +0800 Subject: [PATCH 34/63] review --- worldsrv/action_hundredscene.go | 282 -------------------------------- 1 file changed, 282 deletions(-) diff --git a/worldsrv/action_hundredscene.go b/worldsrv/action_hundredscene.go index aa7e96d..d0befc0 100644 --- a/worldsrv/action_hundredscene.go +++ b/worldsrv/action_hundredscene.go @@ -2,8 +2,6 @@ package main import ( "fmt" - "time" - "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" @@ -201,290 +199,10 @@ func (this *CSHundredSceneOpHandler) Process(s *netlib.Session, packetid int, da return nil } -type CSGameObservePacketFactory struct { -} -type CSGameObserveHandler struct { -} - -func (this *CSGameObservePacketFactory) CreatePacket() interface{} { - pack := &gamehall.CSGameObserve{} - return pack -} - -func (this *CSGameObserveHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { - logger.Logger.Trace("CSGameObserveHandler Process recv ", data) - if msg, ok := data.(*gamehall.CSGameObserve); ok { - p := PlayerMgrSington.GetPlayer(sid) - if p != nil { - if msg.GetStartOrEnd() { - gameStateMgr.PlayerRegiste(p, msg.GetGameId(), msg.GetStartOrEnd()) - pack := &gamehall.SCGameSubList{} - statePack := &gamehall.SCGameState{} - scenes := HundredSceneMgrSingleton.GetPlatformScene(p.Platform, msg.GetGameId()) - for _, value := range scenes { - pack.List = append(pack.List, &gamehall.GameSubRecord{ - GameFreeId: proto.Int32(value.dbGameFree.GetId()), - NewLog: proto.Int32(-1), - LogCnt: proto.Int(len(value.GameLog)), - TotleLog: value.GameLog, - }) - leftTime := int64(value.StateSec) - (time.Now().Unix() - value.StateTs) - if leftTime < 0 { - leftTime = 0 - } - statePack.List = append(statePack.List, &gamehall.GameState{ - GameFreeId: proto.Int32(value.dbGameFree.GetId()), - Ts: proto.Int64(leftTime), - Sec: proto.Int32(value.StateSec), - }) - } - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_GAMESUBLIST), pack) - logger.Logger.Trace("SCGameSubList:", pack) - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_GAMESTATE), statePack) - logger.Logger.Trace("SCGameState:", statePack) - } else { - gameStateMgr.PlayerClear(p) - } - } - } - return nil -} - -//type CSHundredSceneGetGameJackpotPacketFactory struct { -//} -//type CSHundredSceneGetGameJackpotHandler struct { -//} -// -//func (this *CSHundredSceneGetGameJackpotPacketFactory) CreatePacket() interface{} { -// pack := &gamehall.CSHundredSceneGetPlayerNum{} -// return pack -//} -// -//func (this *CSHundredSceneGetGameJackpotHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { -// logger.Logger.Trace("CSHundredSceneGetGameJackpotHandler Process recv ", data) -// if _, ok := data.(*gamehall.CSHundredSceneGetPlayerNum); ok { -// p := PlayerMgrSington.GetPlayer(sid) -// if p != nil { -// //gameid := int(msg.GetGameId()) -// //// 冰河世纪, 百战成神, 财神, 复仇者联盟, 复活岛 -// //if gameid == common.GameId_IceAge || gameid == common.GameId_TamQuoc || gameid == common.GameId_CaiShen || -// // gameid == common.GameId_Avengers || gameid == common.GameId_EasterIsland { -// // gameStateMgr.PlayerRegiste(p, msg.GetGameId(), true) -// // pack := &gamehall.SCHundredSceneGetGameJackpot{} -// // scenes := HundredSceneMgrSingleton.GetPlatformScene(p.Platform, msg.GetGameId()) -// // for _, v := range scenes { -// // jpfi := &gamehall.GameJackpotFundInfo{ -// // GameFreeId: proto.Int32(v.dbGameFree.GetId()), -// // JackPotFund: proto.Int64(v.JackPotFund), -// // } -// // pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) -// // } -// // proto.SetDefaults(pack) -// // p.SendToClient(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEJACKPOT), pack) -// // logger.Logger.Trace("SCHundredSceneGetGameJackpot:", pack) -// //} -// } -// } -// return nil -//} -// -//type CSHundredSceneGetGameHistoryInfoPacketFactory struct { -//} -//type CSHundredSceneGetGameHistoryInfoHandler struct { -//} -// -//func (this *CSHundredSceneGetGameHistoryInfoPacketFactory) CreatePacket() interface{} { -// pack := &gamehall.CSHundredSceneGetHistoryInfo{} -// return pack -//} -// -//func (this *CSHundredSceneGetGameHistoryInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { -// logger.Logger.Trace("World CSHundredSceneGetGameHistoryInfoHandler Process recv ", data) -// if msg, ok := data.(*gamehall.CSHundredSceneGetHistoryInfo); ok { -// gameid := int(msg.GetGameId()) -// historyModel := msg.GetGameHistoryModel() -// p := PlayerMgrSington.GetPlayer(sid) -// if p != nil { -// switch historyModel { -// case PLAYER_HISTORY_MODEL: // 历史记录 -// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { -// var genPlayerHistoryInfo = func(spinID string, isFree bool, createdTime, totalBetValue, totalPriceValue, totalBonusValue, multiple int64, player *gamehall.PlayerHistoryInfo) { -// player.SpinID = proto.String(spinID) -// player.CreatedTime = proto.Int64(createdTime) -// player.TotalBetValue = proto.Int64(totalBetValue) -// player.TotalPriceValue = proto.Int64(totalPriceValue) -// player.IsFree = proto.Bool(isFree) -// player.TotalBonusValue = proto.Int64(totalBonusValue) -// player.Multiple = proto.Int64(multiple) -// } -// -// var genPlayerHistoryInfoMsg = func(spinid string, v *model.NeedGameRecord, gdl *model.GameDetailedLog, player *gamehall.PlayerHistoryInfo) { -// switch gameid { -// //case common.GameId_IceAge: -// // data, err := model.UnMarshalIceAgeGameNote(gdl.GameDetailedNote) -// // if err != nil { -// // logger.Logger.Errorf("World UnMarshalIceAgeGameNote error:%v", err) -// // } -// // gnd := data.(*model.IceAgeType) -// // genPlayerHistoryInfo(spinid, gnd.IsFree, int64(v.Ts), int64(gnd.Score), gnd.TotalPriceValue, gnd.TotalBonusValue, player) -// //case common.GameId_TamQuoc: -// // data, err := model.UnMarshalTamQuocGameNote(gdl.GameDetailedNote) -// // if err != nil { -// // logger.Logger.Errorf("World UnMarshalTamQuocGameNote error:%v", err) -// // } -// // gnd := data.(*model.TamQuocType) -// // genPlayerHistoryInfo(spinid, gnd.IsFree, int64(v.Ts), int64(gnd.Score), gnd.TotalPriceValue, gnd.TotalBonusValue, player) -// //case common.GameId_CaiShen: -// // data, err := model.UnMarshalCaiShenGameNote(gdl.GameDetailedNote) -// // if err != nil { -// // logger.Logger.Errorf("World UnMarshalCaiShenGameNote error:%v", err) -// // } -// // gnd := data.(*model.CaiShenType) -// // genPlayerHistoryInfo(spinid, gnd.IsFree, int64(v.Ts), int64(gnd.Score), gnd.TotalPriceValue, gnd.TotalBonusValue, player) -// case common.GameId_Crash: -// data, err := model.UnMarshalGameNoteByHUNDRED(gdl.GameDetailedNote) -// if err != nil { -// logger.Logger.Errorf("World UnMarshalAvengersGameNote error:%v", err) -// } -// jsonString, _ := json.Marshal(data) -// -// // convert json to struct -// gnd := model.CrashType{} -// json.Unmarshal(jsonString, &gnd) -// -// //gnd := data.(*model.CrashType) -// for _, curplayer := range gnd.PlayerData { -// if curplayer.UserId == p.SnId { -// genPlayerHistoryInfo(spinid, false, int64(v.Ts), int64(curplayer.UserBetTotal), curplayer.ChangeCoin, 0, int64(curplayer.UserMultiple), player) -// break -// } -// } -// case common.GameId_Avengers: -// data, err := model.UnMarshalAvengersGameNote(gdl.GameDetailedNote) -// if err != nil { -// logger.Logger.Errorf("World UnMarshalAvengersGameNote error:%v", err) -// } -// gnd := data.(*model.GameResultLog) -// genPlayerHistoryInfo(spinid, gnd.BaseResult.IsFree, int64(v.Ts), int64(gnd.BaseResult.TotalBet), gnd.BaseResult.WinTotal, gnd.BaseResult.WinSmallGame, 0, player) -// //case common.GameId_EasterIsland: -// // data, err := model.UnMarshalEasterIslandGameNote(gdl.GameDetailedNote) -// // if err != nil { -// // logger.Logger.Errorf("World UnMarshalEasterIslandGameNote error:%v", err) -// // } -// // gnd := data.(*model.EasterIslandType) -// // genPlayerHistoryInfo(spinid, gnd.IsFree, int64(v.Ts), int64(gnd.Score), gnd.TotalPriceValue, gnd.TotalBonusValue, player) -// default: -// logger.Logger.Errorf("World CSHundredSceneGetGameHistoryInfoHandler receive gameid(%v) error", gameid) -// } -// } -// -// gameclass := int32(2) -// spinid := strconv.FormatInt(int64(p.SnId), 10) -// dbGameFrees := srvdata.PBDB_GameFreeMgr.Datas.Arr //.GetData(data.DbGameFree.Id) -// roomtype := int32(0) -// for _, v := range dbGameFrees { -// if int32(gameid) == v.GetGameId() { -// gameclass = v.GetGameClass() -// roomtype = v.GetSceneType() -// break -// } -// } -// -// gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 50, 0, 0, roomtype, gameclass, gameid) -// pack := &gamehall.SCPlayerHistory{} -// for _, v := range gpl.Data { -// if v.GameDetailedLogId == "" { -// logger.Logger.Error("World PlayerHistory GameDetailedLogId is nil") -// break -// } -// gdl := model.GetPlayerHistory(p.Platform, v.GameDetailedLogId) -// player := &gamehall.PlayerHistoryInfo{} -// genPlayerHistoryInfoMsg(spinid, v, gdl, player) -// pack.PlayerHistory = append(pack.PlayerHistory, player) -// } -// proto.SetDefaults(pack) -// logger.Logger.Infof("World gameid:%v PlayerHistory:%v ", gameid, pack) -// return pack -// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { -// if data == nil { -// logger.Logger.Error("World PlayerHistory data is nil") -// return -// } -// p.SendToClient(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEPLAYERHISTORY), data) -// }), "CSGetPlayerHistoryHandlerWorld").Start() -// case BIGWIN_HISTORY_MODEL: // 爆奖记录 -// jackpotList := JackpotListMgrSington.GetJackpotList(gameid) -// //if len(jackpotList) < 1 { -// // JackpotListMgrSington.GenJackpot(gameid) // 初始化爆奖记录 -// // JackpotListMgrSington.after(gameid) // 开启定时器 -// // jackpotList = JackpotListMgrSington.GetJackpotList(gameid) -// //} -// pack := JackpotListMgrSington.GetStoCMsg(jackpotList) -// pack.GameId = msg.GetGameId() -// logger.Logger.Infof("World BigWinHistory: %v %v", gameid, pack) -// p.SendToClient(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEBIGWINHISTORY), pack) -// case GAME_HISTORY_MODEL: -// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { -// var genGameHistoryInfo = func(gameNumber string, createdTime, multiple int64, hash string, gamehistory *gamehall.GameHistoryInfo) { -// gamehistory.GameNumber = proto.String(gameNumber) -// gamehistory.CreatedTime = proto.Int64(createdTime) -// gamehistory.Hash = proto.String(hash) -// gamehistory.Multiple = proto.Int64(multiple) -// } -// -// gls := model.GetAllGameDetailedLogsByGameIdAndTs(p.Platform, gameid, 20) -// -// pack := &gamehall.SCPlayerHistory{} -// for _, v := range gls { -// -// gamehistory := &gamehall.GameHistoryInfo{} -// -// data, err := model.UnMarshalGameNoteByHUNDRED(v.GameDetailedNote) -// if err != nil { -// logger.Logger.Errorf("World UnMarshalAvengersGameNote error:%v", err) -// } -// jsonString, _ := json.Marshal(data) -// -// // convert json to struct -// gnd := model.CrashType{} -// json.Unmarshal(jsonString, &gnd) -// -// genGameHistoryInfo(v.LogId, int64(v.Ts), int64(gnd.Rate), gnd.Hash, gamehistory) -// pack.GameHistory = append(pack.GameHistory, gamehistory) -// } -// proto.SetDefaults(pack) -// logger.Logger.Infof("World gameid:%v History:%v ", gameid, pack) -// return pack -// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { -// if data == nil { -// logger.Logger.Error("World GameHistory data is nil") -// return -// } -// p.SendToClient(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEPLAYERHISTORY), data) -// }), "CSGetGameHistoryHandlerWorld").Start() -// default: -// logger.Logger.Errorf("World CSHundredSceneGetGameHistoryInfoHandler receive historyModel(%v) error", historyModel) -// } -// } -// } -// return nil -//} - func init() { common.RegisterHandler(int(gamehall.HundredScenePacketID_PACKET_CS_HUNDREDSCENE_GETPLAYERNUM), &CSHundredSceneGetPlayerNumHandler{}) netlib.RegisterFactory(int(gamehall.HundredScenePacketID_PACKET_CS_HUNDREDSCENE_GETPLAYERNUM), &CSHundredSceneGetPlayerNumPacketFactory{}) common.RegisterHandler(int(gamehall.HundredScenePacketID_PACKET_CS_HUNDREDSCENE_OP), &CSHundredSceneOpHandler{}) netlib.RegisterFactory(int(gamehall.HundredScenePacketID_PACKET_CS_HUNDREDSCENE_OP), &CSHundredSceneOpPacketFactory{}) - //请求游戏列表 - common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_GAMEOBSERVE), &CSGameObserveHandler{}) - netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_GAMEOBSERVE), &CSGameObservePacketFactory{}) - - //// 请求奖池信息 - //common.RegisterHandler(int(gamehall.HundredScenePacketID_PACKET_CS_GAMEJACKPOT), &CSHundredSceneGetGameJackpotHandler{}) - //netlib.RegisterFactory(int(gamehall.HundredScenePacketID_PACKET_CS_GAMEJACKPOT), &CSHundredSceneGetGameJackpotPacketFactory{}) - - ////// 请求历史记录和爆奖记录 - //common.RegisterHandler(int(gamehall.HundredScenePacketID_PACKET_CS_GAMEHISTORYINFO), &CSHundredSceneGetGameHistoryInfoHandler{}) - //netlib.RegisterFactory(int(gamehall.HundredScenePacketID_PACKET_CS_GAMEHISTORYINFO), &CSHundredSceneGetGameHistoryInfoPacketFactory{}) } From 904982158a3486c5aa1107d71f5c22e0e33bd476 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 26 Aug 2024 16:54:07 +0800 Subject: [PATCH 35/63] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E5=9C=BA=E6=B8=B8?= =?UTF-8?q?=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 8 + data/DB_GameRule.dat | Bin 1273 -> 1273 bytes data/DB_GameRule.json | 8 +- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes gamesrv/action/action_game.go | 4 + gamesrv/base/player.go | 3 - gamesrv/base/scene.go | 103 +- gamesrv/tienlen/scenedata_tienlen.go | 19 +- gamesrv/tienlen/scenepolicy_tienlen.go | 54 +- model/gamedetailedlog.go | 7 +- protocol/gamehall/coinscene.proto | 4 +- protocol/gamehall/convert.sh | 5 - protocol/gamehall/copytoccc.sh | 4 - protocol/gamehall/copytowin88.sh | 4 - protocol/gamehall/game.pb.go | 9985 ++--- protocol/gamehall/game.proto | 906 +- protocol/gamehall/gamehall.js | 46999 ----------------------- protocol/server/server.pb.go | 1554 +- protocol/server/server.proto | 3 +- protocol/tienlen/tienlen.pb.go | 271 +- protocol/tienlen/tienlen.proto | 15 +- worldsrv/action_bag.go | 4 +- worldsrv/action_friend.go | 2 +- worldsrv/action_game.go | 417 +- worldsrv/action_pets.go | 4 +- worldsrv/action_phonelottery.go | 6 +- worldsrv/action_player.go | 15 +- worldsrv/action_server.go | 26 +- worldsrv/action_welfare.go | 6 +- worldsrv/bagmgr.go | 14 +- worldsrv/coinscenepool_base.go | 21 +- worldsrv/coinscenepool_local.go | 47 +- worldsrv/etcd.go | 2 +- worldsrv/gameconfig.go | 6 +- worldsrv/gamesess.go | 40 +- worldsrv/hundredscenemgr.go | 30 +- worldsrv/matchscenemgr.go | 21 +- worldsrv/platform.go | 96 +- worldsrv/platformgamehall.go | 71 - worldsrv/player.go | 17 - worldsrv/scene.go | 558 +- worldsrv/scenemgr.go | 214 +- worldsrv/scenepolicy.go | 83 +- worldsrv/scenepolicydata.go | 347 +- worldsrv/trascate_webapi.go | 7 +- worldsrv/welfmgr.go | 6 +- xlsx/DB_GameRule.xlsx | Bin 12784 -> 12785 bytes 48 files changed, 5260 insertions(+), 56756 deletions(-) delete mode 100644 protocol/gamehall/convert.sh delete mode 100644 protocol/gamehall/copytoccc.sh delete mode 100644 protocol/gamehall/copytowin88.sh delete mode 100644 protocol/gamehall/gamehall.js delete mode 100644 worldsrv/platformgamehall.go diff --git a/common/constant.go b/common/constant.go index fd8a9f0..7f570f6 100644 --- a/common/constant.go +++ b/common/constant.go @@ -309,6 +309,7 @@ const ( GainWayItemFenGain = 103 // 道具分解获得 GainWayGuide = 104 //新手引导奖励 GainWayVipGift9 = 105 //vip等级礼包 + GainWayRoomCost = 106 //房费消耗 ) // 后台选择 金币变化类型 的充值 类型id号起始 @@ -867,3 +868,10 @@ const ( DataConfigSprite = 1 // 精灵配置 DataConfigMatchAudience = 2 // 赛事观战开关 ) + +// 房间状态 +const ( + SceneStateWaite = 0 // 等待 + SceneStateStart = 1 // 开始 + SceneStateEnd = 2 // 结束 +) diff --git a/data/DB_GameRule.dat b/data/DB_GameRule.dat index 3e94de63ec4cb336d5bdc1b5ebec1784a40de21d..54c601584a63c38e854c44b53d543c0725327b10 100644 GIT binary patch delta 32 kcmey#`IB?QD@I0^$*&o;7&#`3F&P6%FA%x8j;Wdn0I+ol2><{9 delta 32 kcmey#`IB?QD@I0!$*&o;7#SyvF&P6%FA%x8j;Wdn0IwMc@Bjb+ diff --git a/data/DB_GameRule.json b/data/DB_GameRule.json index d200ca5..ec4d5e9 100644 --- a/data/DB_GameRule.json +++ b/data/DB_GameRule.json @@ -71,7 +71,7 @@ "Name": "十三张(四人场)", "GameId": 211, "Params": [ - 0, + 4, 0, 30, 50, @@ -84,7 +84,7 @@ "Name": "十三张(八人场)", "GameId": 212, "Params": [ - 1, + 8, 0, 30, 50, @@ -97,7 +97,7 @@ "Name": "十三张(自由场经典场)", "GameId": 213, "Params": [ - 1, + 8, 0, 30, 50, @@ -110,7 +110,7 @@ "Name": "十三张(自由场癞子场)", "GameId": 214, "Params": [ - 1, + 8, 0, 30, 50, diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index f9031710cf856fc3845657304ab3d4d2da51d05f..72db3e8a73873ae51f1c0e2ac3e4d7c127881859 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ4VAwErEfy% zTWIRTIUwf4)Pd!J_QLd|+XpiTY%jX|lsLieXjuD*g)5eW1;ybo3(z&v=oe-#2HHXZWimW9 literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;Ik1}#HWz3=%p9;jB=^AVM=@WC6YP$LwU1c1VmVmA4neUPXuut)LtqBLEP{Cq XW+BXAlmJj-=U4>v=oe-#2HHXZW^z0= diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 5c05cb71f34940747b3f81de2a97d99721b9ef06..51cc1b583659bcaa00dac6101f25d501e9a8d27a 100644 GIT binary patch delta 291 zcmdn2xmj~UxgZR delta 262 zcmdn2xmj~UxgZC}!d^Ck1-)!uY#d8~ERl&Fr!WNNHYYP?GDC$YEaV5Oz1YSqz%=u6u4U@0)2rx2DW@BpsDp&+Gmm}plD_kO*=kc^K%0d*gdO>|~NG^(rk&(-R<0{Z) jvXdQn#W#oXd4bdmPTt6`CkS%|MEQXh+sz;N53>LOHqcBd diff --git a/gamesrv/action/action_game.go b/gamesrv/action/action_game.go index 023c97a..9f76f66 100644 --- a/gamesrv/action/action_game.go +++ b/gamesrv/action/action_game.go @@ -42,6 +42,10 @@ func (this *CSDestroyRoomHandler) Process(s *netlib.Session, packetid int, data logger.Logger.Warn("CSDestroyRoomHandler s.creator != p.AccountId") return nil } + // 房卡场开始后不能解散 + if scene.IsCustom() && scene.NumOfGames > 0 { + return nil + } scene.Destroy(true) return nil } diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index b3543ee..ddd273f 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -467,9 +467,6 @@ func (this *Player) AddCoin(num int64, gainWay int32, syncFlag int, oper, remark if this.Coin < 0 { this.Coin = 0 } - if this.scene.IsHundredScene() { - this.scene.NewBigCoinNotice(this, int64(num), 5) - } } //增加玩家经验 if num > 0 { diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index d4d70d1..56ea1fc 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -24,12 +24,6 @@ import ( "mongo.games.com/game/srvdata" ) -const ( - SCENE_STATE_INITED int = iota - SCENE_STATE_RUNNING - SCENE_STATE_OVER -) - const ReplayIdTf = "20060102150405" var sceneRandSeed = time.Now().UnixNano() @@ -119,22 +113,15 @@ type Scene struct { matchChgData *SceneMatchChgData //比赛变化数据 ChessRank []int32 - LoopNum int // 循环计数 - results []int // 本局游戏结果 - WebUser string // 操作人 - resultHistory [][]int // 记录数 [控制结果,局数...] - BaseScore int32 //tienlen游戏底分 - MatchId int64 //标记本次比赛的id,并不是后台id - MatchFinals bool //比赛场决赛 + BaseScore int32 //tienlen游戏底分 + MatchId int64 //标记本次比赛的id,并不是后台id + MatchFinals bool //比赛场决赛 MatchRound int64 MatchCurPlayerNum int64 MatchNextNeed int64 MatchType int64 // 0.普通场 1.锦标赛 2.冠军赛 3.vip专属 - MatchStop bool RealCtrl bool - Novice bool - Welfare bool - KillPoints bool + CycleID string } func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, params []int64, @@ -168,11 +155,11 @@ func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, plat GroupId: groupId, bEnterAfterStart: bEnterAfterStart, TotalOfGames: int(totalOfGames), - results: make([]int, common.MaxLoopNum), BaseScore: baseScore, playerNum: playerNum, ChessRank: cherank, } + s.CycleID, _ = model.AutoIncGameLogId() if s != nil && s.init() { logger.Logger.Trace("NewScene init success.") if !s.Testing { @@ -227,6 +214,7 @@ func (this *Scene) RebindPlayerSnId(oldSnId, newSnId int32) { func (this *Scene) GetInit() bool { return this.init() } + func (this *Scene) init() bool { tNow := time.Now() sceneRandSeed++ @@ -237,19 +225,6 @@ func (this *Scene) init() bool { this.KeyGameId = strconv.Itoa(int(this.DbGameFree.GetGameId())) this.KeyGamefreeId = strconv.Itoa(int(this.DbGameFree.GetId())) this.KeyGameDif = this.DbGameFree.GetGameDif() - - // test - //for i := 0; i < 100; i++ { - // n := this.rand.Intn(10) - // r := this.rand.Intn(3) + 1 - // str := fmt.Sprint(this.rand.Intn(1000), ":", r) - // for j := 0; j < n; j++ { - // str += fmt.Sprint(",", this.rand.Intn(1000), ":", r) - // } - // logger.Logger.Trace("--> str ", str) - // this.ParserResults1(str, "") - //} - // test return true } @@ -875,6 +850,7 @@ func (this *Scene) RobotBroadcast(packetid int, msg rawproto.Message) { } } } + func (this *Scene) BroadcastToAudience(packetid int, msg rawproto.Message) { if len(this.audiences) > 0 { mgs := make(map[*netlib.Session][]*srvlibproto.MCSessionUnion) @@ -933,7 +909,7 @@ func (this *Scene) ChangeSceneState(stateid int) { logger.Logger.Tracef("(this *Scene) [%v] ChangeSceneState -> %v", this.SceneId, state.GetState()) this.SceneState = state this.SceneState.OnEnter(this) - //this.NotifySceneState(stateid) + //this.SyncSceneState(stateid) } if this.aiMgr != nil { @@ -1024,6 +1000,10 @@ func (this *Scene) IsMatchScene() bool { return this.SceneId >= common.MatchSceneStartId && this.SceneId <= common.MatchSceneMaxId } +func (this *Scene) IsCustom() bool { + return this.GetDBGameFree().GetIsCustom() > 0 +} + func (this *Scene) IsFull() bool { return len(this.Players) >= this.playerNum } @@ -1288,14 +1268,15 @@ func (this *Scene) SyncPlayerCoin() { // this.SendToWorld(int(server.SSPacketID_PACKET_GW_SYNCPLAYERCOIN), pack) //} } -func (this *Scene) NotifySceneStateFishing(state int) { + +func (this *Scene) SyncSceneState(state int) { pack := &server.GWSceneState{ - RoomId: proto.Int(this.SceneId), - Fishing: proto.Int32(int32(state)), + RoomId: int32(this.SceneId), + RoomState: int32(state), } - proto.SetDefaults(pack) this.SendToWorld(int(server.SSPacketID_PACKET_GW_SCENESTATE), pack) } + func (this *Scene) NotifySceneRoundStart(round int) { pack := &server.GWSceneStart{ RoomId: proto.Int(this.SceneId), @@ -1317,6 +1298,7 @@ func (this *Scene) NotifySceneRoundPause() { proto.SetDefaults(pack) this.SendToWorld(int(server.SSPacketID_PACKET_GW_SCENESTART), pack) } + func (this *Scene) SyncGameState(sec, bl int) { if this.SceneState != nil { pack := &server.GWGameState{ @@ -1331,7 +1313,7 @@ func (this *Scene) SyncGameState(sec, bl int) { } } -// 游戏开始的时候同步防伙牌数据 +// SyncScenePlayer 游戏开始的时候同步防伙牌数据 func (this *Scene) SyncScenePlayer() { pack := &server.GWScenePlayerLog{ GameId: proto.Int(this.GameId), @@ -1342,23 +1324,10 @@ func (this *Scene) SyncScenePlayer() { continue } pack.Snids = append(pack.Snids, value.SnId) - pack.IsGameing = append(pack.IsGameing, value.IsGameing()) } this.SendToWorld(int(server.SSPacketID_PACKET_GW_SCENEPLAYERLOG), pack) } -// 防伙牌换桌 -func (this *Scene) ChangeSceneEvent() { - timer.StartTimer(timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool { - if this.DbGameFree.GetMatchMode() == 1 { - return true - } - this.SendToWorld(int(server.SSPacketID_PACKET_GW_CHANGESCENEEVENT), &server.GWChangeSceneEvent{ - SceneId: proto.Int(this.SceneId), - }) - return true - }), nil, time.Second*3, 1) -} func (this *Scene) RecordReplayStart() { if !this.IsHundredScene() && !this.IsMatchScene() { logger.Logger.Trace("RecordReplayStart-----", this.replayCode, this.NumOfGames, this.replayAddId) @@ -1473,6 +1442,7 @@ func (this *Scene) CreateGameRecPacket() *server.GWGameRec { GameTime: proto.Int(int(time.Now().Sub(this.GameStartTime) / time.Second)), } } + func (this *Scene) IsAllReady() bool { for _, p := range this.Players { if !p.IsOnLine() || !p.IsReady() { @@ -1547,6 +1517,7 @@ func (this *Scene) CoinPoolCanOut() bool { return int32(noRobotPlayerCount) >= this.dbGameFree.GetMinOutPlayerNum() */ } + func (this *Scene) ClearAutoPlayer() { for _, p := range this.Players { if p.IsAuto() { @@ -1556,31 +1527,6 @@ func (this *Scene) ClearAutoPlayer() { } } -func (this *Scene) NewBigCoinNotice(player *Player, num int64, msgType int64) { - //if !this.Testing && !this.IsMatchScene() { - // if num < model.GameParamData.NoticeCoinMin || model.GameParamData.NoticeCoinMax < num { - // return - // } - // start := time.Now().Add(time.Second * 30).Unix() - // content := fmt.Sprintf("%v|%v|%v", player.GetName(), this.GetHundredSceneName(), num) - // pack := &server.GWNewNotice{ - // Ch: proto.String(""), - // Content: proto.String(content), - // Start: proto.Int64(start), - // Interval: proto.Int64(0), - // Count: proto.Int64(1), - // Msgtype: proto.Int64(msgType), - // Platform: proto.String(player.Platform), - // Isrob: proto.Bool(player.IsRob), - // Priority: proto.Int32(int32(num)), - // } - // if common.HorseRaceLampPriority_Rand == model.GameParamData.NoticePolicy { - // pack.Priority = proto.Int32(rand.Int31n(100)) - // } - // this.SendToWorld(int(server.SSPacketID_PACKET_GW_NEWNOTICE), pack) - //} -} - type GameDetailedParam struct { Trend20Lately string //最近20局开奖结果 CtrlType int @@ -1610,6 +1556,9 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga if this.IsMatchScene() { log.MatchId = this.MatchId } + if this.IsCustom() { + log.CycleId = this.CycleID + } LogChannelSingleton.WriteLog(log) } } @@ -1624,6 +1573,9 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga if this.IsMatchScene() { log.MatchId = this.MatchId } + if this.IsCustom() { + log.CycleId = this.CycleID + } newLog := new(model.GameDetailedLog) *newLog = *log LogChannelSingleton.WriteLog(log) @@ -1796,6 +1748,7 @@ func (this *Scene) RandRobotCnt() { //logger.Logger.Tracef("===(this *Scene) RandRobotCnt() sceneid:%v gameid:%v mode:%v robotLimit:%v robotNum:%v", this.SceneId, this.GameId, this.GameMode, this.robotLimit, this.robotNum) } } + func (this *Scene) GetRobotTime() int64 { l := int64(common.RandInt(model.NormalParamData.RobotRandomTimeMin, model.NormalParamData.RobotRandomTimeMax)) return l + time.Now().Unix() diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index cd8d905..dd5ffad 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -21,6 +21,12 @@ import ( "mongo.games.com/game/srvdata" ) +type BilledInfo struct { + Round int32 // 第几局 + ChangeScore int64 // 积分变化 + Score int64 // 结算后积分 +} + // 房间上的额外数据 type TienLenSceneData struct { *base.Scene //场景 @@ -56,13 +62,15 @@ type TienLenSceneData struct { isCardsKu bool //是否是牌库 cardsKuId int32 //牌库ID ctrlType int // 1控赢 2控输 0不控 + BilledList map[int32]*[]*BilledInfo // 多轮结算记录, 玩家id:每局结算记录 } func NewTienLenSceneData(s *base.Scene) *TienLenSceneData { sceneEx := &TienLenSceneData{ - Scene: s, - poker: rule.NewPoker(), - players: make(map[int32]*TienLenPlayerData), + Scene: s, + poker: rule.NewPoker(), + players: make(map[int32]*TienLenPlayerData), + BilledList: map[int32]*[]*BilledInfo{}, } sceneEx.Clear() return sceneEx @@ -143,6 +151,11 @@ func (this *TienLenSceneData) CanStart() bool { return false } } + + if this.IsCustom() { + return this.IsAllReady() && this.GetPlayerCnt() >= this.GetPlayerNum() + } + // 房间人数>=2开始,并且有真人或者是预创建房间,并且有房主 if nPlayerCount >= 2 && (this.GetRealPlayerNum() > 0 || this.IsPreCreateScene()) { //人数>=2开始 return true diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 525fe17..340402b 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -953,13 +953,17 @@ func (this *SceneHandCardStateTienLen) OnEnter(s *base.Scene) { s.NotifySceneRoundStart(s.NumOfGames) this.BroadcastRoomState(s, this.GetState(), int64(s.NumOfGames)) + if s.IsCustom() && s.NumOfGames == 1 { + s.SyncSceneState(common.SceneStateStart) + } + //同步防伙牌数据 sceneEx.SyncScenePlayer() //发牌 if rule.TestOpen { sceneEx.SendHandCardTest() } else { - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { sceneEx.SendHandCard_Match() } else { sceneEx.SendHandCardOdds() @@ -1772,7 +1776,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { gainScore = losePlayerCoin } losePlayerScore = gainScore - if sceneEx.IsMatchScene() { //比赛场是积分,不应该增加账变 + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { //比赛场是积分,不应该增加账变 losePlayer.AddCoinNoLog(int64(-gainScore), 0) } else { losePlayer.AddCoin(int64(-gainScore), common.GainWay_CoinSceneLost, 0, "system", s.GetSceneName()) @@ -1914,7 +1918,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { astWinGainScore = lastWinPlayerCoin } lastWinPlayerScore = astWinGainScore - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { lastWinPlayer.AddCoinNoLog(int64(-astWinGainScore), 0) } else { lastWinPlayer.AddCoin(int64(-astWinGainScore), common.GainWay_CoinSceneLost, 0, "system", s.GetSceneName()) @@ -2027,7 +2031,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { gainTaxScore = losePlayerScore + lastWinPlayerScore - gainScore rankScore = loseRankScore + lastWinPlayerRankScore } - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { playerEx.AddCoinNoLog(int64(gainScore), 0) } else { playerEx.AddCoin(gainScore, common.GainWay_CoinSceneWin, 0, "system", s.GetSceneName()) @@ -2132,7 +2136,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { taxRate := sceneEx.DbGameFree.GetTaxRate() //万分比 gainScore := int64(float64(lastWinPlayerScore) * float64(10000-taxRate) / 10000.0) //税后 gainTaxScore := lastWinPlayerScore - gainScore - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { playerEx.AddCoinNoLog(int64(gainScore), 0) } else { playerEx.AddCoin(gainScore, common.GainWay_CoinSceneWin, 0, "system", s.GetSceneName()) @@ -2274,7 +2278,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { gainScore = losePlayerCoin } winScore += gainScore - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { playerEx.AddCoinNoLog(int64(-gainScore), 0) } else { playerEx.AddCoin(int64(-gainScore), common.GainWay_CoinSceneLost, 0, "system", s.GetSceneName()) @@ -2413,7 +2417,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { taxRate := sceneEx.DbGameFree.GetTaxRate() //万分比 gainScore := int64(float64(winScore) * float64(10000-taxRate) / 10000.0) //税后 gainTaxScore := winScore - gainScore - if sceneEx.IsMatchScene() { + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { playerEx.AddCoinNoLog(int64(gainScore), 0) } else { playerEx.AddCoin(gainScore, common.GainWay_CoinSceneWin, 0, "system", s.GetSceneName()) @@ -2530,6 +2534,39 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenGameBilled), pack, 0) logger.Logger.Trace("TienLenPacketID_PACKET_SCTienLenGameBilled gameFreeId:", sceneEx.GetGameFreeId(), ";pack:", pack) + for _, v := range tienlenType.PlayerData { + d := sceneEx.BilledList[v.UserId] + if d == nil { + arr := make([]*BilledInfo, 0) + d = &arr + sceneEx.BilledList[v.UserId] = d + } + *d = append(*d, &BilledInfo{ + Round: int32(sceneEx.NumOfGames), + ChangeScore: v.BillCoin, + Score: base.PlayerMgrSington.GetPlayerBySnId(v.UserId).GetCoin(), + }) + } + if sceneEx.NumOfGames >= sceneEx.TotalOfGames { + sceneEx.BilledList = make(map[int32]*[]*BilledInfo) + packBilled := &tienlen.SCTienLenCycleBilled{} + for snid, billedList := range sceneEx.BilledList { + info := &tienlen.TienLenCycleBilledInfo{ + SnId: snid, + } + for _, bill := range *billedList { + info.RoundScore = append(info.RoundScore, bill.ChangeScore) + info.Score = 1000 + } + packBilled.List = append(packBilled.List, info) + } + s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenCycleBilled), packBilled, 0) + + if s.IsCustom() { + s.SyncSceneState(common.SceneStateEnd) + } + } + // 牌局记录 info, err := model.MarshalGameNoteByFIGHT(&tienlenType) if err == nil { @@ -2696,6 +2733,9 @@ func (this *SceneBilledStateTienLen) OnLeave(s *base.Scene) { if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.MatchFinals || (s.MatchFinals && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 sceneEx.SceneDestroy(true) } + if s.TotalOfGames > 0 && s.NumOfGames >= s.TotalOfGames { + sceneEx.SceneDestroy(true) + } s.RankMatchDestroy() s.TryRelease() } diff --git a/model/gamedetailedlog.go b/model/gamedetailedlog.go index 2796720..6ab0260 100644 --- a/model/gamedetailedlog.go +++ b/model/gamedetailedlog.go @@ -35,15 +35,15 @@ type GameDetailedLogType struct { type GameDetailedLog struct { Id bson.ObjectId `bson:"_id"` //记录ID - LogId string //记录ID + LogId string //记录ID,每局游戏唯一 GameId int32 //游戏id ClubId int32 //俱乐部Id ClubRoom string //俱乐部包间 Platform string //平台id Channel string //渠道 Promoter string //推广员 - MatchId int64 //比赛ID - SceneId int32 //场景ID + MatchId int64 //比赛ID,应该用字符串的 + SceneId int32 //房间id,会重复 GameMode int32 //游戏类型 GameFreeid int32 //游戏类型房间号 PlayerCount int32 //玩家数量 @@ -57,6 +57,7 @@ type GameDetailedLog struct { Ts int64 //时间戳 CtrlType int // 1控赢 2控输 0不控 PlayerPool map[int]int // 个人水池分 + CycleId string // 本轮id,打一轮有多局 } func NewGameDetailedLog() *GameDetailedLog { diff --git a/protocol/gamehall/coinscene.proto b/protocol/gamehall/coinscene.proto index 338a425..c0e01b5 100644 --- a/protocol/gamehall/coinscene.proto +++ b/protocol/gamehall/coinscene.proto @@ -30,14 +30,14 @@ enum OpResultCode { } //自由场协议编号 2320-2339 enum CoinSceneGamePacketID { - PACKET_CoinSceneGame_ZERO = 0; // 弃用消息号 + PACKET_CoinSceneGame_ZERO = 0; // 弃用消息号 PACKET_CS_COINSCENE_GETPLAYERNUM = 2320; PACKET_SC_COINSCENE_GETPLAYERNUM = 2321; PACKET_CS_COINSCENE_OP = 2322; PACKET_SC_COINSCENE_OP = 2323; PACKET_CS_COINSCENE_LISTROOM = 2324; PACKET_SC_COINSCENE_LISTROOM = 2325; - PACKET_SC_COINSCENE_QUEUESTATE = 2326; + PACKET_SC_COINSCENE_QUEUESTATE = 2326; } //PACKET_CS_COINSCENE_GETPLAYERNUM diff --git a/protocol/gamehall/convert.sh b/protocol/gamehall/convert.sh deleted file mode 100644 index d4b0b8b..0000000 --- a/protocol/gamehall/convert.sh +++ /dev/null @@ -1,5 +0,0 @@ -cd $CCC_CLIENT_DIR/protocol/gamehall -npx pbjs --dependency protobufjs/minimal.js --target static-module --wrap commonjs --out gamehall.js ./*.proto -npx pbts --main --out ./gamehall.d.ts ./gamehall.js - -cp ./gamehall.d.ts ./gamehall.js $CCC_CLIENT_DIR/vietnam/assets/ScriptCore/protocol \ No newline at end of file diff --git a/protocol/gamehall/copytoccc.sh b/protocol/gamehall/copytoccc.sh deleted file mode 100644 index 45b87fe..0000000 --- a/protocol/gamehall/copytoccc.sh +++ /dev/null @@ -1,4 +0,0 @@ -# 将chesstitians目录拷贝到client工程目录下的protocol文件夹 -echo WIN88_DIR=$WIN88_DIR -echo CCC_CLIENT_DIR=$CCC_CLIENT_DIR -cp -R $WIN88_DIR/protocol/gamehall $CCC_CLIENT_DIR/protocol \ No newline at end of file diff --git a/protocol/gamehall/copytowin88.sh b/protocol/gamehall/copytowin88.sh deleted file mode 100644 index 353fb1f..0000000 --- a/protocol/gamehall/copytowin88.sh +++ /dev/null @@ -1,4 +0,0 @@ -# 将chesstitians目录拷贝到client工程目录下的protocol文件夹 -echo WIN88_DIR=$WIN88_DIR -echo CCC_CLIENT_DIR=$CCC_CLIENT_DIR -cp -R $CCC_CLIENT_DIR/protocol/gamehall $WIN88_DIR/protocol \ No newline at end of file diff --git a/protocol/gamehall/game.pb.go b/protocol/gamehall/game.pb.go index fb0a199..eb530e9 100644 --- a/protocol/gamehall/game.pb.go +++ b/protocol/gamehall/game.pb.go @@ -50,6 +50,8 @@ const ( OpResultCode_Game_OPRC_AllocRoomIdFailed_Game OpResultCode_Game = 1097 //房间id获取失败 OpResultCode_Game_OPRC_PrivateRoomCountLimit_Game OpResultCode_Game = 1098 //私人房间上限 OpResultCode_Game_OPRC_RoomNotExit OpResultCode_Game = 1099 // 已经不在房间了 + OpResultCode_Game_OPRC_PasswordError OpResultCode_Game = 1101 //密码错误 + OpResultCode_Game_OPRC_CostNotEnough OpResultCode_Game = 1102 //房卡不足 OpResultCode_Game_OPRC_LowerRice_ScenceMax_Game OpResultCode_Game = 1075 //超过最大下米数量 OpResultCode_Game_OPRC_LowerRice_PlayerMax_Game OpResultCode_Game = 1076 //超过单个用户最大下米数 OpResultCode_Game_OPRC_LowerRice_PlayerDownMax_Game OpResultCode_Game = 1077 @@ -95,6 +97,8 @@ var ( 1097: "OPRC_AllocRoomIdFailed_Game", 1098: "OPRC_PrivateRoomCountLimit_Game", 1099: "OPRC_RoomNotExit", + 1101: "OPRC_PasswordError", + 1102: "OPRC_CostNotEnough", 1075: "OPRC_LowerRice_ScenceMax_Game", 1076: "OPRC_LowerRice_PlayerMax_Game", 1077: "OPRC_LowerRice_PlayerDownMax_Game", @@ -136,6 +140,8 @@ var ( "OPRC_AllocRoomIdFailed_Game": 1097, "OPRC_PrivateRoomCountLimit_Game": 1098, "OPRC_RoomNotExit": 1099, + "OPRC_PasswordError": 1101, + "OPRC_CostNotEnough": 1102, "OPRC_LowerRice_ScenceMax_Game": 1075, "OPRC_LowerRice_PlayerMax_Game": 1076, "OPRC_LowerRice_PlayerDownMax_Game": 1077, @@ -179,207 +185,118 @@ func (OpResultCode_Game) EnumDescriptor() ([]byte, []int) { return file_game_proto_rawDescGZIP(), []int{0} } -//消息id 2200-2319 type GameHallPacketID int32 const ( - GameHallPacketID_PACKET_GameHall_ZERO GameHallPacketID = 0 // 弃用消息号 - GameHallPacketID_PACKET_CS_JOINGAME GameHallPacketID = 2200 - GameHallPacketID_PACKET_SC_JOINGAME GameHallPacketID = 2201 - GameHallPacketID_PACKET_CS_CREATEROOM GameHallPacketID = 2202 - GameHallPacketID_PACKET_SC_CREATEROOM GameHallPacketID = 2203 - GameHallPacketID_PACKET_CS_ENTERROOM GameHallPacketID = 2204 - GameHallPacketID_PACKET_SC_ENTERROOM GameHallPacketID = 2205 - GameHallPacketID_PACKET_CS_RETURNROOM GameHallPacketID = 2206 - GameHallPacketID_PACKET_SC_RETURNROOM GameHallPacketID = 2207 - GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM GameHallPacketID = 2208 - GameHallPacketID_PACKET_CS_ENTERGAME GameHallPacketID = 2209 - GameHallPacketID_PACKET_SC_ENTERGAME GameHallPacketID = 2210 - GameHallPacketID_PACKET_CS_QUITGAME GameHallPacketID = 2211 - GameHallPacketID_PACKET_SC_QUITGAME GameHallPacketID = 2212 - GameHallPacketID_PACKET_SC_CARDGAINWAY GameHallPacketID = 2213 - GameHallPacketID_PACKET_CS_TASKLIST GameHallPacketID = 2214 - GameHallPacketID_PACKET_SC_TASKLIST GameHallPacketID = 2215 - GameHallPacketID_PACKET_SC_TASKCHG GameHallPacketID = 2216 - GameHallPacketID_PACKET_SC_TACKCOMPLETE GameHallPacketID = 2217 - GameHallPacketID_PACKET_SC_TASKDEL GameHallPacketID = 2218 - GameHallPacketID_PACKET_CS_TACKDRAWPRIZE GameHallPacketID = 2219 - GameHallPacketID_PACKET_SC_TACKDRAWPRIZE GameHallPacketID = 2220 - GameHallPacketID_PACKET_CS_GETAGENTGAMEREC GameHallPacketID = 2223 - GameHallPacketID_PACKET_SC_GETAGENTGAMEREC GameHallPacketID = 2224 - GameHallPacketID_PACKET_CS_DELAGENTGAMEREC GameHallPacketID = 2225 - GameHallPacketID_PACKET_CS_SHOPBUY GameHallPacketID = 2226 - GameHallPacketID_PACKET_SC_SHOPBUY GameHallPacketID = 2227 - GameHallPacketID_PACKET_SC_LIMITLIST GameHallPacketID = 2228 - GameHallPacketID_PACKET_CS_GETLATELYGAMEIDS GameHallPacketID = 2229 - GameHallPacketID_PACKET_SC_GETLATELYGAMEIDS GameHallPacketID = 2230 - GameHallPacketID_PACKET_CS_GETGAMECONFIG GameHallPacketID = 2231 - GameHallPacketID_PACKET_SC_GETGAMECONFIG GameHallPacketID = 2232 - GameHallPacketID_PACKET_SC_CHANGEGAMESTATUS GameHallPacketID = 2233 - GameHallPacketID_PACKET_CS_ENTERHALL GameHallPacketID = 2240 - GameHallPacketID_PACKET_SC_ENTERHALL GameHallPacketID = 2241 - GameHallPacketID_PACKET_CS_LEAVEHALL GameHallPacketID = 2242 - GameHallPacketID_PACKET_SC_LEAVEHALL GameHallPacketID = 2243 - GameHallPacketID_PACKET_CS_HALLROOMLIST GameHallPacketID = 2244 - GameHallPacketID_PACKET_SC_HALLROOMLIST GameHallPacketID = 2245 - GameHallPacketID_PACKET_SC_ROOMPLAYERENTER GameHallPacketID = 2246 - GameHallPacketID_PACKET_SC_ROOMPLAYERLEAVE GameHallPacketID = 2247 - GameHallPacketID_PACKET_SC_ROOMSTATECHANG GameHallPacketID = 2248 - GameHallPacketID_PACKET_SC_HALLPLAYERNUM GameHallPacketID = 2249 - GameHallPacketID_PACKET_SC_BULLETIONINFO GameHallPacketID = 2250 - GameHallPacketID_PACKET_CS_BULLETIONINFO GameHallPacketID = 2251 - GameHallPacketID_PACKET_CS_CUSTOMERINFOLIST GameHallPacketID = 2252 - GameHallPacketID_PACKET_SC_CUSTOMERINFOLIST GameHallPacketID = 2253 - GameHallPacketID_PACKET_CS_ENTERDGGAME GameHallPacketID = 2254 - GameHallPacketID_PACKET_SC_ENTERDGGAME GameHallPacketID = 2255 - GameHallPacketID_PACKET_CS_LEAVEDGGAME GameHallPacketID = 2256 - GameHallPacketID_PACKET_SC_LEAVEDGGAME GameHallPacketID = 2257 - GameHallPacketID_PACKET_SC_PLAYERRECHARGEANSWER GameHallPacketID = 2258 //充值弹框协议 - GameHallPacketID_PACKET_CS_THRIDACCOUNTSTATICSTIC GameHallPacketID = 2259 - GameHallPacketID_PACKET_SC_THRIDACCOUNTSTATICSTIC GameHallPacketID = 2260 - GameHallPacketID_PACKET_CS_THRIDACCOUNTTRANSFER GameHallPacketID = 2261 - GameHallPacketID_PACKET_SC_THRIDACCOUNTTRANSFER GameHallPacketID = 2262 - GameHallPacketID_PACKET_CS_ENTERTHRIDGAME GameHallPacketID = 2263 - GameHallPacketID_PACKET_SC_ENTERTHRIDGAME GameHallPacketID = 2264 - GameHallPacketID_PACKET_CS_LEAVETHRIDGAME GameHallPacketID = 2265 - GameHallPacketID_PACKET_SC_LEAVETHRIDGAME GameHallPacketID = 2266 - GameHallPacketID_PACKET_CS_THRIDGAMELIST GameHallPacketID = 2267 - GameHallPacketID_PACKET_SC_THRIDGAMELIST GameHallPacketID = 2268 - GameHallPacketID_PACKET_CS_THRIDGAMEBALANCEUPDATE GameHallPacketID = 2269 - GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATE GameHallPacketID = 2270 - GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE GameHallPacketID = 2271 - GameHallPacketID_PACKET_CS_CREATEPRIVATEROOM GameHallPacketID = 2272 - GameHallPacketID_PACKET_SC_CREATEPRIVATEROOM GameHallPacketID = 2273 - GameHallPacketID_PACKET_CS_GETPRIVATEROOMLIST GameHallPacketID = 2274 - GameHallPacketID_PACKET_SC_GETPRIVATEROOMLIST GameHallPacketID = 2275 - GameHallPacketID_PACKET_CS_GETPRIVATEROOMHISTORY GameHallPacketID = 2276 - GameHallPacketID_PACKET_SC_GETPRIVATEROOMHISTORY GameHallPacketID = 2277 - GameHallPacketID_PACKET_CS_DESTROYPRIVATEROOM GameHallPacketID = 2278 - GameHallPacketID_PACKET_SC_DESTROYPRIVATEROOM GameHallPacketID = 2279 - GameHallPacketID_PACKET_CS_QUERYROOMINFO GameHallPacketID = 2280 - GameHallPacketID_PACKET_SC_QUERYROOMINFO GameHallPacketID = 2281 - GameHallPacketID_PACKET_SC_GAMESUBLIST GameHallPacketID = 2283 - GameHallPacketID_PACKET_CS_GAMEOBSERVE GameHallPacketID = 2284 - GameHallPacketID_PACKET_SC_GAMESTATE GameHallPacketID = 2285 - GameHallPacketID_PACKET_SC_SYNCGAMEFREE GameHallPacketID = 2286 - GameHallPacketID_PACKET_SC_LOTTERYSYNC GameHallPacketID = 2287 - GameHallPacketID_PACKET_CS_LOTTERYLOG GameHallPacketID = 2288 - GameHallPacketID_PACKET_SC_LOTTERYLOG GameHallPacketID = 2289 - GameHallPacketID_PACKET_SC_LOTTERYBILL GameHallPacketID = 2290 - GameHallPacketID_PACKET_CS_UPLOADLOC GameHallPacketID = 2291 - GameHallPacketID_PACKET_SC_UPLOADLOC GameHallPacketID = 2292 - GameHallPacketID_PACKET_CS_AUDIENCESIT GameHallPacketID = 2293 - GameHallPacketID_PACKET_SC_AUDIENCESIT GameHallPacketID = 2294 - GameHallPacketID_PACKET_CS_COMNOTICE GameHallPacketID = 2295 - GameHallPacketID_PACKET_SC_COMNOTICE GameHallPacketID = 2296 - GameHallPacketID_PACKET_SC_CHANGEENTRYSWITCH GameHallPacketID = 2297 //界面入口开关 - GameHallPacketID_PACKET_SC_NoticeChange GameHallPacketID = 2298 // 公告更新 - GameHallPacketID_PACKET_CS_LEAVEROOM GameHallPacketID = 8001 - GameHallPacketID_PACKET_SC_LEAVEROOM GameHallPacketID = 8002 - GameHallPacketID_PACKET_CS_DESTROYROOM GameHallPacketID = 8003 - GameHallPacketID_PACKET_SC_DESTROYROOM GameHallPacketID = 8004 - GameHallPacketID_PACKET_CS_FORCESTART GameHallPacketID = 8005 - GameHallPacketID_PACKET_SC_FORCESTART GameHallPacketID = 8006 - GameHallPacketID_PACKET_CS_AUDIENCE_LEAVEROOM GameHallPacketID = 8007 - GameHallPacketID_PACKET_CS_PLAYER_SWITCHFLAG GameHallPacketID = 8008 - GameHallPacketID_PACKET_CSRoomEvent GameHallPacketID = 8009 // 房间事件 - GameHallPacketID_PACKET_SCRoomEvent GameHallPacketID = 8010 // 房间事件 + // client -> worldsrv 协议 + // 消息id 2200-2319 + // 弃用消息号 + GameHallPacketID_PACKET_GameHall_ZERO GameHallPacketID = 0 + // 创建房间 + GameHallPacketID_PACKET_CS_CREATEROOM GameHallPacketID = 2202 + GameHallPacketID_PACKET_SC_CREATEROOM GameHallPacketID = 2203 + // 进入房间 + GameHallPacketID_PACKET_CS_ENTERROOM GameHallPacketID = 2204 + GameHallPacketID_PACKET_SC_ENTERROOM GameHallPacketID = 2205 + // 返回房间 + GameHallPacketID_PACKET_CS_RETURNROOM GameHallPacketID = 2206 + GameHallPacketID_PACKET_SC_RETURNROOM GameHallPacketID = 2207 + // 进入游戏 + GameHallPacketID_PACKET_CS_ENTERGAME GameHallPacketID = 2209 + GameHallPacketID_PACKET_SC_ENTERGAME GameHallPacketID = 2210 + // 退出游戏 + GameHallPacketID_PACKET_CS_QUITGAME GameHallPacketID = 2211 + GameHallPacketID_PACKET_SC_QUITGAME GameHallPacketID = 2212 + // 获取游戏分场配置 + GameHallPacketID_PACKET_CS_GETGAMECONFIG GameHallPacketID = 2231 + GameHallPacketID_PACKET_SC_GETGAMECONFIG GameHallPacketID = 2232 + // 修改游戏开关 + GameHallPacketID_PACKET_SC_CHANGEGAMESTATUS GameHallPacketID = 2233 + // 充值弹框协议 + GameHallPacketID_PACKET_SC_PLAYERRECHARGEANSWER GameHallPacketID = 2258 + // 创建竞技馆私人房 + GameHallPacketID_PACKET_CS_CREATEPRIVATEROOM GameHallPacketID = 2272 + GameHallPacketID_PACKET_SC_CREATEPRIVATEROOM GameHallPacketID = 2273 + // 查询竞技馆私人房列表 + GameHallPacketID_PACKET_CS_GETPRIVATEROOMLIST GameHallPacketID = 2274 + GameHallPacketID_PACKET_SC_GETPRIVATEROOMLIST GameHallPacketID = 2275 + // 查询自由桌房间列表 + GameHallPacketID_PACKET_CS_QUERYROOMINFO GameHallPacketID = 2280 + GameHallPacketID_PACKET_SC_QUERYROOMINFO GameHallPacketID = 2281 + // 同步房间下注状态 + GameHallPacketID_PACKET_SC_GAMESTATE GameHallPacketID = 2285 + // 观众进入房间 + GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM GameHallPacketID = 2208 + // 观众坐下 + GameHallPacketID_PACKET_CS_AUDIENCESIT GameHallPacketID = 2293 + GameHallPacketID_PACKET_SC_AUDIENCESIT GameHallPacketID = 2294 + // 公告 + GameHallPacketID_PACKET_CS_COMNOTICE GameHallPacketID = 2295 + GameHallPacketID_PACKET_SC_COMNOTICE GameHallPacketID = 2296 + // 界面入口开关 + GameHallPacketID_PACKET_SC_CHANGEENTRYSWITCH GameHallPacketID = 2297 + // 公告更新 + GameHallPacketID_PACKET_SC_NoticeChange GameHallPacketID = 2298 + // 保持更新 + GameHallPacketID_PACKET_CSTouchType GameHallPacketID = 2299 + // 竞技馆房间信息 + GameHallPacketID_PACKET_CSRoomConfig GameHallPacketID = 2300 + GameHallPacketID_PACKET_SCRoomConfig GameHallPacketID = 2301 + // client -> gamesrv 协议 + // 消息id 8000~8099 + // 离开房间 + GameHallPacketID_PACKET_CS_LEAVEROOM GameHallPacketID = 8001 + GameHallPacketID_PACKET_SC_LEAVEROOM GameHallPacketID = 8002 + // 解散房间 + GameHallPacketID_PACKET_CS_DESTROYROOM GameHallPacketID = 8003 + GameHallPacketID_PACKET_SC_DESTROYROOM GameHallPacketID = 8004 + // 强制开始 + GameHallPacketID_PACKET_CS_FORCESTART GameHallPacketID = 8005 + GameHallPacketID_PACKET_SC_FORCESTART GameHallPacketID = 8006 + // 观众离开房间 + GameHallPacketID_PACKET_CS_AUDIENCE_LEAVEROOM GameHallPacketID = 8007 + // 玩家切换标志,暂离状态 + GameHallPacketID_PACKET_CS_PLAYER_SWITCHFLAG GameHallPacketID = 8008 + // 房间事件,互动表情 + GameHallPacketID_PACKET_CSRoomEvent GameHallPacketID = 8009 + GameHallPacketID_PACKET_SCRoomEvent GameHallPacketID = 8010 ) // Enum value maps for GameHallPacketID. var ( GameHallPacketID_name = map[int32]string{ 0: "PACKET_GameHall_ZERO", - 2200: "PACKET_CS_JOINGAME", - 2201: "PACKET_SC_JOINGAME", 2202: "PACKET_CS_CREATEROOM", 2203: "PACKET_SC_CREATEROOM", 2204: "PACKET_CS_ENTERROOM", 2205: "PACKET_SC_ENTERROOM", 2206: "PACKET_CS_RETURNROOM", 2207: "PACKET_SC_RETURNROOM", - 2208: "PACKET_CS_AUDIENCE_ENTERROOM", 2209: "PACKET_CS_ENTERGAME", 2210: "PACKET_SC_ENTERGAME", 2211: "PACKET_CS_QUITGAME", 2212: "PACKET_SC_QUITGAME", - 2213: "PACKET_SC_CARDGAINWAY", - 2214: "PACKET_CS_TASKLIST", - 2215: "PACKET_SC_TASKLIST", - 2216: "PACKET_SC_TASKCHG", - 2217: "PACKET_SC_TACKCOMPLETE", - 2218: "PACKET_SC_TASKDEL", - 2219: "PACKET_CS_TACKDRAWPRIZE", - 2220: "PACKET_SC_TACKDRAWPRIZE", - 2223: "PACKET_CS_GETAGENTGAMEREC", - 2224: "PACKET_SC_GETAGENTGAMEREC", - 2225: "PACKET_CS_DELAGENTGAMEREC", - 2226: "PACKET_CS_SHOPBUY", - 2227: "PACKET_SC_SHOPBUY", - 2228: "PACKET_SC_LIMITLIST", - 2229: "PACKET_CS_GETLATELYGAMEIDS", - 2230: "PACKET_SC_GETLATELYGAMEIDS", 2231: "PACKET_CS_GETGAMECONFIG", 2232: "PACKET_SC_GETGAMECONFIG", 2233: "PACKET_SC_CHANGEGAMESTATUS", - 2240: "PACKET_CS_ENTERHALL", - 2241: "PACKET_SC_ENTERHALL", - 2242: "PACKET_CS_LEAVEHALL", - 2243: "PACKET_SC_LEAVEHALL", - 2244: "PACKET_CS_HALLROOMLIST", - 2245: "PACKET_SC_HALLROOMLIST", - 2246: "PACKET_SC_ROOMPLAYERENTER", - 2247: "PACKET_SC_ROOMPLAYERLEAVE", - 2248: "PACKET_SC_ROOMSTATECHANG", - 2249: "PACKET_SC_HALLPLAYERNUM", - 2250: "PACKET_SC_BULLETIONINFO", - 2251: "PACKET_CS_BULLETIONINFO", - 2252: "PACKET_CS_CUSTOMERINFOLIST", - 2253: "PACKET_SC_CUSTOMERINFOLIST", - 2254: "PACKET_CS_ENTERDGGAME", - 2255: "PACKET_SC_ENTERDGGAME", - 2256: "PACKET_CS_LEAVEDGGAME", - 2257: "PACKET_SC_LEAVEDGGAME", 2258: "PACKET_SC_PLAYERRECHARGEANSWER", - 2259: "PACKET_CS_THRIDACCOUNTSTATICSTIC", - 2260: "PACKET_SC_THRIDACCOUNTSTATICSTIC", - 2261: "PACKET_CS_THRIDACCOUNTTRANSFER", - 2262: "PACKET_SC_THRIDACCOUNTTRANSFER", - 2263: "PACKET_CS_ENTERTHRIDGAME", - 2264: "PACKET_SC_ENTERTHRIDGAME", - 2265: "PACKET_CS_LEAVETHRIDGAME", - 2266: "PACKET_SC_LEAVETHRIDGAME", - 2267: "PACKET_CS_THRIDGAMELIST", - 2268: "PACKET_SC_THRIDGAMELIST", - 2269: "PACKET_CS_THRIDGAMEBALANCEUPDATE", - 2270: "PACKET_SC_THRIDGAMEBALANCEUPDATE", - 2271: "PACKET_SC_THRIDGAMEBALANCEUPDATESTATE", 2272: "PACKET_CS_CREATEPRIVATEROOM", 2273: "PACKET_SC_CREATEPRIVATEROOM", 2274: "PACKET_CS_GETPRIVATEROOMLIST", 2275: "PACKET_SC_GETPRIVATEROOMLIST", - 2276: "PACKET_CS_GETPRIVATEROOMHISTORY", - 2277: "PACKET_SC_GETPRIVATEROOMHISTORY", - 2278: "PACKET_CS_DESTROYPRIVATEROOM", - 2279: "PACKET_SC_DESTROYPRIVATEROOM", 2280: "PACKET_CS_QUERYROOMINFO", 2281: "PACKET_SC_QUERYROOMINFO", - 2283: "PACKET_SC_GAMESUBLIST", - 2284: "PACKET_CS_GAMEOBSERVE", 2285: "PACKET_SC_GAMESTATE", - 2286: "PACKET_SC_SYNCGAMEFREE", - 2287: "PACKET_SC_LOTTERYSYNC", - 2288: "PACKET_CS_LOTTERYLOG", - 2289: "PACKET_SC_LOTTERYLOG", - 2290: "PACKET_SC_LOTTERYBILL", - 2291: "PACKET_CS_UPLOADLOC", - 2292: "PACKET_SC_UPLOADLOC", + 2208: "PACKET_CS_AUDIENCE_ENTERROOM", 2293: "PACKET_CS_AUDIENCESIT", 2294: "PACKET_SC_AUDIENCESIT", 2295: "PACKET_CS_COMNOTICE", 2296: "PACKET_SC_COMNOTICE", 2297: "PACKET_SC_CHANGEENTRYSWITCH", 2298: "PACKET_SC_NoticeChange", + 2299: "PACKET_CSTouchType", + 2300: "PACKET_CSRoomConfig", + 2301: "PACKET_SCRoomConfig", 8001: "PACKET_CS_LEAVEROOM", 8002: "PACKET_SC_LEAVEROOM", 8003: "PACKET_CS_DESTROYROOM", @@ -392,107 +309,48 @@ var ( 8010: "PACKET_SCRoomEvent", } GameHallPacketID_value = map[string]int32{ - "PACKET_GameHall_ZERO": 0, - "PACKET_CS_JOINGAME": 2200, - "PACKET_SC_JOINGAME": 2201, - "PACKET_CS_CREATEROOM": 2202, - "PACKET_SC_CREATEROOM": 2203, - "PACKET_CS_ENTERROOM": 2204, - "PACKET_SC_ENTERROOM": 2205, - "PACKET_CS_RETURNROOM": 2206, - "PACKET_SC_RETURNROOM": 2207, - "PACKET_CS_AUDIENCE_ENTERROOM": 2208, - "PACKET_CS_ENTERGAME": 2209, - "PACKET_SC_ENTERGAME": 2210, - "PACKET_CS_QUITGAME": 2211, - "PACKET_SC_QUITGAME": 2212, - "PACKET_SC_CARDGAINWAY": 2213, - "PACKET_CS_TASKLIST": 2214, - "PACKET_SC_TASKLIST": 2215, - "PACKET_SC_TASKCHG": 2216, - "PACKET_SC_TACKCOMPLETE": 2217, - "PACKET_SC_TASKDEL": 2218, - "PACKET_CS_TACKDRAWPRIZE": 2219, - "PACKET_SC_TACKDRAWPRIZE": 2220, - "PACKET_CS_GETAGENTGAMEREC": 2223, - "PACKET_SC_GETAGENTGAMEREC": 2224, - "PACKET_CS_DELAGENTGAMEREC": 2225, - "PACKET_CS_SHOPBUY": 2226, - "PACKET_SC_SHOPBUY": 2227, - "PACKET_SC_LIMITLIST": 2228, - "PACKET_CS_GETLATELYGAMEIDS": 2229, - "PACKET_SC_GETLATELYGAMEIDS": 2230, - "PACKET_CS_GETGAMECONFIG": 2231, - "PACKET_SC_GETGAMECONFIG": 2232, - "PACKET_SC_CHANGEGAMESTATUS": 2233, - "PACKET_CS_ENTERHALL": 2240, - "PACKET_SC_ENTERHALL": 2241, - "PACKET_CS_LEAVEHALL": 2242, - "PACKET_SC_LEAVEHALL": 2243, - "PACKET_CS_HALLROOMLIST": 2244, - "PACKET_SC_HALLROOMLIST": 2245, - "PACKET_SC_ROOMPLAYERENTER": 2246, - "PACKET_SC_ROOMPLAYERLEAVE": 2247, - "PACKET_SC_ROOMSTATECHANG": 2248, - "PACKET_SC_HALLPLAYERNUM": 2249, - "PACKET_SC_BULLETIONINFO": 2250, - "PACKET_CS_BULLETIONINFO": 2251, - "PACKET_CS_CUSTOMERINFOLIST": 2252, - "PACKET_SC_CUSTOMERINFOLIST": 2253, - "PACKET_CS_ENTERDGGAME": 2254, - "PACKET_SC_ENTERDGGAME": 2255, - "PACKET_CS_LEAVEDGGAME": 2256, - "PACKET_SC_LEAVEDGGAME": 2257, - "PACKET_SC_PLAYERRECHARGEANSWER": 2258, - "PACKET_CS_THRIDACCOUNTSTATICSTIC": 2259, - "PACKET_SC_THRIDACCOUNTSTATICSTIC": 2260, - "PACKET_CS_THRIDACCOUNTTRANSFER": 2261, - "PACKET_SC_THRIDACCOUNTTRANSFER": 2262, - "PACKET_CS_ENTERTHRIDGAME": 2263, - "PACKET_SC_ENTERTHRIDGAME": 2264, - "PACKET_CS_LEAVETHRIDGAME": 2265, - "PACKET_SC_LEAVETHRIDGAME": 2266, - "PACKET_CS_THRIDGAMELIST": 2267, - "PACKET_SC_THRIDGAMELIST": 2268, - "PACKET_CS_THRIDGAMEBALANCEUPDATE": 2269, - "PACKET_SC_THRIDGAMEBALANCEUPDATE": 2270, - "PACKET_SC_THRIDGAMEBALANCEUPDATESTATE": 2271, - "PACKET_CS_CREATEPRIVATEROOM": 2272, - "PACKET_SC_CREATEPRIVATEROOM": 2273, - "PACKET_CS_GETPRIVATEROOMLIST": 2274, - "PACKET_SC_GETPRIVATEROOMLIST": 2275, - "PACKET_CS_GETPRIVATEROOMHISTORY": 2276, - "PACKET_SC_GETPRIVATEROOMHISTORY": 2277, - "PACKET_CS_DESTROYPRIVATEROOM": 2278, - "PACKET_SC_DESTROYPRIVATEROOM": 2279, - "PACKET_CS_QUERYROOMINFO": 2280, - "PACKET_SC_QUERYROOMINFO": 2281, - "PACKET_SC_GAMESUBLIST": 2283, - "PACKET_CS_GAMEOBSERVE": 2284, - "PACKET_SC_GAMESTATE": 2285, - "PACKET_SC_SYNCGAMEFREE": 2286, - "PACKET_SC_LOTTERYSYNC": 2287, - "PACKET_CS_LOTTERYLOG": 2288, - "PACKET_SC_LOTTERYLOG": 2289, - "PACKET_SC_LOTTERYBILL": 2290, - "PACKET_CS_UPLOADLOC": 2291, - "PACKET_SC_UPLOADLOC": 2292, - "PACKET_CS_AUDIENCESIT": 2293, - "PACKET_SC_AUDIENCESIT": 2294, - "PACKET_CS_COMNOTICE": 2295, - "PACKET_SC_COMNOTICE": 2296, - "PACKET_SC_CHANGEENTRYSWITCH": 2297, - "PACKET_SC_NoticeChange": 2298, - "PACKET_CS_LEAVEROOM": 8001, - "PACKET_SC_LEAVEROOM": 8002, - "PACKET_CS_DESTROYROOM": 8003, - "PACKET_SC_DESTROYROOM": 8004, - "PACKET_CS_FORCESTART": 8005, - "PACKET_SC_FORCESTART": 8006, - "PACKET_CS_AUDIENCE_LEAVEROOM": 8007, - "PACKET_CS_PLAYER_SWITCHFLAG": 8008, - "PACKET_CSRoomEvent": 8009, - "PACKET_SCRoomEvent": 8010, + "PACKET_GameHall_ZERO": 0, + "PACKET_CS_CREATEROOM": 2202, + "PACKET_SC_CREATEROOM": 2203, + "PACKET_CS_ENTERROOM": 2204, + "PACKET_SC_ENTERROOM": 2205, + "PACKET_CS_RETURNROOM": 2206, + "PACKET_SC_RETURNROOM": 2207, + "PACKET_CS_ENTERGAME": 2209, + "PACKET_SC_ENTERGAME": 2210, + "PACKET_CS_QUITGAME": 2211, + "PACKET_SC_QUITGAME": 2212, + "PACKET_CS_GETGAMECONFIG": 2231, + "PACKET_SC_GETGAMECONFIG": 2232, + "PACKET_SC_CHANGEGAMESTATUS": 2233, + "PACKET_SC_PLAYERRECHARGEANSWER": 2258, + "PACKET_CS_CREATEPRIVATEROOM": 2272, + "PACKET_SC_CREATEPRIVATEROOM": 2273, + "PACKET_CS_GETPRIVATEROOMLIST": 2274, + "PACKET_SC_GETPRIVATEROOMLIST": 2275, + "PACKET_CS_QUERYROOMINFO": 2280, + "PACKET_SC_QUERYROOMINFO": 2281, + "PACKET_SC_GAMESTATE": 2285, + "PACKET_CS_AUDIENCE_ENTERROOM": 2208, + "PACKET_CS_AUDIENCESIT": 2293, + "PACKET_SC_AUDIENCESIT": 2294, + "PACKET_CS_COMNOTICE": 2295, + "PACKET_SC_COMNOTICE": 2296, + "PACKET_SC_CHANGEENTRYSWITCH": 2297, + "PACKET_SC_NoticeChange": 2298, + "PACKET_CSTouchType": 2299, + "PACKET_CSRoomConfig": 2300, + "PACKET_SCRoomConfig": 2301, + "PACKET_CS_LEAVEROOM": 8001, + "PACKET_SC_LEAVEROOM": 8002, + "PACKET_CS_DESTROYROOM": 8003, + "PACKET_SC_DESTROYROOM": 8004, + "PACKET_CS_FORCESTART": 8005, + "PACKET_SC_FORCESTART": 8006, + "PACKET_CS_AUDIENCE_LEAVEROOM": 8007, + "PACKET_CS_PLAYER_SWITCHFLAG": 8008, + "PACKET_CSRoomEvent": 8009, + "PACKET_SCRoomEvent": 8010, } ) @@ -523,791 +381,52 @@ func (GameHallPacketID) EnumDescriptor() ([]byte, []int) { return file_game_proto_rawDescGZIP(), []int{1} } -//进入游戏大厅 -//PACKET_CS_ENTERHALL -type CSEnterHall struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type DataType int32 - HallId int32 `protobuf:"varint,1,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id(详见:DB_GameFree.xlxs中的id) -} +const ( + DataType_Zero DataType = 0 + DataType_PrivateRoomList DataType = 1 // 竞技馆房间列表 返回消息 PACKET_SC_GETPRIVATEROOMLIST +) -func (x *CSEnterHall) Reset() { - *x = CSEnterHall{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +// Enum value maps for DataType. +var ( + DataType_name = map[int32]string{ + 0: "Zero", + 1: "PrivateRoomList", } -} - -func (x *CSEnterHall) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSEnterHall) ProtoMessage() {} - -func (x *CSEnterHall) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms + DataType_value = map[string]int32{ + "Zero": 0, + "PrivateRoomList": 1, } - return mi.MessageOf(x) +) + +func (x DataType) Enum() *DataType { + p := new(DataType) + *p = x + return p } -// Deprecated: Use CSEnterHall.ProtoReflect.Descriptor instead. -func (*CSEnterHall) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{0} +func (x DataType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (x *CSEnterHall) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 +func (DataType) Descriptor() protoreflect.EnumDescriptor { + return file_game_proto_enumTypes[2].Descriptor() } -//PACKET_SC_ENTERHALL -type SCEnterHall struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HallId int32 `protobuf:"varint,1,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id(详见:DB_GameFree.xlxs中的id) - OpRetCode OpResultCode_Game `protobuf:"varint,2,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 +func (DataType) Type() protoreflect.EnumType { + return &file_game_proto_enumTypes[2] } -func (x *SCEnterHall) Reset() { - *x = SCEnterHall{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x DataType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (x *SCEnterHall) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCEnterHall) ProtoMessage() {} - -func (x *SCEnterHall) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[1] - 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 SCEnterHall.ProtoReflect.Descriptor instead. -func (*SCEnterHall) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{1} -} - -func (x *SCEnterHall) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 -} - -func (x *SCEnterHall) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//离开游戏大厅 -//PACKET_CS_LEAVEHALL -type CSLeaveHall struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSLeaveHall) Reset() { - *x = CSLeaveHall{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSLeaveHall) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSLeaveHall) ProtoMessage() {} - -func (x *CSLeaveHall) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[2] - 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 CSLeaveHall.ProtoReflect.Descriptor instead. -func (*CSLeaveHall) Descriptor() ([]byte, []int) { +// Deprecated: Use DataType.Descriptor instead. +func (DataType) EnumDescriptor() ([]byte, []int) { return file_game_proto_rawDescGZIP(), []int{2} } -//PACKET_SC_LEAVEHALL -type SCLeaveHall struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HallId int32 `protobuf:"varint,1,opt,name=HallId,proto3" json:"HallId,omitempty"` -} - -func (x *SCLeaveHall) Reset() { - *x = SCLeaveHall{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLeaveHall) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLeaveHall) ProtoMessage() {} - -func (x *SCLeaveHall) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[3] - 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 SCLeaveHall.ProtoReflect.Descriptor instead. -func (*SCLeaveHall) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{3} -} - -func (x *SCLeaveHall) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 -} - -//房间内玩家信息 -type RoomPlayerInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` //数字账号 - Head int32 `protobuf:"varint,2,opt,name=Head,proto3" json:"Head,omitempty"` //头像 - Sex int32 `protobuf:"varint,3,opt,name=Sex,proto3" json:"Sex,omitempty"` //性别 - Name string `protobuf:"bytes,4,opt,name=Name,proto3" json:"Name,omitempty"` //名字 - Pos int32 `protobuf:"varint,5,opt,name=Pos,proto3" json:"Pos,omitempty"` //位置 - Flag int32 `protobuf:"varint,6,opt,name=Flag,proto3" json:"Flag,omitempty"` //状态 - HeadOutLine int32 `protobuf:"varint,7,opt,name=HeadOutLine,proto3" json:"HeadOutLine,omitempty"` //头像框 - VIP int32 `protobuf:"varint,8,opt,name=VIP,proto3" json:"VIP,omitempty"` -} - -func (x *RoomPlayerInfo) Reset() { - *x = RoomPlayerInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoomPlayerInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoomPlayerInfo) ProtoMessage() {} - -func (x *RoomPlayerInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[4] - 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 RoomPlayerInfo.ProtoReflect.Descriptor instead. -func (*RoomPlayerInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{4} -} - -func (x *RoomPlayerInfo) GetSnId() int32 { - if x != nil { - return x.SnId - } - return 0 -} - -func (x *RoomPlayerInfo) GetHead() int32 { - if x != nil { - return x.Head - } - return 0 -} - -func (x *RoomPlayerInfo) GetSex() int32 { - if x != nil { - return x.Sex - } - return 0 -} - -func (x *RoomPlayerInfo) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *RoomPlayerInfo) GetPos() int32 { - if x != nil { - return x.Pos - } - return 0 -} - -func (x *RoomPlayerInfo) GetFlag() int32 { - if x != nil { - return x.Flag - } - return 0 -} - -func (x *RoomPlayerInfo) GetHeadOutLine() int32 { - if x != nil { - return x.HeadOutLine - } - return 0 -} - -func (x *RoomPlayerInfo) GetVIP() int32 { - if x != nil { - return x.VIP - } - return 0 -} - -//房间信息 -type RoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房号 - Starting bool `protobuf:"varint,7,opt,name=Starting,proto3" json:"Starting,omitempty"` //牌局是否开始 - Players []*RoomPlayerInfo `protobuf:"bytes,5,rep,name=Players,proto3" json:"Players,omitempty"` -} - -func (x *RoomInfo) Reset() { - *x = RoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoomInfo) ProtoMessage() {} - -func (x *RoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[5] - 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 RoomInfo.ProtoReflect.Descriptor instead. -func (*RoomInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{5} -} - -func (x *RoomInfo) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *RoomInfo) GetStarting() bool { - if x != nil { - return x.Starting - } - return false -} - -func (x *RoomInfo) GetPlayers() []*RoomPlayerInfo { - if x != nil { - return x.Players - } - return nil -} - -//PACKET_CS_HALLROOMLIST -type CSHallRoomList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HallId int32 `protobuf:"varint,1,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id(详见:DB_GameFree.xlxs中的id) -} - -func (x *CSHallRoomList) Reset() { - *x = CSHallRoomList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSHallRoomList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSHallRoomList) ProtoMessage() {} - -func (x *CSHallRoomList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[6] - 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 CSHallRoomList.ProtoReflect.Descriptor instead. -func (*CSHallRoomList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{6} -} - -func (x *CSHallRoomList) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 -} - -//大厅人数 -type HallInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SceneType int32 `protobuf:"varint,1,opt,name=SceneType,proto3" json:"SceneType,omitempty"` //场 - PlayerNum int32 `protobuf:"varint,2,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` //人数 -} - -func (x *HallInfo) Reset() { - *x = HallInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HallInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HallInfo) ProtoMessage() {} - -func (x *HallInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[7] - 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 HallInfo.ProtoReflect.Descriptor instead. -func (*HallInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{7} -} - -func (x *HallInfo) GetSceneType() int32 { - if x != nil { - return x.SceneType - } - return 0 -} - -func (x *HallInfo) GetPlayerNum() int32 { - if x != nil { - return x.PlayerNum - } - return 0 -} - -//PACKET_SC_HALLPLAYERNUM -type HallPlayerNum struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HallData []*HallInfo `protobuf:"bytes,1,rep,name=HallData,proto3" json:"HallData,omitempty"` //大厅人数 -} - -func (x *HallPlayerNum) Reset() { - *x = HallPlayerNum{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HallPlayerNum) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HallPlayerNum) ProtoMessage() {} - -func (x *HallPlayerNum) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[8] - 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 HallPlayerNum.ProtoReflect.Descriptor instead. -func (*HallPlayerNum) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{8} -} - -func (x *HallPlayerNum) GetHallData() []*HallInfo { - if x != nil { - return x.HallData - } - return nil -} - -//PACKET_SC_HALLROOMLIST -type SCHallRoomList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HallId int32 `protobuf:"varint,1,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏id - GameMode int32 `protobuf:"varint,3,opt,name=GameMode,proto3" json:"GameMode,omitempty"` //游戏模式 - IsAdd bool `protobuf:"varint,4,opt,name=IsAdd,proto3" json:"IsAdd,omitempty"` //是否新增 - Params []int32 `protobuf:"varint,5,rep,packed,name=Params,proto3" json:"Params,omitempty"` //游戏规则参数 - Rooms []*RoomInfo `protobuf:"bytes,6,rep,name=Rooms,proto3" json:"Rooms,omitempty"` //房间列表 - HallData []*HallInfo `protobuf:"bytes,7,rep,name=HallData,proto3" json:"HallData,omitempty"` //大厅人数 -} - -func (x *SCHallRoomList) Reset() { - *x = SCHallRoomList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCHallRoomList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCHallRoomList) ProtoMessage() {} - -func (x *SCHallRoomList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[9] - 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 SCHallRoomList.ProtoReflect.Descriptor instead. -func (*SCHallRoomList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{9} -} - -func (x *SCHallRoomList) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 -} - -func (x *SCHallRoomList) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -func (x *SCHallRoomList) GetGameMode() int32 { - if x != nil { - return x.GameMode - } - return 0 -} - -func (x *SCHallRoomList) GetIsAdd() bool { - if x != nil { - return x.IsAdd - } - return false -} - -func (x *SCHallRoomList) GetParams() []int32 { - if x != nil { - return x.Params - } - return nil -} - -func (x *SCHallRoomList) GetRooms() []*RoomInfo { - if x != nil { - return x.Rooms - } - return nil -} - -func (x *SCHallRoomList) GetHallData() []*HallInfo { - if x != nil { - return x.HallData - } - return nil -} - -//PACKET_SC_ROOMPLAYERENTER -type SCRoomPlayerEnter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` - Player *RoomPlayerInfo `protobuf:"bytes,2,opt,name=Player,proto3" json:"Player,omitempty"` -} - -func (x *SCRoomPlayerEnter) Reset() { - *x = SCRoomPlayerEnter{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCRoomPlayerEnter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCRoomPlayerEnter) ProtoMessage() {} - -func (x *SCRoomPlayerEnter) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[10] - 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 SCRoomPlayerEnter.ProtoReflect.Descriptor instead. -func (*SCRoomPlayerEnter) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{10} -} - -func (x *SCRoomPlayerEnter) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCRoomPlayerEnter) GetPlayer() *RoomPlayerInfo { - if x != nil { - return x.Player - } - return nil -} - -//PACKET_SC_ROOMPLAYERLEAVE -type SCRoomPlayerLeave struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` - Pos int32 `protobuf:"varint,2,opt,name=Pos,proto3" json:"Pos,omitempty"` -} - -func (x *SCRoomPlayerLeave) Reset() { - *x = SCRoomPlayerLeave{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCRoomPlayerLeave) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCRoomPlayerLeave) ProtoMessage() {} - -func (x *SCRoomPlayerLeave) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[11] - 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 SCRoomPlayerLeave.ProtoReflect.Descriptor instead. -func (*SCRoomPlayerLeave) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{11} -} - -func (x *SCRoomPlayerLeave) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCRoomPlayerLeave) GetPos() int32 { - if x != nil { - return x.Pos - } - return 0 -} - -//PACKET_SC_ROOMSTATECHANG -type SCRoomStateChange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` - Starting bool `protobuf:"varint,2,opt,name=Starting,proto3" json:"Starting,omitempty"` - State int32 `protobuf:"varint,3,opt,name=State,proto3" json:"State,omitempty"` -} - -func (x *SCRoomStateChange) Reset() { - *x = SCRoomStateChange{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCRoomStateChange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCRoomStateChange) ProtoMessage() {} - -func (x *SCRoomStateChange) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[12] - 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 SCRoomStateChange.ProtoReflect.Descriptor instead. -func (*SCRoomStateChange) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{12} -} - -func (x *SCRoomStateChange) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCRoomStateChange) GetStarting() bool { - if x != nil { - return x.Starting - } - return false -} - -func (x *SCRoomStateChange) GetState() int32 { - if x != nil { - return x.State - } - return 0 -} - //PACKET_CS_CREATEROOM type CSCreateRoom struct { state protoimpl.MessageState @@ -1329,7 +448,7 @@ type CSCreateRoom struct { func (x *CSCreateRoom) Reset() { *x = CSCreateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[13] + mi := &file_game_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1342,7 +461,7 @@ func (x *CSCreateRoom) String() string { func (*CSCreateRoom) ProtoMessage() {} func (x *CSCreateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[13] + mi := &file_game_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1355,7 +474,7 @@ func (x *CSCreateRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use CSCreateRoom.ProtoReflect.Descriptor instead. func (*CSCreateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{13} + return file_game_proto_rawDescGZIP(), []int{0} } func (x *CSCreateRoom) GetGameId() int32 { @@ -1417,7 +536,7 @@ type SCCreateRoom struct { func (x *SCCreateRoom) Reset() { *x = SCCreateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[14] + mi := &file_game_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1430,7 +549,7 @@ func (x *SCCreateRoom) String() string { func (*SCCreateRoom) ProtoMessage() {} func (x *SCCreateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[14] + mi := &file_game_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1443,7 +562,7 @@ func (x *SCCreateRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use SCCreateRoom.ProtoReflect.Descriptor instead. func (*SCCreateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{14} + return file_game_proto_rawDescGZIP(), []int{1} } func (x *SCCreateRoom) GetGameId() int32 { @@ -1488,109 +607,6 @@ func (x *SCCreateRoom) GetOpRetCode() OpResultCode_Game { return OpResultCode_Game_OPRC_Sucess_Game } -//PACKET_CS_DESTROYROOM -type CSDestroyRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSDestroyRoom) Reset() { - *x = CSDestroyRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSDestroyRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSDestroyRoom) ProtoMessage() {} - -func (x *CSDestroyRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[15] - 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 CSDestroyRoom.ProtoReflect.Descriptor instead. -func (*CSDestroyRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{15} -} - -//PACKET_SC_DESTROYROOM -type SCDestroyRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - OpRetCode OpResultCode_Game `protobuf:"varint,2,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - IsForce int32 `protobuf:"varint,3,opt,name=IsForce,proto3" json:"IsForce,omitempty"` //是否强制销毁 -} - -func (x *SCDestroyRoom) Reset() { - *x = SCDestroyRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCDestroyRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCDestroyRoom) ProtoMessage() {} - -func (x *SCDestroyRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[16] - 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 SCDestroyRoom.ProtoReflect.Descriptor instead. -func (*SCDestroyRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{16} -} - -func (x *SCDestroyRoom) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCDestroyRoom) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCDestroyRoom) GetIsForce() int32 { - if x != nil { - return x.IsForce - } - return 0 -} - //PACKET_CS_ENTERROOM //PACKET_CS_AUDIENCE_ENTERROOM //玩家请求进入游戏 @@ -1599,14 +615,15 @@ type CSEnterRoom struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏编号 + RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 + GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏编号 + Password string `protobuf:"bytes,3,opt,name=Password,proto3" json:"Password,omitempty"` //房间密码 } func (x *CSEnterRoom) Reset() { *x = CSEnterRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[17] + mi := &file_game_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1619,7 +636,7 @@ func (x *CSEnterRoom) String() string { func (*CSEnterRoom) ProtoMessage() {} func (x *CSEnterRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[17] + mi := &file_game_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1632,7 +649,7 @@ func (x *CSEnterRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use CSEnterRoom.ProtoReflect.Descriptor instead. func (*CSEnterRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{17} + return file_game_proto_rawDescGZIP(), []int{2} } func (x *CSEnterRoom) GetRoomId() int32 { @@ -1649,25 +666,33 @@ func (x *CSEnterRoom) GetGameId() int32 { return 0 } +func (x *CSEnterRoom) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + //PACKET_SC_ENTERROOM type SCEnterRoom struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - GameId int32 `protobuf:"varint,1,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏ID - ModeType int32 `protobuf:"varint,2,opt,name=ModeType,proto3" json:"ModeType,omitempty"` //场类型 - Params []int32 `protobuf:"varint,3,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场参数 - RoomId int32 `protobuf:"varint,4,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - HallId int32 `protobuf:"varint,5,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id - OpRetCode OpResultCode_Game `protobuf:"varint,6,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - ClubId int32 `protobuf:"varint,7,opt,name=ClubId,proto3" json:"ClubId,omitempty"` + GameId int32 `protobuf:"varint,1,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏ID + ModeType int32 `protobuf:"varint,2,opt,name=ModeType,proto3" json:"ModeType,omitempty"` //游戏模式(玩法,已经不用了) + Params []int32 `protobuf:"varint,3,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场参数 + RoomId int32 `protobuf:"varint,4,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 + HallId int32 `protobuf:"varint,5,opt,name=HallId,proto3" json:"HallId,omitempty"` //厅id + OpRetCode OpResultCode_Game `protobuf:"varint,6,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 + ClubId int32 `protobuf:"varint,7,opt,name=ClubId,proto3" json:"ClubId,omitempty"` + GameFreeId int32 `protobuf:"varint,8,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏场次id } func (x *SCEnterRoom) Reset() { *x = SCEnterRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[18] + mi := &file_game_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1680,7 +705,7 @@ func (x *SCEnterRoom) String() string { func (*SCEnterRoom) ProtoMessage() {} func (x *SCEnterRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[18] + mi := &file_game_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1693,7 +718,7 @@ func (x *SCEnterRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use SCEnterRoom.ProtoReflect.Descriptor instead. func (*SCEnterRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{18} + return file_game_proto_rawDescGZIP(), []int{3} } func (x *SCEnterRoom) GetGameId() int32 { @@ -1745,124 +770,9 @@ func (x *SCEnterRoom) GetClubId() int32 { return 0 } -//PACKET_CS_LEAVEROOM -//PACKET_CS_AUDIENCE_LEAVEROOM -//玩家离开房间,返回大厅 -type CSLeaveRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mode int32 `protobuf:"varint,1,opt,name=Mode,proto3" json:"Mode,omitempty"` //离开方式 0:退出 1:暂离(占着座位,返回大厅) -} - -func (x *CSLeaveRoom) Reset() { - *x = CSLeaveRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSLeaveRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSLeaveRoom) ProtoMessage() {} - -func (x *CSLeaveRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_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 CSLeaveRoom.ProtoReflect.Descriptor instead. -func (*CSLeaveRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{19} -} - -func (x *CSLeaveRoom) GetMode() int32 { +func (x *SCEnterRoom) GetGameFreeId() int32 { if x != nil { - return x.Mode - } - return 0 -} - -//PACKET_SC_LEAVEROOM -type SCLeaveRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - Reason int32 `protobuf:"varint,2,opt,name=Reason,proto3" json:"Reason,omitempty"` //原因 0:主动退出 1:被踢出 - RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间ID - Mode int32 `protobuf:"varint,4,opt,name=Mode,proto3" json:"Mode,omitempty"` -} - -func (x *SCLeaveRoom) Reset() { - *x = SCLeaveRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLeaveRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLeaveRoom) ProtoMessage() {} - -func (x *SCLeaveRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[20] - 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 SCLeaveRoom.ProtoReflect.Descriptor instead. -func (*SCLeaveRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{20} -} - -func (x *SCLeaveRoom) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCLeaveRoom) GetReason() int32 { - if x != nil { - return x.Reason - } - return 0 -} - -func (x *SCLeaveRoom) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCLeaveRoom) GetMode() int32 { - if x != nil { - return x.Mode + return x.GameFreeId } return 0 } @@ -1882,7 +792,7 @@ type CSReturnRoom struct { func (x *CSReturnRoom) Reset() { *x = CSReturnRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[21] + mi := &file_game_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1895,7 +805,7 @@ func (x *CSReturnRoom) String() string { func (*CSReturnRoom) ProtoMessage() {} func (x *CSReturnRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[21] + mi := &file_game_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1908,7 +818,7 @@ func (x *CSReturnRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use CSReturnRoom.ProtoReflect.Descriptor instead. func (*CSReturnRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{21} + return file_game_proto_rawDescGZIP(), []int{4} } func (x *CSReturnRoom) GetApkVer() int32 { @@ -1962,7 +872,7 @@ type SCReturnRoom struct { func (x *SCReturnRoom) Reset() { *x = SCReturnRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[22] + mi := &file_game_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1975,7 +885,7 @@ func (x *SCReturnRoom) String() string { func (*SCReturnRoom) ProtoMessage() {} func (x *SCReturnRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[22] + mi := &file_game_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1988,7 +898,7 @@ func (x *SCReturnRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use SCReturnRoom.ProtoReflect.Descriptor instead. func (*SCReturnRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{22} + return file_game_proto_rawDescGZIP(), []int{5} } func (x *SCReturnRoom) GetOpRetCode() OpResultCode_Game { @@ -2075,34 +985,36 @@ func (x *SCReturnRoom) GetClubId() int32 { return 0 } -//获取游戏记录 -//PACKET_CS_GETGAMEREC -type CSGetGameRec struct { +//PACKET_CS_ENTERGAME +type CSEnterGame struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ver int32 `protobuf:"varint,1,opt,name=Ver,proto3" json:"Ver,omitempty"` - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //游戏id + OpParams []int32 `protobuf:"varint,2,rep,packed,name=OpParams,proto3" json:"OpParams,omitempty"` + Platform string `protobuf:"bytes,3,opt,name=Platform,proto3" json:"Platform,omitempty"` + ApkVer int32 `protobuf:"varint,4,opt,name=ApkVer,proto3" json:"ApkVer,omitempty"` + ResVer int32 `protobuf:"varint,5,opt,name=ResVer,proto3" json:"ResVer,omitempty"` } -func (x *CSGetGameRec) Reset() { - *x = CSGetGameRec{} +func (x *CSEnterGame) Reset() { + *x = CSEnterGame{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[23] + mi := &file_game_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CSGetGameRec) String() string { +func (x *CSEnterGame) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CSGetGameRec) ProtoMessage() {} +func (*CSEnterGame) ProtoMessage() {} -func (x *CSGetGameRec) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[23] +func (x *CSEnterGame) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2113,149 +1025,78 @@ func (x *CSGetGameRec) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CSGetGameRec.ProtoReflect.Descriptor instead. -func (*CSGetGameRec) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{23} +// Deprecated: Use CSEnterGame.ProtoReflect.Descriptor instead. +func (*CSEnterGame) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{6} } -func (x *CSGetGameRec) GetVer() int32 { - if x != nil { - return x.Ver - } - return 0 -} - -func (x *CSGetGameRec) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -type PlayerGameRec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` - Head int32 `protobuf:"varint,3,opt,name=Head,proto3" json:"Head,omitempty"` - Coin int64 `protobuf:"varint,4,opt,name=Coin,proto3" json:"Coin,omitempty"` - Pos int32 `protobuf:"varint,5,opt,name=Pos,proto3" json:"Pos,omitempty"` - OtherParams []int32 `protobuf:"varint,6,rep,packed,name=OtherParams,proto3" json:"OtherParams,omitempty"` -} - -func (x *PlayerGameRec) Reset() { - *x = PlayerGameRec{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PlayerGameRec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PlayerGameRec) ProtoMessage() {} - -func (x *PlayerGameRec) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[24] - 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 PlayerGameRec.ProtoReflect.Descriptor instead. -func (*PlayerGameRec) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{24} -} - -func (x *PlayerGameRec) GetId() int32 { +func (x *CSEnterGame) GetId() int32 { if x != nil { return x.Id } return 0 } -func (x *PlayerGameRec) GetName() string { +func (x *CSEnterGame) GetOpParams() []int32 { if x != nil { - return x.Name + return x.OpParams + } + return nil +} + +func (x *CSEnterGame) GetPlatform() string { + if x != nil { + return x.Platform } return "" } -func (x *PlayerGameRec) GetHead() int32 { +func (x *CSEnterGame) GetApkVer() int32 { if x != nil { - return x.Head + return x.ApkVer } return 0 } -func (x *PlayerGameRec) GetCoin() int64 { +func (x *CSEnterGame) GetResVer() int32 { if x != nil { - return x.Coin + return x.ResVer } return 0 } -func (x *PlayerGameRec) GetPos() int32 { - if x != nil { - return x.Pos - } - return 0 -} - -func (x *PlayerGameRec) GetOtherParams() []int32 { - if x != nil { - return x.OtherParams - } - return nil -} - -type GameRec struct { +//PACKET_SC_ENTERGAME +type SCEnterGame struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RecId int32 `protobuf:"varint,1,opt,name=RecId,proto3" json:"RecId,omitempty"` - Datas []*PlayerGameRec `protobuf:"bytes,2,rep,name=Datas,proto3" json:"Datas,omitempty"` - Ts int64 `protobuf:"varint,3,opt,name=Ts,proto3" json:"Ts,omitempty"` - RoomId int32 `protobuf:"varint,4,opt,name=RoomId,proto3" json:"RoomId,omitempty"` - GameMode int32 `protobuf:"varint,5,opt,name=GameMode,proto3" json:"GameMode,omitempty"` - SceneType int32 `protobuf:"varint,6,opt,name=SceneType,proto3" json:"SceneType,omitempty"` - GameId int32 `protobuf:"varint,7,opt,name=GameId,proto3" json:"GameId,omitempty"` - TotalOfGames int32 `protobuf:"varint,8,opt,name=TotalOfGames,proto3" json:"TotalOfGames,omitempty"` - NumOfGames int32 `protobuf:"varint,9,opt,name=NumOfGames,proto3" json:"NumOfGames,omitempty"` - RoomFeeMode int32 `protobuf:"varint,10,opt,name=RoomFeeMode,proto3" json:"RoomFeeMode,omitempty"` - RoomCardCnt int32 `protobuf:"varint,11,opt,name=RoomCardCnt,proto3" json:"RoomCardCnt,omitempty"` - Params []int32 `protobuf:"varint,12,rep,packed,name=Params,proto3" json:"Params,omitempty"` - GameTime int32 `protobuf:"varint,13,opt,name=GameTime,proto3" json:"GameTime,omitempty"` + OpCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpCode,omitempty"` //操作码 + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // + OpParams []int32 `protobuf:"varint,3,rep,packed,name=OpParams,proto3" json:"OpParams,omitempty"` + MinApkVer int32 `protobuf:"varint,4,opt,name=MinApkVer,proto3" json:"MinApkVer,omitempty"` //最低apk版本号 + LatestApkVer int32 `protobuf:"varint,5,opt,name=LatestApkVer,proto3" json:"LatestApkVer,omitempty"` //最新apk版本号 + MinResVer int32 `protobuf:"varint,6,opt,name=MinResVer,proto3" json:"MinResVer,omitempty"` //最低资源版本号 + LatestResVer int32 `protobuf:"varint,7,opt,name=LatestResVer,proto3" json:"LatestResVer,omitempty"` //最新资源版本号 } -func (x *GameRec) Reset() { - *x = GameRec{} +func (x *SCEnterGame) Reset() { + *x = SCEnterGame{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[25] + mi := &file_game_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GameRec) String() string { +func (x *SCEnterGame) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GameRec) ProtoMessage() {} +func (*SCEnterGame) ProtoMessage() {} -func (x *GameRec) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[25] +func (x *SCEnterGame) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2266,433 +1107,144 @@ func (x *GameRec) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GameRec.ProtoReflect.Descriptor instead. -func (*GameRec) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{25} +// Deprecated: Use SCEnterGame.ProtoReflect.Descriptor instead. +func (*SCEnterGame) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{7} } -func (x *GameRec) GetRecId() int32 { +func (x *SCEnterGame) GetOpCode() OpResultCode_Game { if x != nil { - return x.RecId - } - return 0 -} - -func (x *GameRec) GetDatas() []*PlayerGameRec { - if x != nil { - return x.Datas - } - return nil -} - -func (x *GameRec) GetTs() int64 { - if x != nil { - return x.Ts - } - return 0 -} - -func (x *GameRec) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *GameRec) GetGameMode() int32 { - if x != nil { - return x.GameMode - } - return 0 -} - -func (x *GameRec) GetSceneType() int32 { - if x != nil { - return x.SceneType - } - return 0 -} - -func (x *GameRec) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -func (x *GameRec) GetTotalOfGames() int32 { - if x != nil { - return x.TotalOfGames - } - return 0 -} - -func (x *GameRec) GetNumOfGames() int32 { - if x != nil { - return x.NumOfGames - } - return 0 -} - -func (x *GameRec) GetRoomFeeMode() int32 { - if x != nil { - return x.RoomFeeMode - } - return 0 -} - -func (x *GameRec) GetRoomCardCnt() int32 { - if x != nil { - return x.RoomCardCnt - } - return 0 -} - -func (x *GameRec) GetParams() []int32 { - if x != nil { - return x.Params - } - return nil -} - -func (x *GameRec) GetGameTime() int32 { - if x != nil { - return x.GameTime - } - return 0 -} - -//PACKET_SC_GETGAMEREC -type SCGetGameRec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Recs []*GameRec `protobuf:"bytes,1,rep,name=Recs,proto3" json:"Recs,omitempty"` - Ver int32 `protobuf:"varint,2,opt,name=Ver,proto3" json:"Ver,omitempty"` - GameId int32 `protobuf:"varint,3,opt,name=GameId,proto3" json:"GameId,omitempty"` -} - -func (x *SCGetGameRec) Reset() { - *x = SCGetGameRec{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCGetGameRec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCGetGameRec) ProtoMessage() {} - -func (x *SCGetGameRec) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[26] - 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 SCGetGameRec.ProtoReflect.Descriptor instead. -func (*SCGetGameRec) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{26} -} - -func (x *SCGetGameRec) GetRecs() []*GameRec { - if x != nil { - return x.Recs - } - return nil -} - -func (x *SCGetGameRec) GetVer() int32 { - if x != nil { - return x.Ver - } - return 0 -} - -func (x *SCGetGameRec) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -//PACKET_CS_SHARESUC -type CSShareSuc struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ShareType int32 `protobuf:"varint,1,opt,name=ShareType,proto3" json:"ShareType,omitempty"` //分享类型 1:微信好友 2:朋友圈 -} - -func (x *CSShareSuc) Reset() { - *x = CSShareSuc{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSShareSuc) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSShareSuc) ProtoMessage() {} - -func (x *CSShareSuc) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[27] - 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 CSShareSuc.ProtoReflect.Descriptor instead. -func (*CSShareSuc) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{27} -} - -func (x *CSShareSuc) GetShareType() int32 { - if x != nil { - return x.ShareType - } - return 0 -} - -//PACKET_SC_SHARESUC -type SCShareSuc struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCShareSuc) Reset() { - *x = SCShareSuc{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCShareSuc) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCShareSuc) ProtoMessage() {} - -func (x *SCShareSuc) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[28] - 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 SCShareSuc.ProtoReflect.Descriptor instead. -func (*SCShareSuc) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{28} -} - -func (x *SCShareSuc) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode + return x.OpCode } return OpResultCode_Game_OPRC_Sucess_Game } -//PACKET_CS_FORCESTART -type CSForceStart struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSForceStart) Reset() { - *x = CSForceStart{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSForceStart) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSForceStart) ProtoMessage() {} - -func (x *CSForceStart) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[29] - 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 CSForceStart.ProtoReflect.Descriptor instead. -func (*CSForceStart) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{29} -} - -//PACKET_SC_FORCESTART -type SCForceStart struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCForceStart) Reset() { - *x = SCForceStart{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCForceStart) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCForceStart) ProtoMessage() {} - -func (x *SCForceStart) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[30] - 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 SCForceStart.ProtoReflect.Descriptor instead. -func (*SCForceStart) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{30} -} - -func (x *SCForceStart) GetOpRetCode() OpResultCode_Game { +func (x *SCEnterGame) GetId() int32 { if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//PACKET_CS_INVITEROBOT -type CSInviteRobot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameId int32 `protobuf:"varint,1,opt,name=GameId,proto3" json:"GameId,omitempty"` - IsAgent bool `protobuf:"varint,2,opt,name=IsAgent,proto3" json:"IsAgent,omitempty"` //0:自己玩 1:机器人代替我 -} - -func (x *CSInviteRobot) Reset() { - *x = CSInviteRobot{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSInviteRobot) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSInviteRobot) ProtoMessage() {} - -func (x *CSInviteRobot) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[31] - 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 CSInviteRobot.ProtoReflect.Descriptor instead. -func (*CSInviteRobot) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{31} -} - -func (x *CSInviteRobot) GetGameId() int32 { - if x != nil { - return x.GameId + return x.Id } return 0 } -func (x *CSInviteRobot) GetIsAgent() bool { +func (x *SCEnterGame) GetOpParams() []int32 { if x != nil { - return x.IsAgent + return x.OpParams + } + return nil +} + +func (x *SCEnterGame) GetMinApkVer() int32 { + if x != nil { + return x.MinApkVer + } + return 0 +} + +func (x *SCEnterGame) GetLatestApkVer() int32 { + if x != nil { + return x.LatestApkVer + } + return 0 +} + +func (x *SCEnterGame) GetMinResVer() int32 { + if x != nil { + return x.MinResVer + } + return 0 +} + +func (x *SCEnterGame) GetLatestResVer() int32 { + if x != nil { + return x.LatestResVer + } + return 0 +} + +//PACKET_CS_QUITGAME +type CSQuitGame struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //游戏id + IsAudience bool `protobuf:"varint,2,opt,name=IsAudience,proto3" json:"IsAudience,omitempty"` //是否是观众 +} + +func (x *CSQuitGame) Reset() { + *x = CSQuitGame{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSQuitGame) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSQuitGame) ProtoMessage() {} + +func (x *CSQuitGame) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[8] + 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 CSQuitGame.ProtoReflect.Descriptor instead. +func (*CSQuitGame) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{8} +} + +func (x *CSQuitGame) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *CSQuitGame) GetIsAudience() bool { + if x != nil { + return x.IsAudience } return false } -//玩家设置标记 -//PACKET_CS_PLAYER_SWITCHFLAG -type CSPlayerSwithFlag struct { +//PACKET_SC_QUITGAME +type SCQuitGame struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag int32 `protobuf:"varint,1,opt,name=Flag,proto3" json:"Flag,omitempty"` - Mark int32 `protobuf:"varint,2,opt,name=Mark,proto3" json:"Mark,omitempty"` //1:设置 0:取消 + OpCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpCode,omitempty"` //操作码 + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` + Reason int32 `protobuf:"varint,3,opt,name=Reason,proto3" json:"Reason,omitempty"` //原因 } -func (x *CSPlayerSwithFlag) Reset() { - *x = CSPlayerSwithFlag{} +func (x *SCQuitGame) Reset() { + *x = SCQuitGame{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[32] + mi := &file_game_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CSPlayerSwithFlag) String() string { +func (x *SCQuitGame) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CSPlayerSwithFlag) ProtoMessage() {} +func (*SCQuitGame) ProtoMessage() {} -func (x *CSPlayerSwithFlag) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[32] +func (x *SCQuitGame) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2703,2943 +1255,28 @@ func (x *CSPlayerSwithFlag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CSPlayerSwithFlag.ProtoReflect.Descriptor instead. -func (*CSPlayerSwithFlag) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{32} +// Deprecated: Use SCQuitGame.ProtoReflect.Descriptor instead. +func (*SCQuitGame) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{9} } -func (x *CSPlayerSwithFlag) GetFlag() int32 { +func (x *SCQuitGame) GetOpCode() OpResultCode_Game { if x != nil { - return x.Flag + return x.OpCode } - return 0 + return OpResultCode_Game_OPRC_Sucess_Game } -func (x *CSPlayerSwithFlag) GetMark() int32 { - if x != nil { - return x.Mark - } - return 0 -} - -//玩家商城购买 -//PACKET_CS_SHOPBUY -type CSShopBuy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //商品ID - Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` //数量 -} - -func (x *CSShopBuy) Reset() { - *x = CSShopBuy{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSShopBuy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSShopBuy) ProtoMessage() {} - -func (x *CSShopBuy) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[33] - 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 CSShopBuy.ProtoReflect.Descriptor instead. -func (*CSShopBuy) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{33} -} - -func (x *CSShopBuy) GetId() int32 { +func (x *SCQuitGame) GetId() int32 { if x != nil { return x.Id } return 0 } -func (x *CSShopBuy) GetCount() int32 { +func (x *SCQuitGame) GetReason() int32 { if x != nil { - return x.Count - } - return 0 -} - -//PACKET_SC_SHOPBUY -type SCShopBuy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` - OpRetCode OpResultCode_Game `protobuf:"varint,2,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - CostType int32 `protobuf:"varint,3,opt,name=CostType,proto3" json:"CostType,omitempty"` //消耗类型 - CostNum int32 `protobuf:"varint,4,opt,name=CostNum,proto3" json:"CostNum,omitempty"` //消耗数量 - GainType int32 `protobuf:"varint,5,opt,name=GainType,proto3" json:"GainType,omitempty"` //获得类型 - GainNum int32 `protobuf:"varint,6,opt,name=GainNum,proto3" json:"GainNum,omitempty"` //获得数量 -} - -func (x *SCShopBuy) Reset() { - *x = SCShopBuy{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCShopBuy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCShopBuy) ProtoMessage() {} - -func (x *SCShopBuy) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[34] - 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 SCShopBuy.ProtoReflect.Descriptor instead. -func (*SCShopBuy) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{34} -} - -func (x *SCShopBuy) GetId() int32 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *SCShopBuy) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCShopBuy) GetCostType() int32 { - if x != nil { - return x.CostType - } - return 0 -} - -func (x *SCShopBuy) GetCostNum() int32 { - if x != nil { - return x.CostNum - } - return 0 -} - -func (x *SCShopBuy) GetGainType() int32 { - if x != nil { - return x.GainType - } - return 0 -} - -func (x *SCShopBuy) GetGainNum() int32 { - if x != nil { - return x.GainNum - } - return 0 -} - -//CS_JOINGAME -//请求的通知 -type CSJoinGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MsgType int32 `protobuf:"varint,1,opt,name=MsgType,proto3" json:"MsgType,omitempty"` //0.请求信息1.确认信息 - SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` //type=1发送,为服务器下发的数据,原数据发送 - Pos int32 `protobuf:"varint,3,opt,name=Pos,proto3" json:"Pos,omitempty"` //type=0时发送,为申请坐下的位置,索引0开始 - Agree bool `protobuf:"varint,4,opt,name=Agree,proto3" json:"Agree,omitempty"` //type=1时发送,true为同意,false为拒绝 -} - -func (x *CSJoinGame) Reset() { - *x = CSJoinGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSJoinGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSJoinGame) ProtoMessage() {} - -func (x *CSJoinGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[35] - 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 CSJoinGame.ProtoReflect.Descriptor instead. -func (*CSJoinGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{35} -} - -func (x *CSJoinGame) GetMsgType() int32 { - if x != nil { - return x.MsgType - } - return 0 -} - -func (x *CSJoinGame) GetSnId() int32 { - if x != nil { - return x.SnId - } - return 0 -} - -func (x *CSJoinGame) GetPos() int32 { - if x != nil { - return x.Pos - } - return 0 -} - -func (x *CSJoinGame) GetAgree() bool { - if x != nil { - return x.Agree - } - return false -} - -//SC_TJOINGAME -//请求的通知 -type SCJoinGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MsgType int32 `protobuf:"varint,1,opt,name=MsgType,proto3" json:"MsgType,omitempty"` //0.请求信息1.确认信息 - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` //type=0为申请者的昵称,和snid同步发送,广播范围是房间内用户 - SnId int32 `protobuf:"varint,3,opt,name=SnId,proto3" json:"SnId,omitempty"` //type=0申请者ID - OpRetCode OpResultCode_Game `protobuf:"varint,4,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //type=1时,为申请的结果,为0成功,其他的为错误代码 1 座位已满 2 观战人数已满 -} - -func (x *SCJoinGame) Reset() { - *x = SCJoinGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCJoinGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCJoinGame) ProtoMessage() {} - -func (x *SCJoinGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[36] - 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 SCJoinGame.ProtoReflect.Descriptor instead. -func (*SCJoinGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{36} -} - -func (x *SCJoinGame) GetMsgType() int32 { - if x != nil { - return x.MsgType - } - return 0 -} - -func (x *SCJoinGame) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SCJoinGame) GetSnId() int32 { - if x != nil { - return x.SnId - } - return 0 -} - -func (x *SCJoinGame) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//PACKET_CS_ENTERDGGAME -type CSEnterDgGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LoginType int32 `protobuf:"varint,1,opt,name=LoginType,proto3" json:"LoginType,omitempty"` //0.试玩登录1.正常登录 - DgGameId int32 `protobuf:"varint,2,opt,name=DgGameId,proto3" json:"DgGameId,omitempty"` //游戏ID - Domains string `protobuf:"bytes,3,opt,name=Domains,proto3" json:"Domains,omitempty"` //sdk -} - -func (x *CSEnterDgGame) Reset() { - *x = CSEnterDgGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSEnterDgGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSEnterDgGame) ProtoMessage() {} - -func (x *CSEnterDgGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[37] - 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 CSEnterDgGame.ProtoReflect.Descriptor instead. -func (*CSEnterDgGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{37} -} - -func (x *CSEnterDgGame) GetLoginType() int32 { - if x != nil { - return x.LoginType - } - return 0 -} - -func (x *CSEnterDgGame) GetDgGameId() int32 { - if x != nil { - return x.DgGameId - } - return 0 -} - -func (x *CSEnterDgGame) GetDomains() string { - if x != nil { - return x.Domains - } - return "" -} - -type SCEnterDgGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - LoginUrl string `protobuf:"bytes,2,opt,name=LoginUrl,proto3" json:"LoginUrl,omitempty"` - Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` - DgGameId int32 `protobuf:"varint,4,opt,name=DgGameId,proto3" json:"DgGameId,omitempty"` //游戏ID - CodeId int32 `protobuf:"varint,5,opt,name=CodeId,proto3" json:"CodeId,omitempty"` - Domains string `protobuf:"bytes,6,opt,name=Domains,proto3" json:"Domains,omitempty"` - List []string `protobuf:"bytes,7,rep,name=List,proto3" json:"List,omitempty"` -} - -func (x *SCEnterDgGame) Reset() { - *x = SCEnterDgGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCEnterDgGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCEnterDgGame) ProtoMessage() {} - -func (x *SCEnterDgGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[38] - 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 SCEnterDgGame.ProtoReflect.Descriptor instead. -func (*SCEnterDgGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{38} -} - -func (x *SCEnterDgGame) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCEnterDgGame) GetLoginUrl() string { - if x != nil { - return x.LoginUrl - } - return "" -} - -func (x *SCEnterDgGame) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *SCEnterDgGame) GetDgGameId() int32 { - if x != nil { - return x.DgGameId - } - return 0 -} - -func (x *SCEnterDgGame) GetCodeId() int32 { - if x != nil { - return x.CodeId - } - return 0 -} - -func (x *SCEnterDgGame) GetDomains() string { - if x != nil { - return x.Domains - } - return "" -} - -func (x *SCEnterDgGame) GetList() []string { - if x != nil { - return x.List - } - return nil -} - -//PACKET_CS_LEAVEDGGAME -type CSLeaveDgGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSLeaveDgGame) Reset() { - *x = CSLeaveDgGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSLeaveDgGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSLeaveDgGame) ProtoMessage() {} - -func (x *CSLeaveDgGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[39] - 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 CSLeaveDgGame.ProtoReflect.Descriptor instead. -func (*CSLeaveDgGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{39} -} - -type SCLeaveDgGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCLeaveDgGame) Reset() { - *x = SCLeaveDgGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLeaveDgGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLeaveDgGame) ProtoMessage() {} - -func (x *SCLeaveDgGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[40] - 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 SCLeaveDgGame.ProtoReflect.Descriptor instead. -func (*SCLeaveDgGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{40} -} - -func (x *SCLeaveDgGame) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//第三方个人账户信息统计 -type CSThridAccountStatistic struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ReqId int32 `protobuf:"varint,1,opt,name=ReqId,proto3" json:"ReqId,omitempty"` //-1返回全部平台信息,0为系统平台 -} - -func (x *CSThridAccountStatistic) Reset() { - *x = CSThridAccountStatistic{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSThridAccountStatistic) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSThridAccountStatistic) ProtoMessage() {} - -func (x *CSThridAccountStatistic) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[41] - 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 CSThridAccountStatistic.ProtoReflect.Descriptor instead. -func (*CSThridAccountStatistic) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{41} -} - -func (x *CSThridAccountStatistic) GetReqId() int32 { - if x != nil { - return x.ReqId - } - return 0 -} - -type ThridAccount struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ThridPlatformId int32 `protobuf:"varint,1,opt,name=ThridPlatformId,proto3" json:"ThridPlatformId,omitempty"` - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` - Status int32 `protobuf:"varint,3,opt,name=Status,proto3" json:"Status,omitempty"` //200正常,403异常 - Balance int64 `protobuf:"varint,4,opt,name=Balance,proto3" json:"Balance,omitempty"` -} - -func (x *ThridAccount) Reset() { - *x = ThridAccount{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ThridAccount) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ThridAccount) ProtoMessage() {} - -func (x *ThridAccount) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[42] - 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 ThridAccount.ProtoReflect.Descriptor instead. -func (*ThridAccount) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{42} -} - -func (x *ThridAccount) GetThridPlatformId() int32 { - if x != nil { - return x.ThridPlatformId - } - return 0 -} - -func (x *ThridAccount) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ThridAccount) GetStatus() int32 { - if x != nil { - return x.Status - } - return 0 -} - -func (x *ThridAccount) GetBalance() int64 { - if x != nil { - return x.Balance - } - return 0 -} - -type SCThridAccountStatistic struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ReqId int32 `protobuf:"varint,1,opt,name=ReqId,proto3" json:"ReqId,omitempty"` - Accounts []*ThridAccount `protobuf:"bytes,2,rep,name=Accounts,proto3" json:"Accounts,omitempty"` -} - -func (x *SCThridAccountStatistic) Reset() { - *x = SCThridAccountStatistic{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCThridAccountStatistic) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCThridAccountStatistic) ProtoMessage() {} - -func (x *SCThridAccountStatistic) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[43] - 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 SCThridAccountStatistic.ProtoReflect.Descriptor instead. -func (*SCThridAccountStatistic) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{43} -} - -func (x *SCThridAccountStatistic) GetReqId() int32 { - if x != nil { - return x.ReqId - } - return 0 -} - -func (x *SCThridAccountStatistic) GetAccounts() []*ThridAccount { - if x != nil { - return x.Accounts - } - return nil -} - -//第三方个人账户余额转入转出 -type CSThridAccountTransfer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FromId int32 `protobuf:"varint,1,opt,name=FromId,proto3" json:"FromId,omitempty"` - ToId int32 `protobuf:"varint,2,opt,name=ToId,proto3" json:"ToId,omitempty"` - Amount int64 `protobuf:"varint,3,opt,name=Amount,proto3" json:"Amount,omitempty"` -} - -func (x *CSThridAccountTransfer) Reset() { - *x = CSThridAccountTransfer{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSThridAccountTransfer) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSThridAccountTransfer) ProtoMessage() {} - -func (x *CSThridAccountTransfer) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[44] - 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 CSThridAccountTransfer.ProtoReflect.Descriptor instead. -func (*CSThridAccountTransfer) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{44} -} - -func (x *CSThridAccountTransfer) GetFromId() int32 { - if x != nil { - return x.FromId - } - return 0 -} - -func (x *CSThridAccountTransfer) GetToId() int32 { - if x != nil { - return x.ToId - } - return 0 -} - -func (x *CSThridAccountTransfer) GetAmount() int64 { - if x != nil { - return x.Amount - } - return 0 -} - -type SCThridAccountTransfer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - Accounts []*ThridAccount `protobuf:"bytes,2,rep,name=Accounts,proto3" json:"Accounts,omitempty"` //OpRetCode为0时,两条数据 分别是from to -} - -func (x *SCThridAccountTransfer) Reset() { - *x = SCThridAccountTransfer{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[45] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCThridAccountTransfer) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCThridAccountTransfer) ProtoMessage() {} - -func (x *SCThridAccountTransfer) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[45] - 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 SCThridAccountTransfer.ProtoReflect.Descriptor instead. -func (*SCThridAccountTransfer) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{45} -} - -func (x *SCThridAccountTransfer) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCThridAccountTransfer) GetAccounts() []*ThridAccount { - if x != nil { - return x.Accounts - } - return nil -} - -type CSEnterThridGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ThridGameId int32 `protobuf:"varint,2,opt,name=ThridGameId,proto3" json:"ThridGameId,omitempty"` //第三方游戏ID -} - -func (x *CSEnterThridGame) Reset() { - *x = CSEnterThridGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSEnterThridGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSEnterThridGame) ProtoMessage() {} - -func (x *CSEnterThridGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[46] - 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 CSEnterThridGame.ProtoReflect.Descriptor instead. -func (*CSEnterThridGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{46} -} - -func (x *CSEnterThridGame) GetThridGameId() int32 { - if x != nil { - return x.ThridGameId - } - return 0 -} - -type SCEnterThridGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - EnterUrl string `protobuf:"bytes,2,opt,name=EnterUrl,proto3" json:"EnterUrl,omitempty"` - ScreenOrientationType int32 `protobuf:"varint,3,opt,name=ScreenOrientationType,proto3" json:"ScreenOrientationType,omitempty"` - ThridGameId int32 `protobuf:"varint,4,opt,name=ThridGameId,proto3" json:"ThridGameId,omitempty"` //第三方游戏ID -} - -func (x *SCEnterThridGame) Reset() { - *x = SCEnterThridGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCEnterThridGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCEnterThridGame) ProtoMessage() {} - -func (x *SCEnterThridGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[47] - 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 SCEnterThridGame.ProtoReflect.Descriptor instead. -func (*SCEnterThridGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{47} -} - -func (x *SCEnterThridGame) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCEnterThridGame) GetEnterUrl() string { - if x != nil { - return x.EnterUrl - } - return "" -} - -func (x *SCEnterThridGame) GetScreenOrientationType() int32 { - if x != nil { - return x.ScreenOrientationType - } - return 0 -} - -func (x *SCEnterThridGame) GetThridGameId() int32 { - if x != nil { - return x.ThridGameId - } - return 0 -} - -type CSLeaveThridGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSLeaveThridGame) Reset() { - *x = CSLeaveThridGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSLeaveThridGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSLeaveThridGame) ProtoMessage() {} - -func (x *CSLeaveThridGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[48] - 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 CSLeaveThridGame.ProtoReflect.Descriptor instead. -func (*CSLeaveThridGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{48} -} - -type SCLeaveThridGame struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCLeaveThridGame) Reset() { - *x = SCLeaveThridGame{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLeaveThridGame) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLeaveThridGame) ProtoMessage() {} - -func (x *SCLeaveThridGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[49] - 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 SCLeaveThridGame.ProtoReflect.Descriptor instead. -func (*SCLeaveThridGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{49} -} - -func (x *SCLeaveThridGame) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -type CSThridGameList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSThridGameList) Reset() { - *x = CSThridGameList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSThridGameList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSThridGameList) ProtoMessage() {} - -func (x *CSThridGameList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[50] - 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 CSThridGameList.ProtoReflect.Descriptor instead. -func (*CSThridGameList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{50} -} - -type ThridGameDatas struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ThridGameId string `protobuf:"bytes,1,opt,name=ThridGameId,proto3" json:"ThridGameId,omitempty"` //第三方游戏ID - ThridGameName string `protobuf:"bytes,2,opt,name=ThridGameName,proto3" json:"ThridGameName,omitempty"` //游戏名 -} - -func (x *ThridGameDatas) Reset() { - *x = ThridGameDatas{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[51] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ThridGameDatas) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ThridGameDatas) ProtoMessage() {} - -func (x *ThridGameDatas) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[51] - 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 ThridGameDatas.ProtoReflect.Descriptor instead. -func (*ThridGameDatas) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{51} -} - -func (x *ThridGameDatas) GetThridGameId() string { - if x != nil { - return x.ThridGameId - } - return "" -} - -func (x *ThridGameDatas) GetThridGameName() string { - if x != nil { - return x.ThridGameName - } - return "" -} - -type ThridGamePlatforms struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ThridPlatformId int32 `protobuf:"varint,1,opt,name=ThridPlatformId,proto3" json:"ThridPlatformId,omitempty"` - ThridPlatformName string `protobuf:"bytes,2,opt,name=ThridPlatformName,proto3" json:"ThridPlatformName,omitempty"` //平台名 - GameDatas []*ThridGameDatas `protobuf:"bytes,3,rep,name=GameDatas,proto3" json:"GameDatas,omitempty"` -} - -func (x *ThridGamePlatforms) Reset() { - *x = ThridGamePlatforms{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ThridGamePlatforms) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ThridGamePlatforms) ProtoMessage() {} - -func (x *ThridGamePlatforms) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[52] - 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 ThridGamePlatforms.ProtoReflect.Descriptor instead. -func (*ThridGamePlatforms) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{52} -} - -func (x *ThridGamePlatforms) GetThridPlatformId() int32 { - if x != nil { - return x.ThridPlatformId - } - return 0 -} - -func (x *ThridGamePlatforms) GetThridPlatformName() string { - if x != nil { - return x.ThridPlatformName - } - return "" -} - -func (x *ThridGamePlatforms) GetGameDatas() []*ThridGameDatas { - if x != nil { - return x.GameDatas - } - return nil -} - -type SCThridGameList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - GamePlatforms []*ThridGamePlatforms `protobuf:"bytes,2,rep,name=GamePlatforms,proto3" json:"GamePlatforms,omitempty"` -} - -func (x *SCThridGameList) Reset() { - *x = SCThridGameList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCThridGameList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCThridGameList) ProtoMessage() {} - -func (x *SCThridGameList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[53] - 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 SCThridGameList.ProtoReflect.Descriptor instead. -func (*SCThridGameList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{53} -} - -func (x *SCThridGameList) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCThridGameList) GetGamePlatforms() []*ThridGamePlatforms { - if x != nil { - return x.GamePlatforms - } - return nil -} - -type CSThridGameBalanceUpdate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSThridGameBalanceUpdate) Reset() { - *x = CSThridGameBalanceUpdate{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSThridGameBalanceUpdate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSThridGameBalanceUpdate) ProtoMessage() {} - -func (x *CSThridGameBalanceUpdate) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[54] - 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 CSThridGameBalanceUpdate.ProtoReflect.Descriptor instead. -func (*CSThridGameBalanceUpdate) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{54} -} - -type SCThridGameBalanceUpdate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - Coin int64 `protobuf:"varint,2,opt,name=Coin,proto3" json:"Coin,omitempty"` //玩家的余额 -} - -func (x *SCThridGameBalanceUpdate) Reset() { - *x = SCThridGameBalanceUpdate{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCThridGameBalanceUpdate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCThridGameBalanceUpdate) ProtoMessage() {} - -func (x *SCThridGameBalanceUpdate) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[55] - 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 SCThridGameBalanceUpdate.ProtoReflect.Descriptor instead. -func (*SCThridGameBalanceUpdate) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{55} -} - -func (x *SCThridGameBalanceUpdate) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCThridGameBalanceUpdate) GetCoin() int64 { - if x != nil { - return x.Coin - } - return 0 -} - -type SCThridGameBalanceUpdateState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCThridGameBalanceUpdateState) Reset() { - *x = SCThridGameBalanceUpdateState{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCThridGameBalanceUpdateState) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCThridGameBalanceUpdateState) ProtoMessage() {} - -func (x *SCThridGameBalanceUpdateState) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[56] - 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 SCThridGameBalanceUpdateState.ProtoReflect.Descriptor instead. -func (*SCThridGameBalanceUpdateState) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{56} -} - -func (x *SCThridGameBalanceUpdateState) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//创建私人房间 -//PACKET_CS_CREATEPRIVATEROOM -type CSCreatePrivateRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id - Params []int32 `protobuf:"varint,2,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场参数 1:局数索引(从1开始) 2:中途加入 3:同IP -} - -func (x *CSCreatePrivateRoom) Reset() { - *x = CSCreatePrivateRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[57] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSCreatePrivateRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSCreatePrivateRoom) ProtoMessage() {} - -func (x *CSCreatePrivateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[57] - 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 CSCreatePrivateRoom.ProtoReflect.Descriptor instead. -func (*CSCreatePrivateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{57} -} - -func (x *CSCreatePrivateRoom) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *CSCreatePrivateRoom) GetParams() []int32 { - if x != nil { - return x.Params - } - return nil -} - -//创建私人房间 -//PACKET_SC_CREATEPRIVATEROOM -type SCCreatePrivateRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - //游戏ID - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id - Params []int32 `protobuf:"varint,2,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场参数 1:局数索引(从1开始) 2:中途加入 3:同IP - RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - OpRetCode OpResultCode_Game `protobuf:"varint,4,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCCreatePrivateRoom) Reset() { - *x = SCCreatePrivateRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCCreatePrivateRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCCreatePrivateRoom) ProtoMessage() {} - -func (x *SCCreatePrivateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[58] - 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 SCCreatePrivateRoom.ProtoReflect.Descriptor instead. -func (*SCCreatePrivateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{58} -} - -func (x *SCCreatePrivateRoom) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *SCCreatePrivateRoom) GetParams() []int32 { - if x != nil { - return x.Params - } - return nil -} - -func (x *SCCreatePrivateRoom) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCCreatePrivateRoom) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//个人创建的房间信息 -type PrivateRoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id - RoomId int32 `protobuf:"varint,2,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - CurrRound int32 `protobuf:"varint,3,opt,name=CurrRound,proto3" json:"CurrRound,omitempty"` //当前第几轮 - MaxRound int32 `protobuf:"varint,4,opt,name=MaxRound,proto3" json:"MaxRound,omitempty"` //最多多少轮 - CurrNum int32 `protobuf:"varint,5,opt,name=CurrNum,proto3" json:"CurrNum,omitempty"` //当前人数 - MaxPlayer int32 `protobuf:"varint,6,opt,name=MaxPlayer,proto3" json:"MaxPlayer,omitempty"` //最大人数 - CreateTs int32 `protobuf:"varint,7,opt,name=CreateTs,proto3" json:"CreateTs,omitempty"` //创建时间戳 -} - -func (x *PrivateRoomInfo) Reset() { - *x = PrivateRoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[59] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrivateRoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrivateRoomInfo) ProtoMessage() {} - -func (x *PrivateRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[59] - 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 PrivateRoomInfo.ProtoReflect.Descriptor instead. -func (*PrivateRoomInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{59} -} - -func (x *PrivateRoomInfo) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *PrivateRoomInfo) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *PrivateRoomInfo) GetCurrRound() int32 { - if x != nil { - return x.CurrRound - } - return 0 -} - -func (x *PrivateRoomInfo) GetMaxRound() int32 { - if x != nil { - return x.MaxRound - } - return 0 -} - -func (x *PrivateRoomInfo) GetCurrNum() int32 { - if x != nil { - return x.CurrNum - } - return 0 -} - -func (x *PrivateRoomInfo) GetMaxPlayer() int32 { - if x != nil { - return x.MaxPlayer - } - return 0 -} - -func (x *PrivateRoomInfo) GetCreateTs() int32 { - if x != nil { - return x.CreateTs - } - return 0 -} - -//获取代开的房间列表 -//PACKET_CS_GETPRIVATEROOMLIST -type CSGetPrivateRoomList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CSGetPrivateRoomList) Reset() { - *x = CSGetPrivateRoomList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[60] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSGetPrivateRoomList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSGetPrivateRoomList) ProtoMessage() {} - -func (x *CSGetPrivateRoomList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[60] - 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 CSGetPrivateRoomList.ProtoReflect.Descriptor instead. -func (*CSGetPrivateRoomList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{60} -} - -//PACKET_SC_GETPRIVATEROOMLIST -type SCGetPrivateRoomList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Datas []*PrivateRoomInfo `protobuf:"bytes,1,rep,name=Datas,proto3" json:"Datas,omitempty"` //房间列表 -} - -func (x *SCGetPrivateRoomList) Reset() { - *x = SCGetPrivateRoomList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[61] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCGetPrivateRoomList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCGetPrivateRoomList) ProtoMessage() {} - -func (x *SCGetPrivateRoomList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[61] - 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 SCGetPrivateRoomList.ProtoReflect.Descriptor instead. -func (*SCGetPrivateRoomList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{61} -} - -func (x *SCGetPrivateRoomList) GetDatas() []*PrivateRoomInfo { - if x != nil { - return x.Datas - } - return nil -} - -//获取代开的房间历史记录 -//PACKET_CS_GETPRIVATEROOMHISTORY -type CSGetPrivateRoomHistory struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - QueryTime int32 `protobuf:"varint,1,opt,name=QueryTime,proto3" json:"QueryTime,omitempty"` //查询日期 YYYYMMDD -} - -func (x *CSGetPrivateRoomHistory) Reset() { - *x = CSGetPrivateRoomHistory{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[62] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSGetPrivateRoomHistory) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSGetPrivateRoomHistory) ProtoMessage() {} - -func (x *CSGetPrivateRoomHistory) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[62] - 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 CSGetPrivateRoomHistory.ProtoReflect.Descriptor instead. -func (*CSGetPrivateRoomHistory) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{62} -} - -func (x *CSGetPrivateRoomHistory) GetQueryTime() int32 { - if x != nil { - return x.QueryTime - } - return 0 -} - -//已开房间历史记录 -type PrivateRoomHistory struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id - RoomId int32 `protobuf:"varint,2,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - CreateTime int32 `protobuf:"varint,3,opt,name=CreateTime,proto3" json:"CreateTime,omitempty"` //创建时间,时间戳 - DestroyTime int32 `protobuf:"varint,4,opt,name=DestroyTime,proto3" json:"DestroyTime,omitempty"` //结束时间,时间戳 - CreateFee int32 `protobuf:"varint,5,opt,name=CreateFee,proto3" json:"CreateFee,omitempty"` //房费 -} - -func (x *PrivateRoomHistory) Reset() { - *x = PrivateRoomHistory{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[63] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrivateRoomHistory) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrivateRoomHistory) ProtoMessage() {} - -func (x *PrivateRoomHistory) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[63] - 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 PrivateRoomHistory.ProtoReflect.Descriptor instead. -func (*PrivateRoomHistory) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{63} -} - -func (x *PrivateRoomHistory) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *PrivateRoomHistory) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *PrivateRoomHistory) GetCreateTime() int32 { - if x != nil { - return x.CreateTime - } - return 0 -} - -func (x *PrivateRoomHistory) GetDestroyTime() int32 { - if x != nil { - return x.DestroyTime - } - return 0 -} - -func (x *PrivateRoomHistory) GetCreateFee() int32 { - if x != nil { - return x.CreateFee - } - return 0 -} - -//PACKET_SC_GETPRIVATEROOMHISTORY -type SCGetPrivateRoomHistory struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - QueryTime int32 `protobuf:"varint,1,opt,name=QueryTime,proto3" json:"QueryTime,omitempty"` //查询日期 - Datas []*PrivateRoomHistory `protobuf:"bytes,2,rep,name=Datas,proto3" json:"Datas,omitempty"` //历史开房记录 -} - -func (x *SCGetPrivateRoomHistory) Reset() { - *x = SCGetPrivateRoomHistory{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[64] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCGetPrivateRoomHistory) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCGetPrivateRoomHistory) ProtoMessage() {} - -func (x *SCGetPrivateRoomHistory) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[64] - 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 SCGetPrivateRoomHistory.ProtoReflect.Descriptor instead. -func (*SCGetPrivateRoomHistory) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{64} -} - -func (x *SCGetPrivateRoomHistory) GetQueryTime() int32 { - if x != nil { - return x.QueryTime - } - return 0 -} - -func (x *SCGetPrivateRoomHistory) GetDatas() []*PrivateRoomHistory { - if x != nil { - return x.Datas - } - return nil -} - -//PACKET_CS_DESTROYPRIVATEROOM -type CSDestroyPrivateRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` -} - -func (x *CSDestroyPrivateRoom) Reset() { - *x = CSDestroyPrivateRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[65] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSDestroyPrivateRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSDestroyPrivateRoom) ProtoMessage() {} - -func (x *CSDestroyPrivateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[65] - 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 CSDestroyPrivateRoom.ProtoReflect.Descriptor instead. -func (*CSDestroyPrivateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{65} -} - -func (x *CSDestroyPrivateRoom) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -//PACKET_SC_DESTROYPRIVATEROOM -type SCDestroyPrivateRoom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - OpRetCode OpResultCode_Game `protobuf:"varint,2,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 - State int32 `protobuf:"varint,3,opt,name=State,proto3" json:"State,omitempty"` //状态 0:删除中 1:已删除 -} - -func (x *SCDestroyPrivateRoom) Reset() { - *x = SCDestroyPrivateRoom{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[66] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCDestroyPrivateRoom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCDestroyPrivateRoom) ProtoMessage() {} - -func (x *SCDestroyPrivateRoom) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[66] - 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 SCDestroyPrivateRoom.ProtoReflect.Descriptor instead. -func (*SCDestroyPrivateRoom) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{66} -} - -func (x *SCDestroyPrivateRoom) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *SCDestroyPrivateRoom) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -func (x *SCDestroyPrivateRoom) GetState() int32 { - if x != nil { - return x.State - } - return 0 -} - -//PACKET_CS_QUERYROOMINFO -type CSQueryRoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameIds []int32 `protobuf:"varint,1,rep,packed,name=GameIds,proto3" json:"GameIds,omitempty"` - GameSite int32 `protobuf:"varint,2,opt,name=GameSite,proto3" json:"GameSite,omitempty"` //1.初级 2.中级 3.高级 - Id []int32 `protobuf:"varint,3,rep,packed,name=Id,proto3" json:"Id,omitempty"` //gamefreeid - SceneMode int32 `protobuf:"varint,4,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` // 0公共房 2私人房 -} - -func (x *CSQueryRoomInfo) Reset() { - *x = CSQueryRoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[67] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSQueryRoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSQueryRoomInfo) ProtoMessage() {} - -func (x *CSQueryRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[67] - 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 CSQueryRoomInfo.ProtoReflect.Descriptor instead. -func (*CSQueryRoomInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{67} -} - -func (x *CSQueryRoomInfo) GetGameIds() []int32 { - if x != nil { - return x.GameIds - } - return nil -} - -func (x *CSQueryRoomInfo) GetGameSite() int32 { - if x != nil { - return x.GameSite - } - return 0 -} - -func (x *CSQueryRoomInfo) GetId() []int32 { - if x != nil { - return x.Id - } - return nil -} - -func (x *CSQueryRoomInfo) GetSceneMode() int32 { - if x != nil { - return x.SceneMode - } - return 0 -} - -//个人创建的房间信息 -type QRoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` - RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 - BaseCoin int64 `protobuf:"varint,4,opt,name=BaseCoin,proto3" json:"BaseCoin,omitempty"` - LimitCoin int64 `protobuf:"varint,5,opt,name=LimitCoin,proto3" json:"LimitCoin,omitempty"` - CurrNum int32 `protobuf:"varint,6,opt,name=CurrNum,proto3" json:"CurrNum,omitempty"` //当前人数 - MaxPlayer int32 `protobuf:"varint,7,opt,name=MaxPlayer,proto3" json:"MaxPlayer,omitempty"` //最大人数 - Creator int32 `protobuf:"varint,8,opt,name=Creator,proto3" json:"Creator,omitempty"` - CreateTs int32 `protobuf:"varint,9,opt,name=CreateTs,proto3" json:"CreateTs,omitempty"` //创建时间戳 - Params []int32 `protobuf:"varint,10,rep,packed,name=Params,proto3" json:"Params,omitempty"` // 建房参数 -} - -func (x *QRoomInfo) Reset() { - *x = QRoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[68] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *QRoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*QRoomInfo) ProtoMessage() {} - -func (x *QRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[68] - 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 QRoomInfo.ProtoReflect.Descriptor instead. -func (*QRoomInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{68} -} - -func (x *QRoomInfo) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *QRoomInfo) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -func (x *QRoomInfo) GetRoomId() int32 { - if x != nil { - return x.RoomId - } - return 0 -} - -func (x *QRoomInfo) GetBaseCoin() int64 { - if x != nil { - return x.BaseCoin - } - return 0 -} - -func (x *QRoomInfo) GetLimitCoin() int64 { - if x != nil { - return x.LimitCoin - } - return 0 -} - -func (x *QRoomInfo) GetCurrNum() int32 { - if x != nil { - return x.CurrNum - } - return 0 -} - -func (x *QRoomInfo) GetMaxPlayer() int32 { - if x != nil { - return x.MaxPlayer - } - return 0 -} - -func (x *QRoomInfo) GetCreator() int32 { - if x != nil { - return x.Creator - } - return 0 -} - -func (x *QRoomInfo) GetCreateTs() int32 { - if x != nil { - return x.CreateTs - } - return 0 -} - -func (x *QRoomInfo) GetParams() []int32 { - if x != nil { - return x.Params - } - return nil -} - -//PACKET_SC_QUERYROOMINFO -type SCQueryRoomInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameIds []int32 `protobuf:"varint,1,rep,packed,name=GameIds,proto3" json:"GameIds,omitempty"` - GameSite int32 `protobuf:"varint,2,opt,name=GameSite,proto3" json:"GameSite,omitempty"` //1.初级 2.中级 3.高级 - RoomInfo []*QRoomInfo `protobuf:"bytes,3,rep,name=RoomInfo,proto3" json:"RoomInfo,omitempty"` //房间列表 - OpRetCode OpResultCode_Game `protobuf:"varint,4,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 -} - -func (x *SCQueryRoomInfo) Reset() { - *x = SCQueryRoomInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[69] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCQueryRoomInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCQueryRoomInfo) ProtoMessage() {} - -func (x *SCQueryRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[69] - 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 SCQueryRoomInfo.ProtoReflect.Descriptor instead. -func (*SCQueryRoomInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{69} -} - -func (x *SCQueryRoomInfo) GetGameIds() []int32 { - if x != nil { - return x.GameIds - } - return nil -} - -func (x *SCQueryRoomInfo) GetGameSite() int32 { - if x != nil { - return x.GameSite - } - return 0 -} - -func (x *SCQueryRoomInfo) GetRoomInfo() []*QRoomInfo { - if x != nil { - return x.RoomInfo - } - return nil -} - -func (x *SCQueryRoomInfo) GetOpRetCode() OpResultCode_Game { - if x != nil { - return x.OpRetCode - } - return OpResultCode_Game_OPRC_Sucess_Game -} - -//注册观察者,用于推送游戏的状态信息 -//PACKET_CS_GAMEOBSERVE -type CSGameObserve struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameId int32 `protobuf:"varint,1,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏ID - StartOrEnd bool `protobuf:"varint,2,opt,name=StartOrEnd,proto3" json:"StartOrEnd,omitempty"` //打开或者关闭 -} - -func (x *CSGameObserve) Reset() { - *x = CSGameObserve{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[70] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSGameObserve) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSGameObserve) ProtoMessage() {} - -func (x *CSGameObserve) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[70] - 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 CSGameObserve.ProtoReflect.Descriptor instead. -func (*CSGameObserve) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{70} -} - -func (x *CSGameObserve) GetGameId() int32 { - if x != nil { - return x.GameId - } - return 0 -} - -func (x *CSGameObserve) GetStartOrEnd() bool { - if x != nil { - return x.StartOrEnd - } - return false -} - -//PACKET_SC_GAMESUBLIST -type GameSubRecord struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - LogCnt int32 `protobuf:"varint,2,opt,name=LogCnt,proto3" json:"LogCnt,omitempty"` - NewLog int32 `protobuf:"varint,3,opt,name=NewLog,proto3" json:"NewLog,omitempty"` //新结果 - TotleLog []int32 `protobuf:"varint,4,rep,packed,name=TotleLog,proto3" json:"TotleLog,omitempty"` //最近几局的中奖结果 -} - -func (x *GameSubRecord) Reset() { - *x = GameSubRecord{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[71] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GameSubRecord) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GameSubRecord) ProtoMessage() {} - -func (x *GameSubRecord) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[71] - 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 GameSubRecord.ProtoReflect.Descriptor instead. -func (*GameSubRecord) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{71} -} - -func (x *GameSubRecord) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *GameSubRecord) GetLogCnt() int32 { - if x != nil { - return x.LogCnt - } - return 0 -} - -func (x *GameSubRecord) GetNewLog() int32 { - if x != nil { - return x.NewLog - } - return 0 -} - -func (x *GameSubRecord) GetTotleLog() []int32 { - if x != nil { - return x.TotleLog - } - return nil -} - -type SCGameSubList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - List []*GameSubRecord `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` -} - -func (x *SCGameSubList) Reset() { - *x = SCGameSubList{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[72] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCGameSubList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCGameSubList) ProtoMessage() {} - -func (x *SCGameSubList) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[72] - 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 SCGameSubList.ProtoReflect.Descriptor instead. -func (*SCGameSubList) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{72} -} - -func (x *SCGameSubList) GetList() []*GameSubRecord { - if x != nil { - return x.List - } - return nil -} - -//游戏中的状态 -type GameState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - Ts int64 `protobuf:"varint,2,opt,name=Ts,proto3" json:"Ts,omitempty"` - Sec int32 `protobuf:"varint,3,opt,name=Sec,proto3" json:"Sec,omitempty"` -} - -func (x *GameState) Reset() { - *x = GameState{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[73] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GameState) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GameState) ProtoMessage() {} - -func (x *GameState) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[73] - 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 GameState.ProtoReflect.Descriptor instead. -func (*GameState) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{73} -} - -func (x *GameState) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *GameState) GetTs() int64 { - if x != nil { - return x.Ts - } - return 0 -} - -func (x *GameState) GetSec() int32 { - if x != nil { - return x.Sec - } - return 0 -} - -type SCGameState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - List []*GameState `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` -} - -func (x *SCGameState) Reset() { - *x = SCGameState{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[74] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCGameState) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCGameState) ProtoMessage() {} - -func (x *SCGameState) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[74] - 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 SCGameState.ProtoReflect.Descriptor instead. -func (*SCGameState) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{74} -} - -func (x *SCGameState) GetList() []*GameState { - if x != nil { - return x.List - } - return nil -} - -//奖金池数据 -type LotteryData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - Value int64 `protobuf:"varint,2,opt,name=Value,proto3" json:"Value,omitempty"` -} - -func (x *LotteryData) Reset() { - *x = LotteryData{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[75] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LotteryData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LotteryData) ProtoMessage() {} - -func (x *LotteryData) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[75] - 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 LotteryData.ProtoReflect.Descriptor instead. -func (*LotteryData) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{75} -} - -func (x *LotteryData) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *LotteryData) GetValue() int64 { - if x != nil { - return x.Value - } - return 0 -} - -//奖金池同步 PACKET_SC_LOTTERYSYNC -type SCLotterySync struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Datas []*LotteryData `protobuf:"bytes,1,rep,name=Datas,proto3" json:"Datas,omitempty"` -} - -func (x *SCLotterySync) Reset() { - *x = SCLotterySync{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[76] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLotterySync) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLotterySync) ProtoMessage() {} - -func (x *SCLotterySync) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[76] - 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 SCLotterySync.ProtoReflect.Descriptor instead. -func (*SCLotterySync) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{76} -} - -func (x *SCLotterySync) GetDatas() []*LotteryData { - if x != nil { - return x.Datas - } - return nil -} - -//PACKET_CS_LOTTERYLOG = 2288; -type CSLotteryLog struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` -} - -func (x *CSLotteryLog) Reset() { - *x = CSLotteryLog{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[77] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CSLotteryLog) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CSLotteryLog) ProtoMessage() {} - -func (x *CSLotteryLog) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[77] - 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 CSLotteryLog.ProtoReflect.Descriptor instead. -func (*CSLotteryLog) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{77} -} - -func (x *CSLotteryLog) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -//奖池中奖记录 -type LotteryLog struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Time int32 `protobuf:"varint,1,opt,name=Time,proto3" json:"Time,omitempty"` - NickName string `protobuf:"bytes,2,opt,name=NickName,proto3" json:"NickName,omitempty"` - Card []int32 `protobuf:"varint,3,rep,packed,name=Card,proto3" json:"Card,omitempty"` - Kind int32 `protobuf:"varint,4,opt,name=Kind,proto3" json:"Kind,omitempty"` - Coin int32 `protobuf:"varint,5,opt,name=Coin,proto3" json:"Coin,omitempty"` -} - -func (x *LotteryLog) Reset() { - *x = LotteryLog{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[78] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LotteryLog) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LotteryLog) ProtoMessage() {} - -func (x *LotteryLog) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[78] - 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 LotteryLog.ProtoReflect.Descriptor instead. -func (*LotteryLog) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{78} -} - -func (x *LotteryLog) GetTime() int32 { - if x != nil { - return x.Time - } - return 0 -} - -func (x *LotteryLog) GetNickName() string { - if x != nil { - return x.NickName - } - return "" -} - -func (x *LotteryLog) GetCard() []int32 { - if x != nil { - return x.Card - } - return nil -} - -func (x *LotteryLog) GetKind() int32 { - if x != nil { - return x.Kind - } - return 0 -} - -func (x *LotteryLog) GetCoin() int32 { - if x != nil { - return x.Coin - } - return 0 -} - -//PACKET_SC_LOTTERYLOG = 2289; -type SCLotteryLog struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - Logs []*LotteryLog `protobuf:"bytes,2,rep,name=Logs,proto3" json:"Logs,omitempty"` -} - -func (x *SCLotteryLog) Reset() { - *x = SCLotteryLog{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[79] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLotteryLog) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLotteryLog) ProtoMessage() {} - -func (x *SCLotteryLog) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[79] - 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 SCLotteryLog.ProtoReflect.Descriptor instead. -func (*SCLotteryLog) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{79} -} - -func (x *SCLotteryLog) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *SCLotteryLog) GetLogs() []*LotteryLog { - if x != nil { - return x.Logs - } - return nil -} - -//PACKET_SC_LOTTERYBILL = 2290 -type SCLotteryBill struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` - Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"` - Kind int32 `protobuf:"varint,4,opt,name=Kind,proto3" json:"Kind,omitempty"` - Card []int32 `protobuf:"varint,5,rep,packed,name=Card,proto3" json:"Card,omitempty"` - Value int64 `protobuf:"varint,6,opt,name=Value,proto3" json:"Value,omitempty"` -} - -func (x *SCLotteryBill) Reset() { - *x = SCLotteryBill{} - if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[80] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SCLotteryBill) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SCLotteryBill) ProtoMessage() {} - -func (x *SCLotteryBill) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[80] - 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 SCLotteryBill.ProtoReflect.Descriptor instead. -func (*SCLotteryBill) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{80} -} - -func (x *SCLotteryBill) GetGameFreeId() int32 { - if x != nil { - return x.GameFreeId - } - return 0 -} - -func (x *SCLotteryBill) GetSnId() int32 { - if x != nil { - return x.SnId - } - return 0 -} - -func (x *SCLotteryBill) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SCLotteryBill) GetKind() int32 { - if x != nil { - return x.Kind - } - return 0 -} - -func (x *SCLotteryBill) GetCard() []int32 { - if x != nil { - return x.Card - } - return nil -} - -func (x *SCLotteryBill) GetValue() int64 { - if x != nil { - return x.Value + return x.Reason } return 0 } @@ -5669,7 +1306,7 @@ type GameConfig1 struct { func (x *GameConfig1) Reset() { *x = GameConfig1{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[81] + mi := &file_game_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5682,7 +1319,7 @@ func (x *GameConfig1) String() string { func (*GameConfig1) ProtoMessage() {} func (x *GameConfig1) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[81] + mi := &file_game_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5695,7 +1332,7 @@ func (x *GameConfig1) ProtoReflect() protoreflect.Message { // Deprecated: Use GameConfig1.ProtoReflect.Descriptor instead. func (*GameConfig1) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{81} + return file_game_proto_rawDescGZIP(), []int{10} } func (x *GameConfig1) GetLogicId() int32 { @@ -5803,7 +1440,7 @@ func (x *GameConfig1) GetSceneAdd() int32 { return 0 } -//PACKET_CS_GETGAMECONFIG = 2231 +//PACKET_CS_GETGAMECONFIG type CSGetGameConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5817,7 +1454,7 @@ type CSGetGameConfig struct { func (x *CSGetGameConfig) Reset() { *x = CSGetGameConfig{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[82] + mi := &file_game_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5830,7 +1467,7 @@ func (x *CSGetGameConfig) String() string { func (*CSGetGameConfig) ProtoMessage() {} func (x *CSGetGameConfig) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[82] + mi := &file_game_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5843,7 +1480,7 @@ func (x *CSGetGameConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use CSGetGameConfig.ProtoReflect.Descriptor instead. func (*CSGetGameConfig) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{82} + return file_game_proto_rawDescGZIP(), []int{11} } func (x *CSGetGameConfig) GetPlatform() string { @@ -5879,7 +1516,7 @@ type ChessRankInfo struct { func (x *ChessRankInfo) Reset() { *x = ChessRankInfo{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[83] + mi := &file_game_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5892,7 +1529,7 @@ func (x *ChessRankInfo) String() string { func (*ChessRankInfo) ProtoMessage() {} func (x *ChessRankInfo) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[83] + mi := &file_game_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5905,7 +1542,7 @@ func (x *ChessRankInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ChessRankInfo.ProtoReflect.Descriptor instead. func (*ChessRankInfo) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{83} + return file_game_proto_rawDescGZIP(), []int{12} } func (x *ChessRankInfo) GetScore() int32 { @@ -5922,7 +1559,7 @@ func (x *ChessRankInfo) GetName() string { return "" } -//PACKET_SC_GETGAMECONFIG = 2232 +//PACKET_SC_GETGAMECONFIG type SCGetGameConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5936,7 +1573,7 @@ type SCGetGameConfig struct { func (x *SCGetGameConfig) Reset() { *x = SCGetGameConfig{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[84] + mi := &file_game_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5949,7 +1586,7 @@ func (x *SCGetGameConfig) String() string { func (*SCGetGameConfig) ProtoMessage() {} func (x *SCGetGameConfig) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[84] + mi := &file_game_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5962,7 +1599,7 @@ func (x *SCGetGameConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use SCGetGameConfig.ProtoReflect.Descriptor instead. func (*SCGetGameConfig) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{84} + return file_game_proto_rawDescGZIP(), []int{13} } func (x *SCGetGameConfig) GetGameCfg() []*GameConfig1 { @@ -5998,7 +1635,7 @@ type SCChangeGameStatus struct { func (x *SCChangeGameStatus) Reset() { *x = SCChangeGameStatus{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[85] + mi := &file_game_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6011,7 +1648,7 @@ func (x *SCChangeGameStatus) String() string { func (*SCChangeGameStatus) ProtoMessage() {} func (x *SCChangeGameStatus) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[85] + mi := &file_game_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6024,7 +1661,7 @@ func (x *SCChangeGameStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use SCChangeGameStatus.ProtoReflect.Descriptor instead. func (*SCChangeGameStatus) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{85} + return file_game_proto_rawDescGZIP(), []int{14} } func (x *SCChangeGameStatus) GetGameCfg() []*GameConfig1 { @@ -6047,7 +1684,7 @@ type SCChangeEntrySwitch struct { func (x *SCChangeEntrySwitch) Reset() { *x = SCChangeEntrySwitch{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[86] + mi := &file_game_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6060,7 +1697,7 @@ func (x *SCChangeEntrySwitch) String() string { func (*SCChangeEntrySwitch) ProtoMessage() {} func (x *SCChangeEntrySwitch) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[86] + mi := &file_game_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6073,7 +1710,7 @@ func (x *SCChangeEntrySwitch) ProtoReflect() protoreflect.Message { // Deprecated: Use SCChangeEntrySwitch.ProtoReflect.Descriptor instead. func (*SCChangeEntrySwitch) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{86} + return file_game_proto_rawDescGZIP(), []int{15} } func (x *SCChangeEntrySwitch) GetIndex() int32 { @@ -6090,36 +1727,40 @@ func (x *SCChangeEntrySwitch) GetSwitch() []bool { return nil } -//PACKET_CS_ENTERGAME -type CSEnterGame struct { +//创建竞技馆私人房间 +//PACKET_CS_CREATEPRIVATEROOM +type CSCreatePrivateRoom struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //游戏id - OpParams []int32 `protobuf:"varint,2,rep,packed,name=OpParams,proto3" json:"OpParams,omitempty"` - Platform string `protobuf:"bytes,3,opt,name=Platform,proto3" json:"Platform,omitempty"` - ApkVer int32 `protobuf:"varint,4,opt,name=ApkVer,proto3" json:"ApkVer,omitempty"` - ResVer int32 `protobuf:"varint,5,opt,name=ResVer,proto3" json:"ResVer,omitempty"` + GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id + RoomTypeId int32 `protobuf:"varint,2,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` //房间类型id + RoomConfigId int32 `protobuf:"varint,3,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + Round int32 `protobuf:"varint,4,opt,name=Round,proto3" json:"Round,omitempty"` //局数 + PlayerNum int32 `protobuf:"varint,5,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` //人数 + NeedPassword int32 `protobuf:"varint,6,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` //是否需要密码 1需要 + CostType int32 `protobuf:"varint,7,opt,name=CostType,proto3" json:"CostType,omitempty"` // 房卡支付方式 1AA 2房主 + Voice int32 `protobuf:"varint,8,opt,name=Voice,proto3" json:"Voice,omitempty"` //是否开启语音 1开启 } -func (x *CSEnterGame) Reset() { - *x = CSEnterGame{} +func (x *CSCreatePrivateRoom) Reset() { + *x = CSCreatePrivateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[87] + mi := &file_game_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CSEnterGame) String() string { +func (x *CSCreatePrivateRoom) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CSEnterGame) ProtoMessage() {} +func (*CSCreatePrivateRoom) ProtoMessage() {} -func (x *CSEnterGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[87] +func (x *CSCreatePrivateRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6130,78 +1771,103 @@ func (x *CSEnterGame) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CSEnterGame.ProtoReflect.Descriptor instead. -func (*CSEnterGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{87} +// Deprecated: Use CSCreatePrivateRoom.ProtoReflect.Descriptor instead. +func (*CSCreatePrivateRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{16} } -func (x *CSEnterGame) GetId() int32 { +func (x *CSCreatePrivateRoom) GetGameFreeId() int32 { if x != nil { - return x.Id + return x.GameFreeId } return 0 } -func (x *CSEnterGame) GetOpParams() []int32 { +func (x *CSCreatePrivateRoom) GetRoomTypeId() int32 { if x != nil { - return x.OpParams - } - return nil -} - -func (x *CSEnterGame) GetPlatform() string { - if x != nil { - return x.Platform - } - return "" -} - -func (x *CSEnterGame) GetApkVer() int32 { - if x != nil { - return x.ApkVer + return x.RoomTypeId } return 0 } -func (x *CSEnterGame) GetResVer() int32 { +func (x *CSCreatePrivateRoom) GetRoomConfigId() int32 { if x != nil { - return x.ResVer + return x.RoomConfigId } return 0 } -//PACKET_SC_ENTERGAME -type SCEnterGame struct { +func (x *CSCreatePrivateRoom) GetRound() int32 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *CSCreatePrivateRoom) GetPlayerNum() int32 { + if x != nil { + return x.PlayerNum + } + return 0 +} + +func (x *CSCreatePrivateRoom) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *CSCreatePrivateRoom) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *CSCreatePrivateRoom) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +//PACKET_SC_CREATEPRIVATEROOM +type SCCreatePrivateRoom struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OpCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpCode,omitempty"` //操作码 - Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // - OpParams []int32 `protobuf:"varint,3,rep,packed,name=OpParams,proto3" json:"OpParams,omitempty"` - MinApkVer int32 `protobuf:"varint,4,opt,name=MinApkVer,proto3" json:"MinApkVer,omitempty"` //最低apk版本号 - LatestApkVer int32 `protobuf:"varint,5,opt,name=LatestApkVer,proto3" json:"LatestApkVer,omitempty"` //最新apk版本号 - MinResVer int32 `protobuf:"varint,6,opt,name=MinResVer,proto3" json:"MinResVer,omitempty"` //最低资源版本号 - LatestResVer int32 `protobuf:"varint,7,opt,name=LatestResVer,proto3" json:"LatestResVer,omitempty"` //最新资源版本号 + OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 + GameFreeId int32 `protobuf:"varint,2,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id + RoomTypeId int32 `protobuf:"varint,3,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` //房间类型id + RoomConfigId int32 `protobuf:"varint,4,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + Round int32 `protobuf:"varint,5,opt,name=Round,proto3" json:"Round,omitempty"` //局数 + PlayerNum int32 `protobuf:"varint,6,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` //人数 + NeedPassword int32 `protobuf:"varint,7,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` //是否需要密码 1需要 + CostType int32 `protobuf:"varint,8,opt,name=CostType,proto3" json:"CostType,omitempty"` //房卡支付方式 1AA 2房主 + Voice int32 `protobuf:"varint,9,opt,name=Voice,proto3" json:"Voice,omitempty"` //是否开启语音 1开启 + RoomId int32 `protobuf:"varint,10,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间id + Password string `protobuf:"bytes,11,opt,name=Password,proto3" json:"Password,omitempty"` //房间密码 } -func (x *SCEnterGame) Reset() { - *x = SCEnterGame{} +func (x *SCCreatePrivateRoom) Reset() { + *x = SCCreatePrivateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[88] + mi := &file_game_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SCEnterGame) String() string { +func (x *SCCreatePrivateRoom) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SCEnterGame) ProtoMessage() {} +func (*SCCreatePrivateRoom) ProtoMessage() {} -func (x *SCEnterGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[88] +func (x *SCCreatePrivateRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6212,87 +1878,394 @@ func (x *SCEnterGame) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SCEnterGame.ProtoReflect.Descriptor instead. -func (*SCEnterGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{88} +// Deprecated: Use SCCreatePrivateRoom.ProtoReflect.Descriptor instead. +func (*SCCreatePrivateRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{17} } -func (x *SCEnterGame) GetOpCode() OpResultCode_Game { +func (x *SCCreatePrivateRoom) GetOpRetCode() OpResultCode_Game { if x != nil { - return x.OpCode + return x.OpRetCode } return OpResultCode_Game_OPRC_Sucess_Game } -func (x *SCEnterGame) GetId() int32 { +func (x *SCCreatePrivateRoom) GetGameFreeId() int32 { if x != nil { - return x.Id + return x.GameFreeId } return 0 } -func (x *SCEnterGame) GetOpParams() []int32 { +func (x *SCCreatePrivateRoom) GetRoomTypeId() int32 { if x != nil { - return x.OpParams + return x.RoomTypeId + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetRound() int32 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetPlayerNum() int32 { + if x != nil { + return x.PlayerNum + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *SCCreatePrivateRoom) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +//PACKET_CS_GETPRIVATEROOMLIST +type CSGetPrivateRoomList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomConfigId int32 `protobuf:"varint,1,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + GameFreeId int32 `protobuf:"varint,2,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` // 场次id + RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` // 房间id + RoomTypeId int32 `protobuf:"varint,4,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` // 玩法类型id +} + +func (x *CSGetPrivateRoomList) Reset() { + *x = CSGetPrivateRoomList{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSGetPrivateRoomList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSGetPrivateRoomList) ProtoMessage() {} + +func (x *CSGetPrivateRoomList) ProtoReflect() protoreflect.Message { + mi := &file_game_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 CSGetPrivateRoomList.ProtoReflect.Descriptor instead. +func (*CSGetPrivateRoomList) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{18} +} + +func (x *CSGetPrivateRoomList) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *CSGetPrivateRoomList) GetGameFreeId() int32 { + if x != nil { + return x.GameFreeId + } + return 0 +} + +func (x *CSGetPrivateRoomList) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *CSGetPrivateRoomList) GetRoomTypeId() int32 { + if x != nil { + return x.RoomTypeId + } + return 0 +} + +type PrivatePlayerInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家id + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` // 玩家昵称 + UseRoleId int32 `protobuf:"varint,3,opt,name=UseRoleId,proto3" json:"UseRoleId,omitempty"` //使用的人物模型id +} + +func (x *PrivatePlayerInfo) Reset() { + *x = PrivatePlayerInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PrivatePlayerInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivatePlayerInfo) ProtoMessage() {} + +func (x *PrivatePlayerInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_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 PrivatePlayerInfo.ProtoReflect.Descriptor instead. +func (*PrivatePlayerInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{19} +} + +func (x *PrivatePlayerInfo) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *PrivatePlayerInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PrivatePlayerInfo) GetUseRoleId() int32 { + if x != nil { + return x.UseRoleId + } + return 0 +} + +//个人创建的房间信息 +type PrivateRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //场次id + GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏id + RoomTypeId int32 `protobuf:"varint,3,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` //玩法类型id + RoomConfigId int32 `protobuf:"varint,4,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + RoomId int32 `protobuf:"varint,5,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间号 + NeedPassword int32 `protobuf:"varint,6,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` //是否需要密码 1是 + CurrRound int32 `protobuf:"varint,7,opt,name=CurrRound,proto3" json:"CurrRound,omitempty"` //当前第几轮 + MaxRound int32 `protobuf:"varint,8,opt,name=MaxRound,proto3" json:"MaxRound,omitempty"` //最大轮数 + CurrNum int32 `protobuf:"varint,9,opt,name=CurrNum,proto3" json:"CurrNum,omitempty"` //当前人数 + MaxPlayer int32 `protobuf:"varint,10,opt,name=MaxPlayer,proto3" json:"MaxPlayer,omitempty"` //最大人数 + CreateTs int64 `protobuf:"varint,11,opt,name=CreateTs,proto3" json:"CreateTs,omitempty"` //创建时间戳 + State int32 `protobuf:"varint,12,opt,name=State,proto3" json:"State,omitempty"` //房间状态 0等待中 1进行中 2已结束 + Players []*PrivatePlayerInfo `protobuf:"bytes,13,rep,name=Players,proto3" json:"Players,omitempty"` //玩家列表 +} + +func (x *PrivateRoomInfo) Reset() { + *x = PrivateRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PrivateRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivateRoomInfo) ProtoMessage() {} + +func (x *PrivateRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[20] + 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 PrivateRoomInfo.ProtoReflect.Descriptor instead. +func (*PrivateRoomInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{20} +} + +func (x *PrivateRoomInfo) GetGameFreeId() int32 { + if x != nil { + return x.GameFreeId + } + return 0 +} + +func (x *PrivateRoomInfo) GetGameId() int32 { + if x != nil { + return x.GameId + } + return 0 +} + +func (x *PrivateRoomInfo) GetRoomTypeId() int32 { + if x != nil { + return x.RoomTypeId + } + return 0 +} + +func (x *PrivateRoomInfo) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *PrivateRoomInfo) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *PrivateRoomInfo) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *PrivateRoomInfo) GetCurrRound() int32 { + if x != nil { + return x.CurrRound + } + return 0 +} + +func (x *PrivateRoomInfo) GetMaxRound() int32 { + if x != nil { + return x.MaxRound + } + return 0 +} + +func (x *PrivateRoomInfo) GetCurrNum() int32 { + if x != nil { + return x.CurrNum + } + return 0 +} + +func (x *PrivateRoomInfo) GetMaxPlayer() int32 { + if x != nil { + return x.MaxPlayer + } + return 0 +} + +func (x *PrivateRoomInfo) GetCreateTs() int64 { + if x != nil { + return x.CreateTs + } + return 0 +} + +func (x *PrivateRoomInfo) GetState() int32 { + if x != nil { + return x.State + } + return 0 +} + +func (x *PrivateRoomInfo) GetPlayers() []*PrivatePlayerInfo { + if x != nil { + return x.Players } return nil } -func (x *SCEnterGame) GetMinApkVer() int32 { - if x != nil { - return x.MinApkVer - } - return 0 -} - -func (x *SCEnterGame) GetLatestApkVer() int32 { - if x != nil { - return x.LatestApkVer - } - return 0 -} - -func (x *SCEnterGame) GetMinResVer() int32 { - if x != nil { - return x.MinResVer - } - return 0 -} - -func (x *SCEnterGame) GetLatestResVer() int32 { - if x != nil { - return x.LatestResVer - } - return 0 -} - -//PACKET_CS_QUITGAME -type CSQuitGame struct { +//PACKET_SC_GETPRIVATEROOMLIST +type SCGetPrivateRoomList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //游戏id - IsAudience bool `protobuf:"varint,2,opt,name=IsAudience,proto3" json:"IsAudience,omitempty"` //是否是观众 + Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 0所有配置 1更新 2新增 3删除 + Datas []*PrivateRoomInfo `protobuf:"bytes,2,rep,name=Datas,proto3" json:"Datas,omitempty"` //房间列表 } -func (x *CSQuitGame) Reset() { - *x = CSQuitGame{} +func (x *SCGetPrivateRoomList) Reset() { + *x = SCGetPrivateRoomList{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[89] + mi := &file_game_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CSQuitGame) String() string { +func (x *SCGetPrivateRoomList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CSQuitGame) ProtoMessage() {} +func (*SCGetPrivateRoomList) ProtoMessage() {} -func (x *CSQuitGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[89] +func (x *SCGetPrivateRoomList) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6303,53 +2276,132 @@ func (x *CSQuitGame) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CSQuitGame.ProtoReflect.Descriptor instead. -func (*CSQuitGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{89} +// Deprecated: Use SCGetPrivateRoomList.ProtoReflect.Descriptor instead. +func (*SCGetPrivateRoomList) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{21} } -func (x *CSQuitGame) GetId() int32 { +func (x *SCGetPrivateRoomList) GetTp() int32 { + if x != nil { + return x.Tp + } + return 0 +} + +func (x *SCGetPrivateRoomList) GetDatas() []*PrivateRoomInfo { + if x != nil { + return x.Datas + } + return nil +} + +//PACKET_CS_QUERYROOMINFO +type CSQueryRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GameIds []int32 `protobuf:"varint,1,rep,packed,name=GameIds,proto3" json:"GameIds,omitempty"` + GameSite int32 `protobuf:"varint,2,opt,name=GameSite,proto3" json:"GameSite,omitempty"` //1.初级 2.中级 3.高级 + Id []int32 `protobuf:"varint,3,rep,packed,name=Id,proto3" json:"Id,omitempty"` //gamefreeid + SceneMode int32 `protobuf:"varint,4,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` // 0公共房 2私人房 +} + +func (x *CSQueryRoomInfo) Reset() { + *x = CSQueryRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSQueryRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSQueryRoomInfo) ProtoMessage() {} + +func (x *CSQueryRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[22] + 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 CSQueryRoomInfo.ProtoReflect.Descriptor instead. +func (*CSQueryRoomInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{22} +} + +func (x *CSQueryRoomInfo) GetGameIds() []int32 { + if x != nil { + return x.GameIds + } + return nil +} + +func (x *CSQueryRoomInfo) GetGameSite() int32 { + if x != nil { + return x.GameSite + } + return 0 +} + +func (x *CSQueryRoomInfo) GetId() []int32 { if x != nil { return x.Id } + return nil +} + +func (x *CSQueryRoomInfo) GetSceneMode() int32 { + if x != nil { + return x.SceneMode + } return 0 } -func (x *CSQuitGame) GetIsAudience() bool { - if x != nil { - return x.IsAudience - } - return false -} - -//PACKET_SC_QUITGAME -type SCQuitGame struct { +//自由桌房间信息 +type QRoomInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OpCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpCode,omitempty"` //操作码 - Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` - Reason int32 `protobuf:"varint,3,opt,name=Reason,proto3" json:"Reason,omitempty"` //原因 + GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` //游戏id + GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` + RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 + BaseCoin int64 `protobuf:"varint,4,opt,name=BaseCoin,proto3" json:"BaseCoin,omitempty"` + LimitCoin int64 `protobuf:"varint,5,opt,name=LimitCoin,proto3" json:"LimitCoin,omitempty"` + CurrNum int32 `protobuf:"varint,6,opt,name=CurrNum,proto3" json:"CurrNum,omitempty"` //当前人数 + MaxPlayer int32 `protobuf:"varint,7,opt,name=MaxPlayer,proto3" json:"MaxPlayer,omitempty"` //最大人数 + Creator int32 `protobuf:"varint,8,opt,name=Creator,proto3" json:"Creator,omitempty"` + CreateTs int32 `protobuf:"varint,9,opt,name=CreateTs,proto3" json:"CreateTs,omitempty"` //创建时间戳 + Params []int32 `protobuf:"varint,10,rep,packed,name=Params,proto3" json:"Params,omitempty"` // 建房参数 } -func (x *SCQuitGame) Reset() { - *x = SCQuitGame{} +func (x *QRoomInfo) Reset() { + *x = QRoomInfo{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[90] + mi := &file_game_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SCQuitGame) String() string { +func (x *QRoomInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SCQuitGame) ProtoMessage() {} +func (*QRoomInfo) ProtoMessage() {} -func (x *SCQuitGame) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[90] +func (x *QRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6360,60 +2412,180 @@ func (x *SCQuitGame) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SCQuitGame.ProtoReflect.Descriptor instead. -func (*SCQuitGame) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{90} +// Deprecated: Use QRoomInfo.ProtoReflect.Descriptor instead. +func (*QRoomInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{23} } -func (x *SCQuitGame) GetOpCode() OpResultCode_Game { +func (x *QRoomInfo) GetGameFreeId() int32 { if x != nil { - return x.OpCode + return x.GameFreeId + } + return 0 +} + +func (x *QRoomInfo) GetGameId() int32 { + if x != nil { + return x.GameId + } + return 0 +} + +func (x *QRoomInfo) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *QRoomInfo) GetBaseCoin() int64 { + if x != nil { + return x.BaseCoin + } + return 0 +} + +func (x *QRoomInfo) GetLimitCoin() int64 { + if x != nil { + return x.LimitCoin + } + return 0 +} + +func (x *QRoomInfo) GetCurrNum() int32 { + if x != nil { + return x.CurrNum + } + return 0 +} + +func (x *QRoomInfo) GetMaxPlayer() int32 { + if x != nil { + return x.MaxPlayer + } + return 0 +} + +func (x *QRoomInfo) GetCreator() int32 { + if x != nil { + return x.Creator + } + return 0 +} + +func (x *QRoomInfo) GetCreateTs() int32 { + if x != nil { + return x.CreateTs + } + return 0 +} + +func (x *QRoomInfo) GetParams() []int32 { + if x != nil { + return x.Params + } + return nil +} + +//PACKET_SC_QUERYROOMINFO +type SCQueryRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GameIds []int32 `protobuf:"varint,1,rep,packed,name=GameIds,proto3" json:"GameIds,omitempty"` + GameSite int32 `protobuf:"varint,2,opt,name=GameSite,proto3" json:"GameSite,omitempty"` //1.初级 2.中级 3.高级 + RoomInfo []*QRoomInfo `protobuf:"bytes,3,rep,name=RoomInfo,proto3" json:"RoomInfo,omitempty"` //房间列表 + OpRetCode OpResultCode_Game `protobuf:"varint,4,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 +} + +func (x *SCQueryRoomInfo) Reset() { + *x = SCQueryRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCQueryRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCQueryRoomInfo) ProtoMessage() {} + +func (x *SCQueryRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[24] + 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 SCQueryRoomInfo.ProtoReflect.Descriptor instead. +func (*SCQueryRoomInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{24} +} + +func (x *SCQueryRoomInfo) GetGameIds() []int32 { + if x != nil { + return x.GameIds + } + return nil +} + +func (x *SCQueryRoomInfo) GetGameSite() int32 { + if x != nil { + return x.GameSite + } + return 0 +} + +func (x *SCQueryRoomInfo) GetRoomInfo() []*QRoomInfo { + if x != nil { + return x.RoomInfo + } + return nil +} + +func (x *SCQueryRoomInfo) GetOpRetCode() OpResultCode_Game { + if x != nil { + return x.OpRetCode } return OpResultCode_Game_OPRC_Sucess_Game } -func (x *SCQuitGame) GetId() int32 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *SCQuitGame) GetReason() int32 { - if x != nil { - return x.Reason - } - return 0 -} - -//PACKET_CS_UPLOADLOC -type CSUploadLoc struct { +type GameState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Longitude int32 `protobuf:"varint,1,opt,name=Longitude,proto3" json:"Longitude,omitempty"` //经度 - Latitude int32 `protobuf:"varint,2,opt,name=Latitude,proto3" json:"Latitude,omitempty"` //纬度 - City string `protobuf:"bytes,3,opt,name=City,proto3" json:"City,omitempty"` //城市 例:中国-河南省-郑州市 + GameFreeId int32 `protobuf:"varint,1,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` + Ts int64 `protobuf:"varint,2,opt,name=Ts,proto3" json:"Ts,omitempty"` + Sec int32 `protobuf:"varint,3,opt,name=Sec,proto3" json:"Sec,omitempty"` } -func (x *CSUploadLoc) Reset() { - *x = CSUploadLoc{} +func (x *GameState) Reset() { + *x = GameState{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[91] + mi := &file_game_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CSUploadLoc) String() string { +func (x *GameState) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CSUploadLoc) ProtoMessage() {} +func (*GameState) ProtoMessage() {} -func (x *CSUploadLoc) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[91] +func (x *GameState) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6424,61 +2596,58 @@ func (x *CSUploadLoc) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CSUploadLoc.ProtoReflect.Descriptor instead. -func (*CSUploadLoc) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{91} +// Deprecated: Use GameState.ProtoReflect.Descriptor instead. +func (*GameState) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{25} } -func (x *CSUploadLoc) GetLongitude() int32 { +func (x *GameState) GetGameFreeId() int32 { if x != nil { - return x.Longitude + return x.GameFreeId } return 0 } -func (x *CSUploadLoc) GetLatitude() int32 { +func (x *GameState) GetTs() int64 { if x != nil { - return x.Latitude + return x.Ts } return 0 } -func (x *CSUploadLoc) GetCity() string { +func (x *GameState) GetSec() int32 { if x != nil { - return x.City + return x.Sec } - return "" + return 0 } -//PACKET_SC_UPLOADLOC -type SCUploadLoc struct { +//PACKET_SC_GAMESTATE +type SCGameState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos int32 `protobuf:"varint,1,opt,name=Pos,proto3" json:"Pos,omitempty"` - Longitude int32 `protobuf:"varint,2,opt,name=Longitude,proto3" json:"Longitude,omitempty"` //经度 - Latitude int32 `protobuf:"varint,3,opt,name=Latitude,proto3" json:"Latitude,omitempty"` //纬度 - City string `protobuf:"bytes,4,opt,name=City,proto3" json:"City,omitempty"` //城市 例:中国-河南省-郑州市 + List []*GameState `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` } -func (x *SCUploadLoc) Reset() { - *x = SCUploadLoc{} +func (x *SCGameState) Reset() { + *x = SCGameState{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[92] + mi := &file_game_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SCUploadLoc) String() string { +func (x *SCGameState) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SCUploadLoc) ProtoMessage() {} +func (*SCGameState) ProtoMessage() {} -func (x *SCUploadLoc) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[92] +func (x *SCGameState) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6489,37 +2658,16 @@ func (x *SCUploadLoc) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SCUploadLoc.ProtoReflect.Descriptor instead. -func (*SCUploadLoc) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{92} +// Deprecated: Use SCGameState.ProtoReflect.Descriptor instead. +func (*SCGameState) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{26} } -func (x *SCUploadLoc) GetPos() int32 { +func (x *SCGameState) GetList() []*GameState { if x != nil { - return x.Pos + return x.List } - return 0 -} - -func (x *SCUploadLoc) GetLongitude() int32 { - if x != nil { - return x.Longitude - } - return 0 -} - -func (x *SCUploadLoc) GetLatitude() int32 { - if x != nil { - return x.Latitude - } - return 0 -} - -func (x *SCUploadLoc) GetCity() string { - if x != nil { - return x.City - } - return "" + return nil } //PACKET_CS_AUDIENCESIT @@ -6534,7 +2682,7 @@ type CSAudienceSit struct { func (x *CSAudienceSit) Reset() { *x = CSAudienceSit{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[93] + mi := &file_game_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6547,7 +2695,7 @@ func (x *CSAudienceSit) String() string { func (*CSAudienceSit) ProtoMessage() {} func (x *CSAudienceSit) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[93] + mi := &file_game_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6560,7 +2708,7 @@ func (x *CSAudienceSit) ProtoReflect() protoreflect.Message { // Deprecated: Use CSAudienceSit.ProtoReflect.Descriptor instead. func (*CSAudienceSit) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{93} + return file_game_proto_rawDescGZIP(), []int{27} } func (x *CSAudienceSit) GetRoomId() int32 { @@ -6583,7 +2731,7 @@ type SCAudienceSit struct { func (x *SCAudienceSit) Reset() { *x = SCAudienceSit{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[94] + mi := &file_game_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6596,7 +2744,7 @@ func (x *SCAudienceSit) String() string { func (*SCAudienceSit) ProtoMessage() {} func (x *SCAudienceSit) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[94] + mi := &file_game_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6609,7 +2757,7 @@ func (x *SCAudienceSit) ProtoReflect() protoreflect.Message { // Deprecated: Use SCAudienceSit.ProtoReflect.Descriptor instead. func (*SCAudienceSit) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{94} + return file_game_proto_rawDescGZIP(), []int{28} } func (x *SCAudienceSit) GetRoomId() int32 { @@ -6641,7 +2789,7 @@ type CSRecordAndNotice struct { func (x *CSRecordAndNotice) Reset() { *x = CSRecordAndNotice{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[95] + mi := &file_game_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6654,7 +2802,7 @@ func (x *CSRecordAndNotice) String() string { func (*CSRecordAndNotice) ProtoMessage() {} func (x *CSRecordAndNotice) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[95] + mi := &file_game_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6667,7 +2815,7 @@ func (x *CSRecordAndNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use CSRecordAndNotice.ProtoReflect.Descriptor instead. func (*CSRecordAndNotice) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{95} + return file_game_proto_rawDescGZIP(), []int{29} } func (x *CSRecordAndNotice) GetPageNo() int32 { @@ -6723,7 +2871,7 @@ type CommonNotice struct { func (x *CommonNotice) Reset() { *x = CommonNotice{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[96] + mi := &file_game_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6736,7 +2884,7 @@ func (x *CommonNotice) String() string { func (*CommonNotice) ProtoMessage() {} func (x *CommonNotice) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[96] + mi := &file_game_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6749,7 +2897,7 @@ func (x *CommonNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use CommonNotice.ProtoReflect.Descriptor instead. func (*CommonNotice) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{96} + return file_game_proto_rawDescGZIP(), []int{30} } func (x *CommonNotice) GetSort() int32 { @@ -6873,7 +3021,7 @@ type PlayerRecord struct { func (x *PlayerRecord) Reset() { *x = PlayerRecord{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[97] + mi := &file_game_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6886,7 +3034,7 @@ func (x *PlayerRecord) String() string { func (*PlayerRecord) ProtoMessage() {} func (x *PlayerRecord) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[97] + mi := &file_game_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6899,7 +3047,7 @@ func (x *PlayerRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerRecord.ProtoReflect.Descriptor instead. func (*PlayerRecord) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{97} + return file_game_proto_rawDescGZIP(), []int{31} } func (x *PlayerRecord) GetGameFreeid() int32 { @@ -6959,7 +3107,7 @@ type SCRecordAndNotice struct { func (x *SCRecordAndNotice) Reset() { *x = SCRecordAndNotice{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[98] + mi := &file_game_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6972,7 +3120,7 @@ func (x *SCRecordAndNotice) String() string { func (*SCRecordAndNotice) ProtoMessage() {} func (x *SCRecordAndNotice) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[98] + mi := &file_game_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6985,7 +3133,7 @@ func (x *SCRecordAndNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use SCRecordAndNotice.ProtoReflect.Descriptor instead. func (*SCRecordAndNotice) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{98} + return file_game_proto_rawDescGZIP(), []int{32} } func (x *SCRecordAndNotice) GetOpCode() OpResultCode_Game { @@ -7026,7 +3174,7 @@ type SCNoticeChange struct { func (x *SCNoticeChange) Reset() { *x = SCNoticeChange{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[99] + mi := &file_game_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7039,7 +3187,7 @@ func (x *SCNoticeChange) String() string { func (*SCNoticeChange) ProtoMessage() {} func (x *SCNoticeChange) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[99] + mi := &file_game_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7052,7 +3200,376 @@ func (x *SCNoticeChange) ProtoReflect() protoreflect.Message { // Deprecated: Use SCNoticeChange.ProtoReflect.Descriptor instead. func (*SCNoticeChange) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{99} + return file_game_proto_rawDescGZIP(), []int{33} +} + +//PACKET_CS_DESTROYROOM +type CSDestroyRoom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CSDestroyRoom) Reset() { + *x = CSDestroyRoom{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSDestroyRoom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSDestroyRoom) ProtoMessage() {} + +func (x *CSDestroyRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[34] + 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 CSDestroyRoom.ProtoReflect.Descriptor instead. +func (*CSDestroyRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{34} +} + +//PACKET_SC_DESTROYROOM +type SCDestroyRoom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间编号 + OpRetCode OpResultCode_Game `protobuf:"varint,2,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 + IsForce int32 `protobuf:"varint,3,opt,name=IsForce,proto3" json:"IsForce,omitempty"` //是否强制销毁 +} + +func (x *SCDestroyRoom) Reset() { + *x = SCDestroyRoom{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCDestroyRoom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCDestroyRoom) ProtoMessage() {} + +func (x *SCDestroyRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[35] + 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 SCDestroyRoom.ProtoReflect.Descriptor instead. +func (*SCDestroyRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{35} +} + +func (x *SCDestroyRoom) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *SCDestroyRoom) GetOpRetCode() OpResultCode_Game { + if x != nil { + return x.OpRetCode + } + return OpResultCode_Game_OPRC_Sucess_Game +} + +func (x *SCDestroyRoom) GetIsForce() int32 { + if x != nil { + return x.IsForce + } + return 0 +} + +//PACKET_CS_LEAVEROOM +//PACKET_CS_AUDIENCE_LEAVEROOM +//玩家离开房间,返回大厅 +type CSLeaveRoom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mode int32 `protobuf:"varint,1,opt,name=Mode,proto3" json:"Mode,omitempty"` //离开方式 0:退出 1:暂离(占着座位,返回大厅) +} + +func (x *CSLeaveRoom) Reset() { + *x = CSLeaveRoom{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSLeaveRoom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSLeaveRoom) ProtoMessage() {} + +func (x *CSLeaveRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[36] + 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 CSLeaveRoom.ProtoReflect.Descriptor instead. +func (*CSLeaveRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{36} +} + +func (x *CSLeaveRoom) GetMode() int32 { + if x != nil { + return x.Mode + } + return 0 +} + +//PACKET_SC_LEAVEROOM +type SCLeaveRoom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 + Reason int32 `protobuf:"varint,2,opt,name=Reason,proto3" json:"Reason,omitempty"` //原因 0:主动退出 1:被踢出 + RoomId int32 `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间ID + Mode int32 `protobuf:"varint,4,opt,name=Mode,proto3" json:"Mode,omitempty"` +} + +func (x *SCLeaveRoom) Reset() { + *x = SCLeaveRoom{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCLeaveRoom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCLeaveRoom) ProtoMessage() {} + +func (x *SCLeaveRoom) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[37] + 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 SCLeaveRoom.ProtoReflect.Descriptor instead. +func (*SCLeaveRoom) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{37} +} + +func (x *SCLeaveRoom) GetOpRetCode() OpResultCode_Game { + if x != nil { + return x.OpRetCode + } + return OpResultCode_Game_OPRC_Sucess_Game +} + +func (x *SCLeaveRoom) GetReason() int32 { + if x != nil { + return x.Reason + } + return 0 +} + +func (x *SCLeaveRoom) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *SCLeaveRoom) GetMode() int32 { + if x != nil { + return x.Mode + } + return 0 +} + +//PACKET_CS_FORCESTART +type CSForceStart struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CSForceStart) Reset() { + *x = CSForceStart{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSForceStart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSForceStart) ProtoMessage() {} + +func (x *CSForceStart) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[38] + 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 CSForceStart.ProtoReflect.Descriptor instead. +func (*CSForceStart) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{38} +} + +//PACKET_SC_FORCESTART +type SCForceStart struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpRetCode OpResultCode_Game `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=gamehall.OpResultCode_Game" json:"OpRetCode,omitempty"` //结果 +} + +func (x *SCForceStart) Reset() { + *x = SCForceStart{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCForceStart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCForceStart) ProtoMessage() {} + +func (x *SCForceStart) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[39] + 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 SCForceStart.ProtoReflect.Descriptor instead. +func (*SCForceStart) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{39} +} + +func (x *SCForceStart) GetOpRetCode() OpResultCode_Game { + if x != nil { + return x.OpRetCode + } + return OpResultCode_Game_OPRC_Sucess_Game +} + +//玩家设置标记 +//PACKET_CS_PLAYER_SWITCHFLAG +type CSPlayerSwithFlag struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Flag int32 `protobuf:"varint,1,opt,name=Flag,proto3" json:"Flag,omitempty"` + Mark int32 `protobuf:"varint,2,opt,name=Mark,proto3" json:"Mark,omitempty"` //1:设置 0:取消 +} + +func (x *CSPlayerSwithFlag) Reset() { + *x = CSPlayerSwithFlag{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSPlayerSwithFlag) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSPlayerSwithFlag) ProtoMessage() {} + +func (x *CSPlayerSwithFlag) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[40] + 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 CSPlayerSwithFlag.ProtoReflect.Descriptor instead. +func (*CSPlayerSwithFlag) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{40} +} + +func (x *CSPlayerSwithFlag) GetFlag() int32 { + if x != nil { + return x.Flag + } + return 0 +} + +func (x *CSPlayerSwithFlag) GetMark() int32 { + if x != nil { + return x.Mark + } + return 0 } // PACKET_CSRoomEvent @@ -7069,7 +3586,7 @@ type CSRoomEvent struct { func (x *CSRoomEvent) Reset() { *x = CSRoomEvent{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[100] + mi := &file_game_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7082,7 +3599,7 @@ func (x *CSRoomEvent) String() string { func (*CSRoomEvent) ProtoMessage() {} func (x *CSRoomEvent) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[100] + mi := &file_game_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7095,7 +3612,7 @@ func (x *CSRoomEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use CSRoomEvent.ProtoReflect.Descriptor instead. func (*CSRoomEvent) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{100} + return file_game_proto_rawDescGZIP(), []int{41} } func (x *CSRoomEvent) GetTp() int32 { @@ -7135,7 +3652,7 @@ type SCRoomEvent struct { func (x *SCRoomEvent) Reset() { *x = SCRoomEvent{} if protoimpl.UnsafeEnabled { - mi := &file_game_proto_msgTypes[101] + mi := &file_game_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7148,7 +3665,7 @@ func (x *SCRoomEvent) String() string { func (*SCRoomEvent) ProtoMessage() {} func (x *SCRoomEvent) ProtoReflect() protoreflect.Message { - mi := &file_game_proto_msgTypes[101] + mi := &file_game_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7161,7 +3678,7 @@ func (x *SCRoomEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use SCRoomEvent.ProtoReflect.Descriptor instead. func (*SCRoomEvent) Descriptor() ([]byte, []int) { - return file_game_proto_rawDescGZIP(), []int{101} + return file_game_proto_rawDescGZIP(), []int{42} } func (x *SCRoomEvent) GetOpCode() OpResultCode_Game { @@ -7206,555 +3723,562 @@ func (x *SCRoomEvent) GetTs() int64 { return 0 } +type ItemInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // id + Num int32 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` // 数量 +} + +func (x *ItemInfo) Reset() { + *x = ItemInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ItemInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ItemInfo) ProtoMessage() {} + +func (x *ItemInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[43] + 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 ItemInfo.ProtoReflect.Descriptor instead. +func (*ItemInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{43} +} + +func (x *ItemInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ItemInfo) GetNum() int32 { + if x != nil { + return x.Num + } + return 0 +} + +// PACKET_CSTouchType +// 每10秒发送一次,保持更新 +type CSTouchType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Tp DataType `protobuf:"varint,1,opt,name=Tp,proto3,enum=gamehall.DataType" json:"Tp,omitempty"` // 保持更新类型 + // Tp: Params + // 1: 房间配置id + Params []int32 `protobuf:"varint,3,rep,packed,name=Params,proto3" json:"Params,omitempty"` +} + +func (x *CSTouchType) Reset() { + *x = CSTouchType{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSTouchType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSTouchType) ProtoMessage() {} + +func (x *CSTouchType) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[44] + 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 CSTouchType.ProtoReflect.Descriptor instead. +func (*CSTouchType) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{44} +} + +func (x *CSTouchType) GetTp() DataType { + if x != nil { + return x.Tp + } + return DataType_Zero +} + +func (x *CSTouchType) GetParams() []int32 { + if x != nil { + return x.Params + } + return nil +} + +type RoomConfigInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 配置id + Name string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"` // 配置名称 + RoomType int32 `protobuf:"varint,4,opt,name=RoomType,proto3" json:"RoomType,omitempty"` // 房间类型id, RoomTypeInfo.Id + On int32 `protobuf:"varint,5,opt,name=On,proto3" json:"On,omitempty"` // 开关 1开启 2关闭 + SortId int32 `protobuf:"varint,6,opt,name=SortId,proto3" json:"SortId,omitempty"` // 排序ID + Cost []*ItemInfo `protobuf:"bytes,7,rep,name=Cost,proto3" json:"Cost,omitempty"` // 进入房间消耗 + Reward []*ItemInfo `protobuf:"bytes,8,rep,name=Reward,proto3" json:"Reward,omitempty"` // 进入房间奖励 + OnChannelName []string `protobuf:"bytes,9,rep,name=OnChannelName,proto3" json:"OnChannelName,omitempty"` // 开启的渠道名称 + GameFreeId []int32 `protobuf:"varint,10,rep,packed,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` // 场次id + Round []int32 `protobuf:"varint,11,rep,packed,name=Round,proto3" json:"Round,omitempty"` // 局数 + PlayerNum []int32 `protobuf:"varint,12,rep,packed,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` // 人数 + NeedPassword int32 `protobuf:"varint,13,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` // 是否需要密码 1是 2否 3自定义 + CostType int32 `protobuf:"varint,14,opt,name=CostType,proto3" json:"CostType,omitempty"` // 消耗类型 1AA 2房主 3自定义 + Voice int32 `protobuf:"varint,15,opt,name=Voice,proto3" json:"Voice,omitempty"` // 是否开启语音 1是 2否 3自定义 + ImageURI string `protobuf:"bytes,16,opt,name=ImageURI,proto3" json:"ImageURI,omitempty"` // 奖励图片 +} + +func (x *RoomConfigInfo) Reset() { + *x = RoomConfigInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoomConfigInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoomConfigInfo) ProtoMessage() {} + +func (x *RoomConfigInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[45] + 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 RoomConfigInfo.ProtoReflect.Descriptor instead. +func (*RoomConfigInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{45} +} + +func (x *RoomConfigInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *RoomConfigInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoomConfigInfo) GetRoomType() int32 { + if x != nil { + return x.RoomType + } + return 0 +} + +func (x *RoomConfigInfo) GetOn() int32 { + if x != nil { + return x.On + } + return 0 +} + +func (x *RoomConfigInfo) GetSortId() int32 { + if x != nil { + return x.SortId + } + return 0 +} + +func (x *RoomConfigInfo) GetCost() []*ItemInfo { + if x != nil { + return x.Cost + } + return nil +} + +func (x *RoomConfigInfo) GetReward() []*ItemInfo { + if x != nil { + return x.Reward + } + return nil +} + +func (x *RoomConfigInfo) GetOnChannelName() []string { + if x != nil { + return x.OnChannelName + } + return nil +} + +func (x *RoomConfigInfo) GetGameFreeId() []int32 { + if x != nil { + return x.GameFreeId + } + return nil +} + +func (x *RoomConfigInfo) GetRound() []int32 { + if x != nil { + return x.Round + } + return nil +} + +func (x *RoomConfigInfo) GetPlayerNum() []int32 { + if x != nil { + return x.PlayerNum + } + return nil +} + +func (x *RoomConfigInfo) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *RoomConfigInfo) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *RoomConfigInfo) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +func (x *RoomConfigInfo) GetImageURI() string { + if x != nil { + return x.ImageURI + } + return "" +} + +type RoomTypeInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // id + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` // 类型名称 + On int32 `protobuf:"varint,3,opt,name=On,proto3" json:"On,omitempty"` // 开关 1开启 2关闭 + SortId int32 `protobuf:"varint,4,opt,name=SortId,proto3" json:"SortId,omitempty"` // 排序ID + List []*RoomConfigInfo `protobuf:"bytes,5,rep,name=List,proto3" json:"List,omitempty"` // 房间配置列表 +} + +func (x *RoomTypeInfo) Reset() { + *x = RoomTypeInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoomTypeInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoomTypeInfo) ProtoMessage() {} + +func (x *RoomTypeInfo) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[46] + 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 RoomTypeInfo.ProtoReflect.Descriptor instead. +func (*RoomTypeInfo) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{46} +} + +func (x *RoomTypeInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *RoomTypeInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoomTypeInfo) GetOn() int32 { + if x != nil { + return x.On + } + return 0 +} + +func (x *RoomTypeInfo) GetSortId() int32 { + if x != nil { + return x.SortId + } + return 0 +} + +func (x *RoomTypeInfo) GetList() []*RoomConfigInfo { + if x != nil { + return x.List + } + return nil +} + +// PACKET_CSRoomConfig +type CSRoomConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CSRoomConfig) Reset() { + *x = CSRoomConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSRoomConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSRoomConfig) ProtoMessage() {} + +func (x *CSRoomConfig) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[47] + 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 CSRoomConfig.ProtoReflect.Descriptor instead. +func (*CSRoomConfig) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{47} +} + +// PACKET_SCRoomConfig 竞技馆房间配置 +type SCRoomConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + List []*RoomTypeInfo `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` +} + +func (x *SCRoomConfig) Reset() { + *x = SCRoomConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_game_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCRoomConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCRoomConfig) ProtoMessage() {} + +func (x *SCRoomConfig) ProtoReflect() protoreflect.Message { + mi := &file_game_proto_msgTypes[48] + 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 SCRoomConfig.ProtoReflect.Descriptor instead. +func (*SCRoomConfig) Descriptor() ([]byte, []int) { + return file_game_proto_rawDescGZIP(), []int{48} +} + +func (x *SCRoomConfig) GetList() []*RoomTypeInfo { + if x != nil { + return x.List + } + return nil +} + var File_game_proto protoreflect.FileDescriptor var file_game_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x22, 0x25, 0x0a, 0x0b, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x48, 0x61, 0x6c, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x22, 0x60, 0x0a, - 0x0b, 0x53, 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x48, 0x61, 0x6c, 0x6c, 0x12, 0x16, 0x0a, 0x06, - 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, - 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, + 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x22, 0xac, 0x01, 0x0a, 0x0c, 0x43, 0x53, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x4d, 0x61, 0x78, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, + 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x0c, 0x53, 0x43, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x4d, 0x61, 0x78, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, - 0x0d, 0x0a, 0x0b, 0x43, 0x53, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x22, 0x25, - 0x0a, 0x0b, 0x53, 0x43, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x12, 0x16, 0x0a, - 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, - 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x22, 0xb8, 0x01, 0x0a, 0x0e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, - 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x0b, - 0x48, 0x65, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x56, 0x49, 0x50, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x49, 0x50, - 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x12, 0x32, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x73, 0x22, 0x28, 0x0a, 0x0e, 0x43, 0x53, 0x48, 0x61, 0x6c, 0x6c, 0x52, 0x6f, - 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x22, 0x46, - 0x0a, 0x08, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x22, 0x3f, 0x0a, 0x0d, 0x48, 0x61, 0x6c, 0x6c, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x2e, 0x0a, 0x08, 0x48, 0x61, 0x6c, 0x6c, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x48, - 0x61, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0xe4, 0x01, 0x0a, 0x0e, 0x53, 0x43, 0x48, 0x61, - 0x6c, 0x6c, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, - 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, - 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, - 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x41, 0x64, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x41, 0x64, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x2e, - 0x0a, 0x08, 0x48, 0x61, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x48, 0x61, 0x6c, 0x6c, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x48, 0x61, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0x5d, - 0x0a, 0x11, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x3d, 0x0a, - 0x11, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x5d, 0x0a, 0x11, - 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xac, 0x01, 0x0a, 0x0c, - 0x43, 0x53, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, - 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, - 0x0a, 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, - 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x0c, 0x53, - 0x43, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, - 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, - 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, - 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x53, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, - 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x22, 0x7c, 0x0a, 0x0d, 0x53, 0x43, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x39, - 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, - 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x46, - 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x49, 0x73, 0x46, 0x6f, - 0x72, 0x63, 0x65, 0x22, 0x3d, 0x0a, 0x0b, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, - 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x22, 0xdc, 0x01, 0x0a, 0x0b, 0x53, 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, - 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, - 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x6f, - 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x39, - 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, - 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, - 0x62, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, - 0x64, 0x22, 0x21, 0x0a, 0x0b, 0x43, 0x53, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, - 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x0b, 0x53, 0x43, 0x4c, 0x65, 0x61, 0x76, 0x65, - 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, - 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, - 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4d, - 0x6f, 0x64, 0x65, 0x22, 0x72, 0x0a, 0x0c, 0x43, 0x53, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x52, - 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, - 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, - 0x56, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xfd, 0x02, 0x0a, 0x0c, 0x53, 0x43, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, - 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x22, 0x0a, - 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, 0x56, 0x65, - 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x12, - 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x56, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x22, 0x38, 0x0a, 0x0c, 0x43, 0x53, 0x47, 0x65, 0x74, - 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, - 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0x84, 0x03, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, - 0x14, 0x0a, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x52, 0x65, 0x63, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x52, 0x05, 0x44, - 0x61, 0x74, 0x61, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x02, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x65, 0x4d, 0x6f, 0x64, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x46, 0x65, 0x65, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, 0x72, 0x64, - 0x43, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x43, - 0x61, 0x72, 0x64, 0x43, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x0c, 0x53, 0x43, - 0x47, 0x65, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, 0x25, 0x0a, 0x04, 0x52, 0x65, - 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, - 0x61, 0x6c, 0x6c, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x52, 0x04, 0x52, 0x65, 0x63, - 0x73, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x56, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0a, 0x43, - 0x53, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x75, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x47, 0x0a, 0x0a, 0x53, 0x43, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x53, 0x75, 0x63, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, - 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x22, 0x49, 0x0a, 0x0c, 0x53, 0x43, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x41, 0x0a, 0x0d, 0x43, - 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x22, 0x3b, - 0x0a, 0x11, 0x43, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x77, 0x69, 0x74, 0x68, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x61, 0x72, 0x6b, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4d, 0x61, 0x72, 0x6b, 0x22, 0x31, 0x0a, 0x09, 0x43, - 0x53, 0x53, 0x68, 0x6f, 0x70, 0x42, 0x75, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xc2, - 0x01, 0x0a, 0x09, 0x53, 0x43, 0x53, 0x68, 0x6f, 0x70, 0x42, 0x75, 0x79, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, - 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, - 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, - 0x08, 0x47, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x47, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x69, - 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x69, 0x6e, - 0x4e, 0x75, 0x6d, 0x22, 0x62, 0x0a, 0x0a, 0x43, 0x53, 0x4a, 0x6f, 0x69, 0x6e, 0x47, 0x61, 0x6d, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x67, 0x72, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x41, 0x67, 0x72, 0x65, 0x65, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x43, 0x4a, 0x6f, - 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x22, 0x63, 0x0a, 0x0d, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x67, - 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x67, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x67, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x0d, 0x53, 0x43, 0x45, - 0x6e, 0x74, 0x65, 0x72, 0x44, 0x67, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, - 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, - 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x72, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x72, - 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x67, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x67, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x53, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x44, 0x67, 0x47, 0x61, 0x6d, 0x65, 0x22, 0x4a, 0x0a, 0x0d, 0x53, 0x43, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x44, 0x67, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x4f, - 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, - 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x2f, 0x0a, 0x17, 0x43, 0x53, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, 0x22, 0x7e, 0x0a, 0x0c, 0x54, 0x68, 0x72, 0x69, 0x64, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x69, 0x64, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0f, 0x54, 0x68, 0x72, 0x69, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x17, 0x53, 0x43, 0x54, 0x68, 0x72, - 0x69, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x52, 0x65, 0x71, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x08, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x61, 0x6d, - 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x54, 0x68, 0x72, 0x69, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x08, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x5c, 0x0a, 0x16, - 0x43, 0x53, 0x54, 0x68, 0x72, 0x69, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x72, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x54, 0x6f, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x6f, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x16, 0x53, - 0x43, 0x54, 0x68, 0x72, 0x69, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, - 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x32, 0x0a, 0x08, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x54, 0x68, - 0x72, 0x69, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x08, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x22, 0x34, 0x0a, 0x10, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, - 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x54, - 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0xc1, 0x01, 0x0a, 0x10, 0x53, - 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x12, - 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, - 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x34, 0x0a, 0x15, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x4f, 0x72, 0x69, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0x12, - 0x0a, 0x10, 0x43, 0x53, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, - 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x10, 0x53, 0x43, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x54, 0x68, 0x72, - 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, + 0x59, 0x0a, 0x0b, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0xfc, 0x01, 0x0a, 0x0b, 0x53, + 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x43, 0x53, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x22, 0x58, 0x0a, 0x0e, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, - 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x54, 0x68, 0x72, - 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa4, - 0x01, 0x0a, 0x12, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x69, 0x64, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, - 0x54, 0x68, 0x72, 0x69, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x12, - 0x2c, 0x0a, 0x11, 0x54, 0x68, 0x72, 0x69, 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, - 0x09, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x73, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x68, 0x72, 0x69, - 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, - 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, - 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x52, 0x0d, 0x47, 0x61, 0x6d, 0x65, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x53, 0x54, 0x68, - 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x22, 0x69, 0x0a, 0x18, 0x53, 0x43, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, - 0x61, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, - 0x5a, 0x0a, 0x1d, 0x53, 0x43, 0x54, 0x68, 0x72, 0x69, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x4d, 0x0a, 0x13, 0x43, - 0x53, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x53, - 0x43, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, - 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, - 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xd7, 0x01, - 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, - 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, - 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, - 0x09, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x53, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x47, 0x0a, 0x14, 0x53, 0x43, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, - 0x6c, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0x37, 0x0a, 0x17, 0x43, 0x53, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, - 0x65, 0x22, 0xac, 0x01, 0x0a, 0x12, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, - 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x65, 0x65, - 0x22, 0x6b, 0x0a, 0x17, 0x53, 0x43, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x44, 0x61, 0x74, - 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, - 0x61, 0x6c, 0x6c, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0x2e, 0x0a, - 0x14, 0x43, 0x53, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x7f, 0x0a, - 0x14, 0x53, 0x43, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x39, 0x0a, - 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, - 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x75, - 0x0a, 0x0f, 0x43, 0x53, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, - 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, - 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x9b, 0x02, 0x0a, 0x09, 0x51, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x1c, 0x0a, 0x09, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x78, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x78, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, - 0x1a, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x0f, 0x53, 0x43, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x2f, 0x0a, - 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x51, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x39, - 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0c, 0x43, 0x53, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x6b, + 0x56, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, + 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xfd, 0x02, + 0x0a, 0x0c, 0x53, 0x43, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x39, + 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, - 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x47, 0x0a, 0x0d, 0x43, 0x53, 0x47, - 0x61, 0x6d, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x72, 0x45, 0x6e, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x72, 0x45, - 0x6e, 0x64, 0x22, 0x7b, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4e, - 0x65, 0x77, 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4e, 0x65, 0x77, - 0x4c, 0x6f, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x22, - 0x3c, 0x0a, 0x0d, 0x53, 0x43, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x2b, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x75, - 0x62, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x4d, 0x0a, - 0x09, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x63, 0x22, 0x36, 0x0a, 0x0b, - 0x53, 0x43, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x4c, - 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x04, - 0x4c, 0x69, 0x73, 0x74, 0x22, 0x43, 0x0a, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3c, 0x0a, 0x0d, 0x53, 0x43, 0x4c, - 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x61, 0x6d, 0x65, - 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0x2e, 0x0a, 0x0c, 0x43, 0x53, 0x4c, 0x6f, 0x74, - 0x74, 0x65, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x0a, 0x4c, 0x6f, 0x74, 0x74, 0x65, - 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, - 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, - 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, - 0x6e, 0x22, 0x58, 0x0a, 0x0c, 0x53, 0x43, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x4c, 0x6f, - 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4c, 0x6f, 0x74, 0x74, 0x65, - 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x52, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x0d, - 0x53, 0x43, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, - 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0xe3, 0x03, 0x0a, 0x0b, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, + 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, 0x64, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x6f, 0x64, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, + 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, 0x56, + 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, + 0x56, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, + 0x56, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x52, 0x65, + 0x73, 0x56, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x52, + 0x65, 0x73, 0x56, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x22, 0x85, 0x01, + 0x0a, 0x0b, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, + 0x65, 0x73, 0x56, 0x65, 0x72, 0x22, 0xf2, 0x01, 0x0a, 0x0b, 0x53, 0x43, 0x45, 0x6e, 0x74, 0x65, + 0x72, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, + 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, + 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4f, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, + 0x56, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, + 0x6b, 0x56, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, + 0x6b, 0x56, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x52, + 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, + 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x22, 0x3c, 0x0a, 0x0a, 0x43, 0x53, + 0x51, 0x75, 0x69, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x73, 0x41, 0x75, + 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x49, 0x73, + 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x69, 0x0a, 0x0a, 0x53, 0x43, 0x51, 0x75, + 0x69, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, + 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x22, 0xe3, 0x03, 0x0a, 0x0b, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, @@ -7812,407 +4336,464 @@ var file_game_proto_rawDesc = []byte{ 0x74, 0x72, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x08, 0x52, - 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x43, 0x53, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, - 0x16, 0x0a, 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x56, 0x65, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x22, - 0xf2, 0x01, 0x0a, 0x0b, 0x53, 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x12, - 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x12, 0x22, - 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, 0x56, 0x65, 0x72, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x70, 0x6b, 0x56, - 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, - 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x56, 0x65, 0x72, 0x22, 0x3c, 0x0a, 0x0a, 0x43, 0x53, 0x51, 0x75, 0x69, 0x74, 0x47, 0x61, - 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x73, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x49, 0x73, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x22, 0x69, 0x0a, 0x0a, 0x53, 0x43, 0x51, 0x75, 0x69, 0x74, 0x47, 0x61, 0x6d, 0x65, - 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x5b, 0x0a, - 0x0b, 0x43, 0x53, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x6f, 0x63, 0x12, 0x1c, 0x0a, 0x09, - 0x4c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x4c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x61, - 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x61, - 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x69, 0x74, 0x79, 0x22, 0x6d, 0x0a, 0x0b, 0x53, 0x43, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x6f, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4c, - 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x4c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x61, 0x74, - 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x61, 0x74, - 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x69, 0x74, 0x79, 0x22, 0x27, 0x0a, 0x0d, 0x43, 0x53, 0x41, - 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x0d, 0x53, 0x43, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, - 0x53, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x4f, - 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x22, 0x77, 0x0a, 0x11, 0x43, 0x53, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x4e, - 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4f, 0x70, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4f, 0x70, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9a, 0x03, 0x0a, 0x0c, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6f, - 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, - 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x54, 0x79, - 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x1a, - 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, - 0x4c, 0x6f, 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x4c, 0x6f, - 0x6f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, - 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0xc0, 0x01, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x11, 0x53, 0x43, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, - 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x2c, 0x0a, 0x05, 0x47, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x05, 0x47, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x47, 0x6c, 0x69, 0x73, 0x74, 0x54, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x07, 0x47, 0x6c, 0x69, 0x73, 0x74, 0x54, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x53, 0x43, 0x4e, 0x6f, - 0x74, 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x4d, 0x0a, 0x0b, 0x43, 0x53, - 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0xa4, 0x01, 0x0a, 0x0b, 0x53, 0x43, - 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, + 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x83, 0x02, 0x0a, 0x13, 0x43, 0x53, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, + 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, + 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, + 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, + 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x22, 0xf2, 0x02, + 0x0a, 0x13, 0x53, 0x43, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, + 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, + 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x22, 0x92, 0x01, 0x0a, 0x14, 0x43, 0x53, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x52, + 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, + 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x59, 0x0a, 0x11, 0x50, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x6c, 0x65, + 0x49, 0x64, 0x22, 0xa4, 0x03, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x22, + 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, + 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x72, + 0x4e, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, + 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x35, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x0d, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x50, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x57, 0x0a, 0x14, 0x53, 0x43, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, + 0x70, 0x12, 0x2f, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x50, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x44, 0x61, 0x74, + 0x61, 0x73, 0x22, 0x75, 0x0a, 0x0f, 0x43, 0x53, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x6f, 0x6f, + 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x9b, 0x02, 0x0a, 0x09, 0x51, 0x52, + 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x42, 0x61, 0x73, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4d, + 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x0f, 0x53, 0x43, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x47, + 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x74, + 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x51, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, + 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, + 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x4d, 0x0a, + 0x09, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, + 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x63, 0x22, 0x36, 0x0a, 0x0b, + 0x53, 0x43, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x61, 0x6d, 0x65, + 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x0a, 0x0d, 0x43, 0x53, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, + 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5c, 0x0a, + 0x0d, 0x53, 0x43, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, + 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x77, 0x0a, 0x11, 0x43, + 0x53, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x50, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x67, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4f, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x4f, 0x70, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x9a, 0x03, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, + 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x74, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x79, 0x70, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x54, 0x79, 0x70, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x22, 0x0a, + 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x74, + 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f, 0x74, + 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x4c, 0x6f, 0x6f, 0x70, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x4c, 0x6f, 0x6f, 0x70, 0x12, 0x1a, 0x0a, + 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, + 0x6c, 0x22, 0xc0, 0x01, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x47, + 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x54, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x54, 0x79, 0x70, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x4f, 0x70, + 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, + 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x2a, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, + 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x47, + 0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x61, 0x6d, + 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x05, 0x47, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x6c, 0x69, + 0x73, 0x74, 0x54, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x47, 0x6c, 0x69, 0x73, + 0x74, 0x54, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x53, 0x43, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x53, 0x44, 0x65, 0x73, 0x74, 0x72, + 0x6f, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x22, 0x7c, 0x0a, 0x0d, 0x53, 0x43, 0x44, 0x65, 0x73, 0x74, + 0x72, 0x6f, 0x79, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, + 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, + 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, + 0x46, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x49, 0x73, 0x46, + 0x6f, 0x72, 0x63, 0x65, 0x22, 0x21, 0x0a, 0x0b, 0x43, 0x53, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, + 0x6f, 0x6f, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x8c, 0x01, 0x0a, 0x0b, 0x53, 0x43, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, + 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x46, 0x6f, 0x72, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x22, 0x49, 0x0a, 0x0c, 0x53, 0x43, 0x46, 0x6f, 0x72, 0x63, + 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x54, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, - 0x2a, 0xe6, 0x09, 0x0a, 0x11, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, - 0x75, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0x01, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, 0x6f, - 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xf8, 0x07, 0x12, 0x1b, - 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x6f, 0x74, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xf9, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, - 0x64, 0x10, 0xfa, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfb, 0x07, 0x12, - 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x61, 0x64, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfc, 0x07, 0x12, 0x1b, 0x0a, 0x16, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, - 0x67, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfe, 0x07, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x49, 0x6e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0x80, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x6f, 0x6e, 0x65, 0x79, - 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x90, - 0x08, 0x12, 0x2c, 0x0a, 0x27, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, - 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x92, 0x08, 0x12, - 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4f, 0x6e, 0x6c, 0x79, 0x41, 0x6c, 0x6c, 0x6f, - 0x77, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x93, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x94, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x95, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6f, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x5f, 0x47, 0x61, - 0x6d, 0x65, 0x10, 0x98, 0x08, 0x12, 0x23, 0x0a, 0x1e, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x57, 0x61, 0x74, 0x63, 0x68, - 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9a, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x61, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9d, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, - 0x5f, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x61, 0x69, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9e, 0x08, 0x12, 0x1b, 0x0a, 0x16, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x61, 0x6d, 0x65, 0x49, 0x70, 0x46, 0x6f, 0x72, 0x62, 0x69, - 0x64, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9f, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x5f, - 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa0, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x6f, 0x4d, 0x6f, 0x72, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x10, 0xa2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x6e, 0x4f, 0x74, - 0x68, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x67, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0xa3, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4f, 0x70, 0x59, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xba, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x46, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xc9, 0x08, 0x12, 0x24, 0x0a, 0x1f, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0xca, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, - 0x6f, 0x74, 0x45, 0x78, 0x69, 0x74, 0x10, 0xcb, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, 0x53, 0x63, 0x65, 0x6e, - 0x63, 0x65, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb3, 0x08, 0x12, 0x22, 0x0a, - 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb4, - 0x08, 0x12, 0x26, 0x0a, 0x21, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, - 0x69, 0x63, 0x65, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x4d, 0x61, - 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb5, 0x08, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, 0x72, 0x65, 0x47, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x43, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0xb6, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x50, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x47, 0x61, - 0x6d, 0x65, 0x10, 0xc8, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, - 0x6f, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x10, 0xcf, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x75, 0x73, 0x74, - 0x42, 0x69, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, - 0x65, 0x10, 0xd9, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x70, 0x72, 0x63, 0x5f, 0x43, 0x6c, 0x75, - 0x62, 0x5f, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x73, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x47, 0x61, - 0x6d, 0x65, 0x10, 0x9f, 0x27, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, - 0x5f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, - 0xa8, 0x46, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa9, 0x46, 0x12, 0x19, - 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x45, 0x72, - 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xaa, 0x46, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, - 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xab, 0x46, 0x12, 0x1c, 0x0a, 0x17, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x73, - 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb2, 0x46, 0x2a, 0xd0, 0x17, 0x0a, 0x10, 0x47, 0x61, - 0x6d, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6c, - 0x6c, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x98, - 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4a, - 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x99, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, - 0x4f, 0x4d, 0x10, 0x9a, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9b, 0x11, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, - 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9c, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, - 0x4d, 0x10, 0x9d, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9e, 0x11, 0x12, - 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x45, 0x54, - 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9f, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, - 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xa0, 0x11, 0x12, 0x18, 0x0a, - 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa1, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa2, - 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, - 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa3, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, - 0x10, 0xa4, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x43, 0x41, 0x52, 0x44, 0x47, 0x41, 0x49, 0x4e, 0x57, 0x41, 0x59, 0x10, 0xa5, 0x11, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x53, - 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa6, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, - 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, - 0x41, 0x53, 0x4b, 0x43, 0x48, 0x47, 0x10, 0xa8, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x43, 0x4f, 0x4d, 0x50, 0x4c, - 0x45, 0x54, 0x45, 0x10, 0xa9, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x44, 0x45, 0x4c, 0x10, 0xaa, 0x11, 0x12, 0x1c, - 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x43, 0x4b, - 0x44, 0x52, 0x41, 0x57, 0x50, 0x52, 0x49, 0x5a, 0x45, 0x10, 0xab, 0x11, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x44, 0x52, - 0x41, 0x57, 0x50, 0x52, 0x49, 0x5a, 0x45, 0x10, 0xac, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xaf, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xb0, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xb1, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, 0x10, - 0xb2, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, 0x10, 0xb3, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0xb4, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x47, 0x45, 0x54, 0x4c, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, 0x49, - 0x44, 0x53, 0x10, 0xb5, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x4c, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, - 0x49, 0x44, 0x53, 0x10, 0xb6, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x10, 0xb7, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, - 0xb8, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x10, 0xb9, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc0, 0x11, 0x12, 0x18, 0x0a, - 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc1, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc2, - 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, - 0x45, 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc3, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, - 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc4, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, - 0x53, 0x54, 0x10, 0xc5, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, - 0x45, 0x52, 0x10, 0xc6, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, - 0x56, 0x45, 0x10, 0xc7, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x43, 0x48, 0x41, 0x4e, - 0x47, 0x10, 0xc8, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4e, 0x55, 0x4d, 0x10, - 0xc9, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x42, 0x55, 0x4c, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xca, 0x11, - 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x42, 0x55, - 0x4c, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xcb, 0x11, 0x12, 0x1f, - 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, - 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcc, 0x11, 0x12, - 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x55, 0x53, - 0x54, 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcd, 0x11, - 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, - 0x54, 0x45, 0x52, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xce, 0x11, 0x12, 0x1a, 0x0a, 0x15, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x44, - 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xcf, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x44, 0x47, 0x47, 0x41, 0x4d, - 0x45, 0x10, 0xd0, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd1, 0x11, - 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x41, 0x4e, 0x53, 0x57, - 0x45, 0x52, 0x10, 0xd2, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, 0x49, 0x43, 0x10, 0xd3, 0x11, 0x12, 0x25, 0x0a, 0x20, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, - 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, 0x49, 0x43, - 0x10, 0xd4, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0xd5, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, - 0x4e, 0x54, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0xd6, 0x11, 0x12, 0x1d, 0x0a, - 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd7, 0x11, 0x12, 0x1d, 0x0a, 0x18, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x54, - 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd8, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, - 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd9, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, 0x52, - 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xda, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, - 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdb, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x4c, 0x49, - 0x53, 0x54, 0x10, 0xdc, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, - 0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xdd, 0x11, 0x12, 0x25, 0x0a, 0x20, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, - 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, - 0x10, 0xde, 0x11, 0x12, 0x2a, 0x0a, 0x25, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, - 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xdf, 0x11, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe0, - 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, + 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x22, 0x3b, 0x0a, 0x11, 0x43, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x77, 0x69, + 0x74, 0x68, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x61, + 0x72, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4d, 0x61, 0x72, 0x6b, 0x22, 0x4d, + 0x0a, 0x0b, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x18, 0x0a, + 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0xa4, 0x01, + 0x0a, 0x0b, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, + 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, + 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x54, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x50, 0x6f, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x02, 0x54, 0x73, 0x22, 0x2c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, + 0x75, 0x6d, 0x22, 0x49, 0x0a, 0x0b, 0x43, 0x53, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x22, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, + 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x02, 0x54, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xb8, 0x03, + 0x0a, 0x0e, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, + 0x6c, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, + 0x12, 0x2a, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, + 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x65, + 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, + 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, + 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x22, 0x88, 0x01, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x4f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, + 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x52, + 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x22, 0x3a, 0x0a, 0x0c, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x52, 0x6f, 0x6f, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, + 0x98, 0x0a, 0x0a, 0x11, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x01, + 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, 0x6f, 0x74, + 0x45, 0x78, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xf8, 0x07, 0x12, 0x1b, 0x0a, + 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xf9, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, + 0x10, 0xfa, 0x07, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfb, 0x07, 0x12, 0x1b, + 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x61, 0x64, 0x45, 0x78, + 0x69, 0x73, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfc, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xfe, 0x07, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x49, 0x6e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x80, + 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x4e, + 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x90, 0x08, + 0x12, 0x2c, 0x0a, 0x27, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x57, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, 0x6f, + 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x92, 0x08, 0x12, 0x27, + 0x0a, 0x22, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4f, 0x6e, 0x6c, 0x79, 0x41, 0x6c, 0x6c, 0x6f, 0x77, + 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x5f, + 0x47, 0x61, 0x6d, 0x65, 0x10, 0x93, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x59, 0x6f, 0x75, 0x72, 0x52, 0x65, 0x73, 0x56, 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, 0x5f, + 0x47, 0x61, 0x6d, 0x65, 0x10, 0x94, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x59, 0x6f, 0x75, 0x72, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x49, 0x73, 0x4c, 0x6f, 0x77, 0x5f, + 0x47, 0x61, 0x6d, 0x65, 0x10, 0x95, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6f, 0x73, 0x46, 0x75, 0x6c, 0x6c, 0x5f, 0x47, 0x61, 0x6d, + 0x65, 0x10, 0x98, 0x08, 0x12, 0x23, 0x0a, 0x1e, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x57, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9a, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x48, 0x61, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x5f, + 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9d, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x61, 0x69, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9e, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x53, 0x61, 0x6d, 0x65, 0x49, 0x70, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9f, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x10, 0xa0, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, + 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x6f, 0x4d, 0x6f, 0x72, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, + 0xa2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x49, 0x6e, 0x4f, 0x74, 0x68, + 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x67, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa3, + 0x08, 0x12, 0x16, 0x0a, 0x11, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4f, 0x70, 0x59, 0x69, 0x65, 0x6c, + 0x64, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xba, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x52, + 0x43, 0x5f, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xc9, 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xca, + 0x08, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x4e, 0x6f, + 0x74, 0x45, 0x78, 0x69, 0x74, 0x10, 0xcb, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xcd, + 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x73, 0x74, 0x4e, 0x6f, + 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0xce, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, 0x53, 0x63, 0x65, + 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb3, 0x08, 0x12, 0x22, + 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, + 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, + 0xb4, 0x08, 0x12, 0x26, 0x0a, 0x21, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, + 0x52, 0x69, 0x63, 0x65, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x4d, + 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb5, 0x08, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, 0x72, 0x65, 0x47, 0x61, 0x6d, 0x69, 0x6e, 0x67, + 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, + 0x10, 0xb6, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x69, 0x72, + 0x64, 0x50, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x10, 0xc8, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, + 0x6f, 0x6f, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x5f, 0x47, 0x61, 0x6d, + 0x65, 0x10, 0xcf, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x75, 0x73, + 0x74, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x47, 0x61, + 0x6d, 0x65, 0x10, 0xd9, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x70, 0x72, 0x63, 0x5f, 0x43, 0x6c, + 0x75, 0x62, 0x5f, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x73, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x10, 0x9f, 0x27, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, + 0x67, 0x5f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, + 0x10, 0xa8, 0x46, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa9, 0x46, 0x12, + 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x45, + 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xaa, 0x46, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x4e, 0x6f, 0x74, 0x45, 0x6e, + 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xab, 0x46, 0x12, 0x1c, 0x0a, 0x17, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6c, 0x6f, + 0x73, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb2, 0x46, 0x2a, 0xc8, 0x09, 0x0a, 0x10, 0x47, + 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, + 0x18, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, + 0x6c, 0x6c, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, + 0x4d, 0x10, 0x9a, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9b, 0x11, 0x12, + 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, + 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9c, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, + 0x10, 0x9d, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9e, 0x11, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x45, 0x54, 0x55, + 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9f, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, + 0x10, 0xa1, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa2, 0x11, 0x12, 0x17, 0x0a, + 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, + 0x41, 0x4d, 0x45, 0x10, 0xa3, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa4, 0x11, 0x12, + 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, + 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0xb7, 0x11, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, + 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0xb8, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x47, + 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0xb9, 0x11, 0x12, 0x23, 0x0a, 0x1e, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x41, 0x4e, 0x53, 0x57, 0x45, 0x52, 0x10, 0xd2, + 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, - 0x10, 0xe1, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, - 0x49, 0x53, 0x54, 0x10, 0xe2, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, - 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe3, 0x11, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, - 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0xe4, 0x11, 0x12, - 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, - 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, 0x53, 0x54, 0x4f, - 0x52, 0x59, 0x10, 0xe5, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, - 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe6, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, - 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe7, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, + 0x10, 0xe0, 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, + 0x4f, 0x4d, 0x10, 0xe1, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, + 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe2, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, + 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe3, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, 0x4f, 0x4d, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe9, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x54, - 0x10, 0xeb, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4f, 0x42, 0x53, 0x45, 0x52, 0x56, 0x45, 0x10, 0xec, 0x11, 0x12, - 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, - 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xed, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x47, 0x41, 0x4d, 0x45, 0x46, - 0x52, 0x45, 0x45, 0x10, 0xee, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x53, 0x59, 0x4e, 0x43, 0x10, - 0xef, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, - 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x4c, 0x4f, 0x47, 0x10, 0xf0, 0x11, 0x12, 0x19, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, - 0x52, 0x59, 0x4c, 0x4f, 0x47, 0x10, 0xf1, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x42, 0x49, 0x4c, - 0x4c, 0x10, 0xf2, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf3, 0x11, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x55, 0x50, 0x4c, 0x4f, - 0x41, 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf4, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, - 0x54, 0x10, 0xf5, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf6, 0x11, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4f, - 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xf7, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, - 0x45, 0x10, 0xf8, 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x53, 0x57, 0x49, - 0x54, 0x43, 0x48, 0x10, 0xf9, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x10, 0xfa, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc1, 0x3e, 0x12, 0x18, 0x0a, - 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, - 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc2, 0x3e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, - 0x10, 0xc3, 0x3e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc4, 0x3e, 0x12, - 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x4f, 0x52, - 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xc5, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, - 0x52, 0x54, 0x10, 0xc6, 0x3e, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x4c, 0x45, 0x41, 0x56, - 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc7, 0x3e, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x57, 0x49, - 0x54, 0x43, 0x48, 0x46, 0x4c, 0x41, 0x47, 0x10, 0xc8, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x10, 0xc9, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0xca, 0x3e, 0x42, 0x28, 0x5a, 0x26, - 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe9, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xed, + 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, + 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, + 0x4d, 0x10, 0xa0, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, + 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf5, 0x11, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x41, 0x55, + 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf6, 0x11, 0x12, 0x18, 0x0a, 0x13, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, + 0x49, 0x43, 0x45, 0x10, 0xf7, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xf8, 0x11, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, + 0x41, 0x4e, 0x47, 0x45, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, + 0xf9, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xfa, 0x11, 0x12, + 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x6f, 0x75, 0x63, + 0x68, 0x54, 0x79, 0x70, 0x65, 0x10, 0xfb, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, + 0xfc, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x52, + 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0xfd, 0x11, 0x12, 0x18, 0x0a, 0x13, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, + 0x4f, 0x4f, 0x4d, 0x10, 0xc1, 0x3e, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc2, 0x3e, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, + 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc3, 0x3e, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, + 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc4, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, + 0x10, 0xc5, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xc6, 0x3e, 0x12, 0x21, + 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, + 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc7, + 0x3e, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x46, 0x4c, 0x41, 0x47, + 0x10, 0xc8, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0xc9, 0x3e, 0x12, 0x17, 0x0a, 0x12, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x10, 0xca, 0x3e, 0x2a, 0x29, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x50, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x01, + 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -8227,169 +4808,95 @@ func file_game_proto_rawDescGZIP() []byte { return file_game_proto_rawDescData } -var file_game_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_game_proto_msgTypes = make([]protoimpl.MessageInfo, 102) +var file_game_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_game_proto_msgTypes = make([]protoimpl.MessageInfo, 49) var file_game_proto_goTypes = []interface{}{ - (OpResultCode_Game)(0), // 0: gamehall.OpResultCode_Game - (GameHallPacketID)(0), // 1: gamehall.GameHallPacketID - (*CSEnterHall)(nil), // 2: gamehall.CSEnterHall - (*SCEnterHall)(nil), // 3: gamehall.SCEnterHall - (*CSLeaveHall)(nil), // 4: gamehall.CSLeaveHall - (*SCLeaveHall)(nil), // 5: gamehall.SCLeaveHall - (*RoomPlayerInfo)(nil), // 6: gamehall.RoomPlayerInfo - (*RoomInfo)(nil), // 7: gamehall.RoomInfo - (*CSHallRoomList)(nil), // 8: gamehall.CSHallRoomList - (*HallInfo)(nil), // 9: gamehall.HallInfo - (*HallPlayerNum)(nil), // 10: gamehall.HallPlayerNum - (*SCHallRoomList)(nil), // 11: gamehall.SCHallRoomList - (*SCRoomPlayerEnter)(nil), // 12: gamehall.SCRoomPlayerEnter - (*SCRoomPlayerLeave)(nil), // 13: gamehall.SCRoomPlayerLeave - (*SCRoomStateChange)(nil), // 14: gamehall.SCRoomStateChange - (*CSCreateRoom)(nil), // 15: gamehall.CSCreateRoom - (*SCCreateRoom)(nil), // 16: gamehall.SCCreateRoom - (*CSDestroyRoom)(nil), // 17: gamehall.CSDestroyRoom - (*SCDestroyRoom)(nil), // 18: gamehall.SCDestroyRoom - (*CSEnterRoom)(nil), // 19: gamehall.CSEnterRoom - (*SCEnterRoom)(nil), // 20: gamehall.SCEnterRoom - (*CSLeaveRoom)(nil), // 21: gamehall.CSLeaveRoom - (*SCLeaveRoom)(nil), // 22: gamehall.SCLeaveRoom - (*CSReturnRoom)(nil), // 23: gamehall.CSReturnRoom - (*SCReturnRoom)(nil), // 24: gamehall.SCReturnRoom - (*CSGetGameRec)(nil), // 25: gamehall.CSGetGameRec - (*PlayerGameRec)(nil), // 26: gamehall.PlayerGameRec - (*GameRec)(nil), // 27: gamehall.GameRec - (*SCGetGameRec)(nil), // 28: gamehall.SCGetGameRec - (*CSShareSuc)(nil), // 29: gamehall.CSShareSuc - (*SCShareSuc)(nil), // 30: gamehall.SCShareSuc - (*CSForceStart)(nil), // 31: gamehall.CSForceStart - (*SCForceStart)(nil), // 32: gamehall.SCForceStart - (*CSInviteRobot)(nil), // 33: gamehall.CSInviteRobot - (*CSPlayerSwithFlag)(nil), // 34: gamehall.CSPlayerSwithFlag - (*CSShopBuy)(nil), // 35: gamehall.CSShopBuy - (*SCShopBuy)(nil), // 36: gamehall.SCShopBuy - (*CSJoinGame)(nil), // 37: gamehall.CSJoinGame - (*SCJoinGame)(nil), // 38: gamehall.SCJoinGame - (*CSEnterDgGame)(nil), // 39: gamehall.CSEnterDgGame - (*SCEnterDgGame)(nil), // 40: gamehall.SCEnterDgGame - (*CSLeaveDgGame)(nil), // 41: gamehall.CSLeaveDgGame - (*SCLeaveDgGame)(nil), // 42: gamehall.SCLeaveDgGame - (*CSThridAccountStatistic)(nil), // 43: gamehall.CSThridAccountStatistic - (*ThridAccount)(nil), // 44: gamehall.ThridAccount - (*SCThridAccountStatistic)(nil), // 45: gamehall.SCThridAccountStatistic - (*CSThridAccountTransfer)(nil), // 46: gamehall.CSThridAccountTransfer - (*SCThridAccountTransfer)(nil), // 47: gamehall.SCThridAccountTransfer - (*CSEnterThridGame)(nil), // 48: gamehall.CSEnterThridGame - (*SCEnterThridGame)(nil), // 49: gamehall.SCEnterThridGame - (*CSLeaveThridGame)(nil), // 50: gamehall.CSLeaveThridGame - (*SCLeaveThridGame)(nil), // 51: gamehall.SCLeaveThridGame - (*CSThridGameList)(nil), // 52: gamehall.CSThridGameList - (*ThridGameDatas)(nil), // 53: gamehall.ThridGameDatas - (*ThridGamePlatforms)(nil), // 54: gamehall.ThridGamePlatforms - (*SCThridGameList)(nil), // 55: gamehall.SCThridGameList - (*CSThridGameBalanceUpdate)(nil), // 56: gamehall.CSThridGameBalanceUpdate - (*SCThridGameBalanceUpdate)(nil), // 57: gamehall.SCThridGameBalanceUpdate - (*SCThridGameBalanceUpdateState)(nil), // 58: gamehall.SCThridGameBalanceUpdateState - (*CSCreatePrivateRoom)(nil), // 59: gamehall.CSCreatePrivateRoom - (*SCCreatePrivateRoom)(nil), // 60: gamehall.SCCreatePrivateRoom - (*PrivateRoomInfo)(nil), // 61: gamehall.PrivateRoomInfo - (*CSGetPrivateRoomList)(nil), // 62: gamehall.CSGetPrivateRoomList - (*SCGetPrivateRoomList)(nil), // 63: gamehall.SCGetPrivateRoomList - (*CSGetPrivateRoomHistory)(nil), // 64: gamehall.CSGetPrivateRoomHistory - (*PrivateRoomHistory)(nil), // 65: gamehall.PrivateRoomHistory - (*SCGetPrivateRoomHistory)(nil), // 66: gamehall.SCGetPrivateRoomHistory - (*CSDestroyPrivateRoom)(nil), // 67: gamehall.CSDestroyPrivateRoom - (*SCDestroyPrivateRoom)(nil), // 68: gamehall.SCDestroyPrivateRoom - (*CSQueryRoomInfo)(nil), // 69: gamehall.CSQueryRoomInfo - (*QRoomInfo)(nil), // 70: gamehall.QRoomInfo - (*SCQueryRoomInfo)(nil), // 71: gamehall.SCQueryRoomInfo - (*CSGameObserve)(nil), // 72: gamehall.CSGameObserve - (*GameSubRecord)(nil), // 73: gamehall.GameSubRecord - (*SCGameSubList)(nil), // 74: gamehall.SCGameSubList - (*GameState)(nil), // 75: gamehall.GameState - (*SCGameState)(nil), // 76: gamehall.SCGameState - (*LotteryData)(nil), // 77: gamehall.LotteryData - (*SCLotterySync)(nil), // 78: gamehall.SCLotterySync - (*CSLotteryLog)(nil), // 79: gamehall.CSLotteryLog - (*LotteryLog)(nil), // 80: gamehall.LotteryLog - (*SCLotteryLog)(nil), // 81: gamehall.SCLotteryLog - (*SCLotteryBill)(nil), // 82: gamehall.SCLotteryBill - (*GameConfig1)(nil), // 83: gamehall.GameConfig1 - (*CSGetGameConfig)(nil), // 84: gamehall.CSGetGameConfig - (*ChessRankInfo)(nil), // 85: gamehall.ChessRankInfo - (*SCGetGameConfig)(nil), // 86: gamehall.SCGetGameConfig - (*SCChangeGameStatus)(nil), // 87: gamehall.SCChangeGameStatus - (*SCChangeEntrySwitch)(nil), // 88: gamehall.SCChangeEntrySwitch - (*CSEnterGame)(nil), // 89: gamehall.CSEnterGame - (*SCEnterGame)(nil), // 90: gamehall.SCEnterGame - (*CSQuitGame)(nil), // 91: gamehall.CSQuitGame - (*SCQuitGame)(nil), // 92: gamehall.SCQuitGame - (*CSUploadLoc)(nil), // 93: gamehall.CSUploadLoc - (*SCUploadLoc)(nil), // 94: gamehall.SCUploadLoc - (*CSAudienceSit)(nil), // 95: gamehall.CSAudienceSit - (*SCAudienceSit)(nil), // 96: gamehall.SCAudienceSit - (*CSRecordAndNotice)(nil), // 97: gamehall.CSRecordAndNotice - (*CommonNotice)(nil), // 98: gamehall.CommonNotice - (*PlayerRecord)(nil), // 99: gamehall.PlayerRecord - (*SCRecordAndNotice)(nil), // 100: gamehall.SCRecordAndNotice - (*SCNoticeChange)(nil), // 101: gamehall.SCNoticeChange - (*CSRoomEvent)(nil), // 102: gamehall.CSRoomEvent - (*SCRoomEvent)(nil), // 103: gamehall.SCRoomEvent + (OpResultCode_Game)(0), // 0: gamehall.OpResultCode_Game + (GameHallPacketID)(0), // 1: gamehall.GameHallPacketID + (DataType)(0), // 2: gamehall.DataType + (*CSCreateRoom)(nil), // 3: gamehall.CSCreateRoom + (*SCCreateRoom)(nil), // 4: gamehall.SCCreateRoom + (*CSEnterRoom)(nil), // 5: gamehall.CSEnterRoom + (*SCEnterRoom)(nil), // 6: gamehall.SCEnterRoom + (*CSReturnRoom)(nil), // 7: gamehall.CSReturnRoom + (*SCReturnRoom)(nil), // 8: gamehall.SCReturnRoom + (*CSEnterGame)(nil), // 9: gamehall.CSEnterGame + (*SCEnterGame)(nil), // 10: gamehall.SCEnterGame + (*CSQuitGame)(nil), // 11: gamehall.CSQuitGame + (*SCQuitGame)(nil), // 12: gamehall.SCQuitGame + (*GameConfig1)(nil), // 13: gamehall.GameConfig1 + (*CSGetGameConfig)(nil), // 14: gamehall.CSGetGameConfig + (*ChessRankInfo)(nil), // 15: gamehall.ChessRankInfo + (*SCGetGameConfig)(nil), // 16: gamehall.SCGetGameConfig + (*SCChangeGameStatus)(nil), // 17: gamehall.SCChangeGameStatus + (*SCChangeEntrySwitch)(nil), // 18: gamehall.SCChangeEntrySwitch + (*CSCreatePrivateRoom)(nil), // 19: gamehall.CSCreatePrivateRoom + (*SCCreatePrivateRoom)(nil), // 20: gamehall.SCCreatePrivateRoom + (*CSGetPrivateRoomList)(nil), // 21: gamehall.CSGetPrivateRoomList + (*PrivatePlayerInfo)(nil), // 22: gamehall.PrivatePlayerInfo + (*PrivateRoomInfo)(nil), // 23: gamehall.PrivateRoomInfo + (*SCGetPrivateRoomList)(nil), // 24: gamehall.SCGetPrivateRoomList + (*CSQueryRoomInfo)(nil), // 25: gamehall.CSQueryRoomInfo + (*QRoomInfo)(nil), // 26: gamehall.QRoomInfo + (*SCQueryRoomInfo)(nil), // 27: gamehall.SCQueryRoomInfo + (*GameState)(nil), // 28: gamehall.GameState + (*SCGameState)(nil), // 29: gamehall.SCGameState + (*CSAudienceSit)(nil), // 30: gamehall.CSAudienceSit + (*SCAudienceSit)(nil), // 31: gamehall.SCAudienceSit + (*CSRecordAndNotice)(nil), // 32: gamehall.CSRecordAndNotice + (*CommonNotice)(nil), // 33: gamehall.CommonNotice + (*PlayerRecord)(nil), // 34: gamehall.PlayerRecord + (*SCRecordAndNotice)(nil), // 35: gamehall.SCRecordAndNotice + (*SCNoticeChange)(nil), // 36: gamehall.SCNoticeChange + (*CSDestroyRoom)(nil), // 37: gamehall.CSDestroyRoom + (*SCDestroyRoom)(nil), // 38: gamehall.SCDestroyRoom + (*CSLeaveRoom)(nil), // 39: gamehall.CSLeaveRoom + (*SCLeaveRoom)(nil), // 40: gamehall.SCLeaveRoom + (*CSForceStart)(nil), // 41: gamehall.CSForceStart + (*SCForceStart)(nil), // 42: gamehall.SCForceStart + (*CSPlayerSwithFlag)(nil), // 43: gamehall.CSPlayerSwithFlag + (*CSRoomEvent)(nil), // 44: gamehall.CSRoomEvent + (*SCRoomEvent)(nil), // 45: gamehall.SCRoomEvent + (*ItemInfo)(nil), // 46: gamehall.ItemInfo + (*CSTouchType)(nil), // 47: gamehall.CSTouchType + (*RoomConfigInfo)(nil), // 48: gamehall.RoomConfigInfo + (*RoomTypeInfo)(nil), // 49: gamehall.RoomTypeInfo + (*CSRoomConfig)(nil), // 50: gamehall.CSRoomConfig + (*SCRoomConfig)(nil), // 51: gamehall.SCRoomConfig } var file_game_proto_depIdxs = []int32{ - 0, // 0: gamehall.SCEnterHall.OpRetCode:type_name -> gamehall.OpResultCode_Game - 6, // 1: gamehall.RoomInfo.Players:type_name -> gamehall.RoomPlayerInfo - 9, // 2: gamehall.HallPlayerNum.HallData:type_name -> gamehall.HallInfo - 7, // 3: gamehall.SCHallRoomList.Rooms:type_name -> gamehall.RoomInfo - 9, // 4: gamehall.SCHallRoomList.HallData:type_name -> gamehall.HallInfo - 6, // 5: gamehall.SCRoomPlayerEnter.Player:type_name -> gamehall.RoomPlayerInfo - 0, // 6: gamehall.SCCreateRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 7: gamehall.SCDestroyRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 8: gamehall.SCEnterRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 9: gamehall.SCLeaveRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 10: gamehall.SCReturnRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 26, // 11: gamehall.GameRec.Datas:type_name -> gamehall.PlayerGameRec - 27, // 12: gamehall.SCGetGameRec.Recs:type_name -> gamehall.GameRec - 0, // 13: gamehall.SCShareSuc.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 14: gamehall.SCForceStart.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 15: gamehall.SCShopBuy.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 16: gamehall.SCJoinGame.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 17: gamehall.SCEnterDgGame.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 18: gamehall.SCLeaveDgGame.OpRetCode:type_name -> gamehall.OpResultCode_Game - 44, // 19: gamehall.SCThridAccountStatistic.Accounts:type_name -> gamehall.ThridAccount - 0, // 20: gamehall.SCThridAccountTransfer.OpRetCode:type_name -> gamehall.OpResultCode_Game - 44, // 21: gamehall.SCThridAccountTransfer.Accounts:type_name -> gamehall.ThridAccount - 0, // 22: gamehall.SCEnterThridGame.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 23: gamehall.SCLeaveThridGame.OpRetCode:type_name -> gamehall.OpResultCode_Game - 53, // 24: gamehall.ThridGamePlatforms.GameDatas:type_name -> gamehall.ThridGameDatas - 0, // 25: gamehall.SCThridGameList.OpRetCode:type_name -> gamehall.OpResultCode_Game - 54, // 26: gamehall.SCThridGameList.GamePlatforms:type_name -> gamehall.ThridGamePlatforms - 0, // 27: gamehall.SCThridGameBalanceUpdate.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 28: gamehall.SCThridGameBalanceUpdateState.OpRetCode:type_name -> gamehall.OpResultCode_Game - 0, // 29: gamehall.SCCreatePrivateRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 61, // 30: gamehall.SCGetPrivateRoomList.Datas:type_name -> gamehall.PrivateRoomInfo - 65, // 31: gamehall.SCGetPrivateRoomHistory.Datas:type_name -> gamehall.PrivateRoomHistory - 0, // 32: gamehall.SCDestroyPrivateRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game - 70, // 33: gamehall.SCQueryRoomInfo.RoomInfo:type_name -> gamehall.QRoomInfo - 0, // 34: gamehall.SCQueryRoomInfo.OpRetCode:type_name -> gamehall.OpResultCode_Game - 73, // 35: gamehall.SCGameSubList.List:type_name -> gamehall.GameSubRecord - 75, // 36: gamehall.SCGameState.List:type_name -> gamehall.GameState - 77, // 37: gamehall.SCLotterySync.Datas:type_name -> gamehall.LotteryData - 80, // 38: gamehall.SCLotteryLog.Logs:type_name -> gamehall.LotteryLog - 83, // 39: gamehall.SCGetGameConfig.GameCfg:type_name -> gamehall.GameConfig1 - 85, // 40: gamehall.SCGetGameConfig.ChessRanks:type_name -> gamehall.ChessRankInfo - 83, // 41: gamehall.SCChangeGameStatus.GameCfg:type_name -> gamehall.GameConfig1 - 0, // 42: gamehall.SCEnterGame.OpCode:type_name -> gamehall.OpResultCode_Game - 0, // 43: gamehall.SCQuitGame.OpCode:type_name -> gamehall.OpResultCode_Game - 0, // 44: gamehall.SCAudienceSit.OpCode:type_name -> gamehall.OpResultCode_Game - 0, // 45: gamehall.SCRecordAndNotice.OpCode:type_name -> gamehall.OpResultCode_Game - 98, // 46: gamehall.SCRecordAndNotice.List:type_name -> gamehall.CommonNotice - 99, // 47: gamehall.SCRecordAndNotice.Glist:type_name -> gamehall.PlayerRecord - 0, // 48: gamehall.SCRoomEvent.OpCode:type_name -> gamehall.OpResultCode_Game - 49, // [49:49] is the sub-list for method output_type - 49, // [49:49] is the sub-list for method input_type - 49, // [49:49] is the sub-list for extension type_name - 49, // [49:49] is the sub-list for extension extendee - 0, // [0:49] is the sub-list for field type_name + 0, // 0: gamehall.SCCreateRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 1: gamehall.SCEnterRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 2: gamehall.SCReturnRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 3: gamehall.SCEnterGame.OpCode:type_name -> gamehall.OpResultCode_Game + 0, // 4: gamehall.SCQuitGame.OpCode:type_name -> gamehall.OpResultCode_Game + 13, // 5: gamehall.SCGetGameConfig.GameCfg:type_name -> gamehall.GameConfig1 + 15, // 6: gamehall.SCGetGameConfig.ChessRanks:type_name -> gamehall.ChessRankInfo + 13, // 7: gamehall.SCChangeGameStatus.GameCfg:type_name -> gamehall.GameConfig1 + 0, // 8: gamehall.SCCreatePrivateRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 22, // 9: gamehall.PrivateRoomInfo.Players:type_name -> gamehall.PrivatePlayerInfo + 23, // 10: gamehall.SCGetPrivateRoomList.Datas:type_name -> gamehall.PrivateRoomInfo + 26, // 11: gamehall.SCQueryRoomInfo.RoomInfo:type_name -> gamehall.QRoomInfo + 0, // 12: gamehall.SCQueryRoomInfo.OpRetCode:type_name -> gamehall.OpResultCode_Game + 28, // 13: gamehall.SCGameState.List:type_name -> gamehall.GameState + 0, // 14: gamehall.SCAudienceSit.OpCode:type_name -> gamehall.OpResultCode_Game + 0, // 15: gamehall.SCRecordAndNotice.OpCode:type_name -> gamehall.OpResultCode_Game + 33, // 16: gamehall.SCRecordAndNotice.List:type_name -> gamehall.CommonNotice + 34, // 17: gamehall.SCRecordAndNotice.Glist:type_name -> gamehall.PlayerRecord + 0, // 18: gamehall.SCDestroyRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 19: gamehall.SCLeaveRoom.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 20: gamehall.SCForceStart.OpRetCode:type_name -> gamehall.OpResultCode_Game + 0, // 21: gamehall.SCRoomEvent.OpCode:type_name -> gamehall.OpResultCode_Game + 2, // 22: gamehall.CSTouchType.Tp:type_name -> gamehall.DataType + 46, // 23: gamehall.RoomConfigInfo.Cost:type_name -> gamehall.ItemInfo + 46, // 24: gamehall.RoomConfigInfo.Reward:type_name -> gamehall.ItemInfo + 48, // 25: gamehall.RoomTypeInfo.List:type_name -> gamehall.RoomConfigInfo + 49, // 26: gamehall.SCRoomConfig.List:type_name -> gamehall.RoomTypeInfo + 27, // [27:27] is the sub-list for method output_type + 27, // [27:27] is the sub-list for method input_type + 27, // [27:27] is the sub-list for extension type_name + 27, // [27:27] is the sub-list for extension extendee + 0, // [0:27] is the sub-list for field type_name } func init() { file_game_proto_init() } @@ -8399,162 +4906,6 @@ func file_game_proto_init() { } if !protoimpl.UnsafeEnabled { file_game_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSEnterHall); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCEnterHall); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSLeaveHall); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLeaveHall); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoomPlayerInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSHallRoomList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HallInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HallPlayerNum); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCHallRoomList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCRoomPlayerEnter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCRoomPlayerLeave); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCRoomStateChange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSCreateRoom); i { case 0: return &v.state @@ -8566,7 +4917,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCCreateRoom); i { case 0: return &v.state @@ -8578,31 +4929,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSDestroyRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCDestroyRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSEnterRoom); i { case 0: return &v.state @@ -8614,7 +4941,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCEnterRoom); i { case 0: return &v.state @@ -8626,31 +4953,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSLeaveRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLeaveRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSReturnRoom); i { case 0: return &v.state @@ -8662,7 +4965,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCReturnRoom); i { case 0: return &v.state @@ -8674,775 +4977,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSGetGameRec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerGameRec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameRec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGetGameRec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSShareSuc); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCShareSuc); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSForceStart); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCForceStart); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSInviteRobot); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSPlayerSwithFlag); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSShopBuy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCShopBuy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSJoinGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCJoinGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSEnterDgGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCEnterDgGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSLeaveDgGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLeaveDgGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSThridAccountStatistic); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThridAccount); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCThridAccountStatistic); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSThridAccountTransfer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCThridAccountTransfer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSEnterThridGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCEnterThridGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSLeaveThridGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLeaveThridGame); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSThridGameList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThridGameDatas); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThridGamePlatforms); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCThridGameList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSThridGameBalanceUpdate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCThridGameBalanceUpdate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCThridGameBalanceUpdateState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSCreatePrivateRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCCreatePrivateRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrivateRoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSGetPrivateRoomList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGetPrivateRoomList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSGetPrivateRoomHistory); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrivateRoomHistory); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGetPrivateRoomHistory); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSDestroyPrivateRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCDestroyPrivateRoom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSQueryRoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QRoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCQueryRoomInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSGameObserve); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameSubRecord); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGameSubList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGameState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LotteryData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLotterySync); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSLotteryLog); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LotteryLog); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLotteryLog); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCLotteryBill); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameConfig1); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSGetGameConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChessRankInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCGetGameConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCChangeGameStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCChangeEntrySwitch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_game_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSEnterGame); i { case 0: return &v.state @@ -9454,7 +4989,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCEnterGame); i { case 0: return &v.state @@ -9466,7 +5001,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSQuitGame); i { case 0: return &v.state @@ -9478,7 +5013,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCQuitGame); i { case 0: return &v.state @@ -9490,8 +5025,8 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSUploadLoc); i { + file_game_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GameConfig1); i { case 0: return &v.state case 1: @@ -9502,8 +5037,8 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCUploadLoc); i { + file_game_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSGetGameConfig); i { case 0: return &v.state case 1: @@ -9514,7 +5049,187 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChessRankInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCGetGameConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCChangeGameStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCChangeEntrySwitch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSCreatePrivateRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCCreatePrivateRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSGetPrivateRoomList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrivatePlayerInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrivateRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCGetPrivateRoomList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSQueryRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCQueryRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GameState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCGameState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSAudienceSit); i { case 0: return &v.state @@ -9526,7 +5241,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCAudienceSit); i { case 0: return &v.state @@ -9538,7 +5253,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSRecordAndNotice); i { case 0: return &v.state @@ -9550,7 +5265,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CommonNotice); i { case 0: return &v.state @@ -9562,7 +5277,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlayerRecord); i { case 0: return &v.state @@ -9574,7 +5289,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCRecordAndNotice); i { case 0: return &v.state @@ -9586,7 +5301,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCNoticeChange); i { case 0: return &v.state @@ -9598,7 +5313,91 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSDestroyRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCDestroyRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSLeaveRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCLeaveRoom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSForceStart); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCForceStart); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSPlayerSwithFlag); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CSRoomEvent); i { case 0: return &v.state @@ -9610,7 +5409,7 @@ func file_game_proto_init() { return nil } } - file_game_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + file_game_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCRoomEvent); i { case 0: return &v.state @@ -9622,14 +5421,86 @@ func file_game_proto_init() { return nil } } + file_game_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ItemInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSTouchType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoomConfigInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoomTypeInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSRoomConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_game_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCRoomConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_game_proto_rawDesc, - NumEnums: 2, - NumMessages: 102, + NumEnums: 3, + NumMessages: 49, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/gamehall/game.proto b/protocol/gamehall/game.proto index 33cc8fb..e49a0e7 100644 --- a/protocol/gamehall/game.proto +++ b/protocol/gamehall/game.proto @@ -30,6 +30,8 @@ enum OpResultCode_Game { OPRC_AllocRoomIdFailed_Game = 1097; //房间id获取失败 OPRC_PrivateRoomCountLimit_Game = 1098; //私人房间上限 OPRC_RoomNotExit = 1099; // 已经不在房间了 + OPRC_PasswordError = 1101; //密码错误 + OPRC_CostNotEnough = 1102; //房卡不足 OPRC_LowerRice_ScenceMax_Game = 1075; //超过最大下米数量 OPRC_LowerRice_PlayerMax_Game = 1076; //超过单个用户最大下米数 @@ -47,203 +49,84 @@ enum OpResultCode_Game { OPRC_Dg_QuotaNotEnough_Game = 9003; //平台DG配额不足 OPRC_Thr_GameClose_Game = 9010; //游戏维护中 } -//消息id 2200-2319 + enum GameHallPacketID { - PACKET_GameHall_ZERO = 0; // 弃用消息号 - PACKET_CS_JOINGAME = 2200; - PACKET_SC_JOINGAME = 2201; + // client -> worldsrv 协议 + // 消息id 2200-2319 + // 弃用消息号 + PACKET_GameHall_ZERO = 0; + // 创建房间 PACKET_CS_CREATEROOM = 2202; PACKET_SC_CREATEROOM = 2203; + // 进入房间 PACKET_CS_ENTERROOM = 2204; PACKET_SC_ENTERROOM = 2205; + // 返回房间 PACKET_CS_RETURNROOM = 2206; PACKET_SC_RETURNROOM = 2207; - PACKET_CS_AUDIENCE_ENTERROOM = 2208; + // 进入游戏 PACKET_CS_ENTERGAME = 2209; PACKET_SC_ENTERGAME = 2210; - + // 退出游戏 PACKET_CS_QUITGAME = 2211; PACKET_SC_QUITGAME = 2212; - PACKET_SC_CARDGAINWAY = 2213; - PACKET_CS_TASKLIST = 2214; - PACKET_SC_TASKLIST = 2215; - PACKET_SC_TASKCHG = 2216; - PACKET_SC_TACKCOMPLETE = 2217; - PACKET_SC_TASKDEL = 2218; - PACKET_CS_TACKDRAWPRIZE = 2219; - PACKET_SC_TACKDRAWPRIZE = 2220; - - PACKET_CS_GETAGENTGAMEREC = 2223; - PACKET_SC_GETAGENTGAMEREC = 2224; - PACKET_CS_DELAGENTGAMEREC = 2225; - PACKET_CS_SHOPBUY = 2226; - PACKET_SC_SHOPBUY = 2227; - PACKET_SC_LIMITLIST = 2228; - PACKET_CS_GETLATELYGAMEIDS = 2229; - PACKET_SC_GETLATELYGAMEIDS = 2230; - + // 获取游戏分场配置 PACKET_CS_GETGAMECONFIG = 2231; PACKET_SC_GETGAMECONFIG = 2232; + // 修改游戏开关 PACKET_SC_CHANGEGAMESTATUS = 2233; - PACKET_CS_ENTERHALL = 2240; - PACKET_SC_ENTERHALL = 2241; - PACKET_CS_LEAVEHALL = 2242; - PACKET_SC_LEAVEHALL = 2243; - PACKET_CS_HALLROOMLIST = 2244; - PACKET_SC_HALLROOMLIST = 2245; - PACKET_SC_ROOMPLAYERENTER = 2246; - PACKET_SC_ROOMPLAYERLEAVE = 2247; - PACKET_SC_ROOMSTATECHANG = 2248; - PACKET_SC_HALLPLAYERNUM = 2249; - PACKET_SC_BULLETIONINFO = 2250; + // 充值弹框协议 + PACKET_SC_PLAYERRECHARGEANSWER = 2258; - PACKET_CS_BULLETIONINFO = 2251; - PACKET_CS_CUSTOMERINFOLIST = 2252; - PACKET_SC_CUSTOMERINFOLIST = 2253; - PACKET_CS_ENTERDGGAME = 2254; - PACKET_SC_ENTERDGGAME = 2255; - PACKET_CS_LEAVEDGGAME = 2256; - PACKET_SC_LEAVEDGGAME = 2257; - PACKET_SC_PLAYERRECHARGEANSWER = 2258;//充值弹框协议 - PACKET_CS_THRIDACCOUNTSTATICSTIC = 2259; - PACKET_SC_THRIDACCOUNTSTATICSTIC = 2260; - - PACKET_CS_THRIDACCOUNTTRANSFER = 2261; - PACKET_SC_THRIDACCOUNTTRANSFER = 2262; - PACKET_CS_ENTERTHRIDGAME = 2263; - PACKET_SC_ENTERTHRIDGAME = 2264; - PACKET_CS_LEAVETHRIDGAME = 2265; - PACKET_SC_LEAVETHRIDGAME = 2266; - PACKET_CS_THRIDGAMELIST = 2267; - PACKET_SC_THRIDGAMELIST = 2268; - PACKET_CS_THRIDGAMEBALANCEUPDATE = 2269; - PACKET_SC_THRIDGAMEBALANCEUPDATE = 2270; - - PACKET_SC_THRIDGAMEBALANCEUPDATESTATE = 2271; + // 创建竞技馆私人房 PACKET_CS_CREATEPRIVATEROOM = 2272; PACKET_SC_CREATEPRIVATEROOM = 2273; + // 查询竞技馆私人房列表 PACKET_CS_GETPRIVATEROOMLIST = 2274; PACKET_SC_GETPRIVATEROOMLIST = 2275; - PACKET_CS_GETPRIVATEROOMHISTORY = 2276; - PACKET_SC_GETPRIVATEROOMHISTORY = 2277; - PACKET_CS_DESTROYPRIVATEROOM = 2278; - PACKET_SC_DESTROYPRIVATEROOM = 2279; + + // 查询自由桌房间列表 PACKET_CS_QUERYROOMINFO = 2280; - PACKET_SC_QUERYROOMINFO = 2281; - PACKET_SC_GAMESUBLIST = 2283; - PACKET_CS_GAMEOBSERVE = 2284; + // 同步房间下注状态 PACKET_SC_GAMESTATE = 2285; - PACKET_SC_SYNCGAMEFREE = 2286; - PACKET_SC_LOTTERYSYNC = 2287; - PACKET_CS_LOTTERYLOG = 2288; - PACKET_SC_LOTTERYLOG = 2289; - PACKET_SC_LOTTERYBILL = 2290; - - PACKET_CS_UPLOADLOC = 2291; - PACKET_SC_UPLOADLOC = 2292; + // 观众进入房间 + PACKET_CS_AUDIENCE_ENTERROOM = 2208; + // 观众坐下 PACKET_CS_AUDIENCESIT = 2293; PACKET_SC_AUDIENCESIT = 2294; + // 公告 PACKET_CS_COMNOTICE = 2295; PACKET_SC_COMNOTICE = 2296; - PACKET_SC_CHANGEENTRYSWITCH = 2297;//界面入口开关 - PACKET_SC_NoticeChange = 2298; // 公告更新 + // 界面入口开关 + PACKET_SC_CHANGEENTRYSWITCH = 2297; + // 公告更新 + PACKET_SC_NoticeChange = 2298; + // 保持更新 + PACKET_CSTouchType = 2299; + // 竞技馆房间信息 + PACKET_CSRoomConfig = 2300; + PACKET_SCRoomConfig = 2301; + + // client -> gamesrv 协议 + // 消息id 8000~8099 + // 离开房间 PACKET_CS_LEAVEROOM = 8001; PACKET_SC_LEAVEROOM = 8002; + // 解散房间 PACKET_CS_DESTROYROOM = 8003; PACKET_SC_DESTROYROOM = 8004; + // 强制开始 PACKET_CS_FORCESTART = 8005; PACKET_SC_FORCESTART = 8006; + // 观众离开房间 PACKET_CS_AUDIENCE_LEAVEROOM = 8007; + // 玩家切换标志,暂离状态 PACKET_CS_PLAYER_SWITCHFLAG = 8008; - PACKET_CSRoomEvent = 8009; // 房间事件 - PACKET_SCRoomEvent = 8010; // 房间事件 -} -//进入游戏大厅 -//PACKET_CS_ENTERHALL -message CSEnterHall{ - int32 HallId = 1; //厅id(详见:DB_GameFree.xlxs中的id) -} - -//PACKET_SC_ENTERHALL -message SCEnterHall{ - int32 HallId = 1; //厅id(详见:DB_GameFree.xlxs中的id) - OpResultCode_Game OpRetCode = 2; //结果 -} - -//离开游戏大厅 -//PACKET_CS_LEAVEHALL -message CSLeaveHall{ -} - -//PACKET_SC_LEAVEHALL -message SCLeaveHall{ - int32 HallId = 1; -} - -//房间内玩家信息 -message RoomPlayerInfo{ - int32 SnId = 1; //数字账号 - int32 Head = 2; //头像 - int32 Sex = 3; //性别 - string Name = 4; //名字 - int32 Pos = 5; //位置 - int32 Flag = 6; //状态 - int32 HeadOutLine = 7; //头像框 - int32 VIP = 8; -} - -//房间信息 -message RoomInfo{ - int32 RoomId = 1; //房号 - bool Starting = 7; //牌局是否开始 - repeated RoomPlayerInfo Players = 5; -} - -//PACKET_CS_HALLROOMLIST -message CSHallRoomList{ - int32 HallId = 1; //厅id(详见:DB_GameFree.xlxs中的id) -} - -//大厅人数 -message HallInfo{ - int32 SceneType = 1; //场 - int32 PlayerNum = 2; //人数 -} - -//PACKET_SC_HALLPLAYERNUM -message HallPlayerNum{ - repeated HallInfo HallData = 1; //大厅人数 -} -//PACKET_SC_HALLROOMLIST -message SCHallRoomList{ - int32 HallId = 1; //厅id - int32 GameId = 2; //游戏id - int32 GameMode = 3; //游戏模式 - bool IsAdd = 4; //是否新增 - repeated int32 Params = 5; //游戏规则参数 - repeated RoomInfo Rooms = 6; //房间列表 - repeated HallInfo HallData = 7; //大厅人数 -} - -//PACKET_SC_ROOMPLAYERENTER -message SCRoomPlayerEnter{ - int32 RoomId = 1; - RoomPlayerInfo Player = 2; -} - -//PACKET_SC_ROOMPLAYERLEAVE -message SCRoomPlayerLeave{ - int32 RoomId = 1; - int32 Pos = 2; -} - -//PACKET_SC_ROOMSTATECHANG -message SCRoomStateChange{ - int32 RoomId = 1; - bool Starting = 2; - int32 State = 3; + // 房间事件,互动表情 + PACKET_CSRoomEvent = 8009; + PACKET_SCRoomEvent = 8010; } //PACKET_CS_CREATEROOM @@ -259,7 +142,6 @@ message CSCreateRoom{ repeated int32 Params = 5; int32 Id = 6; // gamefreeid } - //PACKET_SC_CREATEROOM message SCCreateRoom{ int32 GameId = 1; //游戏模式 @@ -270,48 +152,24 @@ message SCCreateRoom{ OpResultCode_Game OpRetCode = 6; //结果 } -//PACKET_CS_DESTROYROOM -message CSDestroyRoom{ -} -//PACKET_SC_DESTROYROOM -message SCDestroyRoom{ - int32 RoomId = 1; //房间编号 - OpResultCode_Game OpRetCode = 2; //结果 - int32 IsForce = 3; //是否强制销毁 -} - //PACKET_CS_ENTERROOM //PACKET_CS_AUDIENCE_ENTERROOM //玩家请求进入游戏 message CSEnterRoom{ int32 RoomId = 1; //房间编号 int32 GameId = 2; //游戏编号 + string Password = 3; //房间密码 } - //PACKET_SC_ENTERROOM message SCEnterRoom{ int32 GameId = 1; //游戏ID - int32 ModeType = 2; //场类型 + int32 ModeType = 2; //游戏模式(玩法,已经不用了) repeated int32 Params = 3; //场参数 int32 RoomId = 4; //房间编号 int32 HallId = 5; //厅id OpResultCode_Game OpRetCode = 6; //结果 int32 ClubId = 7; -} - -//PACKET_CS_LEAVEROOM -//PACKET_CS_AUDIENCE_LEAVEROOM -//玩家离开房间,返回大厅 -message CSLeaveRoom{ - int32 Mode = 1; //离开方式 0:退出 1:暂离(占着座位,返回大厅) -} - -//PACKET_SC_LEAVEROOM -message SCLeaveRoom{ - OpResultCode_Game OpRetCode = 1; //结果 - int32 Reason = 2;//原因 0:主动退出 1:被踢出 - int32 RoomId = 3;//房间ID - int32 Mode = 4; + int32 GameFreeId = 8; //游戏场次id } //PACKET_CS_RETURNROOM @@ -322,7 +180,6 @@ message CSReturnRoom{ int32 RoomId = 4; //int32 LogicId = 5; //这个字段是冗余的 } - //PACKET_SC_RETURNROOM message SCReturnRoom{ OpResultCode_Game OpRetCode = 1; //结果 @@ -339,419 +196,6 @@ message SCReturnRoom{ int32 ClubId = 12; } - - -//获取游戏记录 -//PACKET_CS_GETGAMEREC -message CSGetGameRec{ - int32 Ver = 1; - int32 GameId = 2; -} - -message PlayerGameRec{ - int32 Id = 1; - string Name = 2; - int32 Head = 3; - int64 Coin = 4; - int32 Pos = 5; - repeated int32 OtherParams = 6; -} - -message GameRec{ - int32 RecId = 1; - repeated PlayerGameRec Datas = 2; - int64 Ts = 3; - int32 RoomId = 4; - int32 GameMode = 5; - int32 SceneType = 6; - int32 GameId = 7; - int32 TotalOfGames = 8; - int32 NumOfGames = 9; - int32 RoomFeeMode = 10; - int32 RoomCardCnt = 11; - repeated int32 Params = 12; - int32 GameTime = 13; -} - -//PACKET_SC_GETGAMEREC -message SCGetGameRec{ - repeated GameRec Recs = 1; - int32 Ver = 2; - int32 GameId = 3; -} - -//PACKET_CS_SHARESUC -message CSShareSuc{ - int32 ShareType = 1; //分享类型 1:微信好友 2:朋友圈 -} - -//PACKET_SC_SHARESUC -message SCShareSuc{ - OpResultCode_Game OpRetCode = 1; //结果 -} - -//PACKET_CS_FORCESTART -message CSForceStart{ -} - -//PACKET_SC_FORCESTART -message SCForceStart{ - OpResultCode_Game OpRetCode = 1; //结果 -} - -//PACKET_CS_INVITEROBOT -message CSInviteRobot{ - int32 GameId = 1; - bool IsAgent = 2; //0:自己玩 1:机器人代替我 -} - -//玩家设置标记 -//PACKET_CS_PLAYER_SWITCHFLAG -message CSPlayerSwithFlag{ - int32 Flag = 1; - int32 Mark = 2; //1:设置 0:取消 -} - -//玩家商城购买 -//PACKET_CS_SHOPBUY -message CSShopBuy{ - int32 Id = 1; //商品ID - int32 Count = 2; //数量 -} - -//PACKET_SC_SHOPBUY -message SCShopBuy{ - int32 Id = 1; - OpResultCode_Game OpRetCode = 2; //结果 - int32 CostType = 3; //消耗类型 - int32 CostNum = 4; //消耗数量 - int32 GainType = 5; //获得类型 - int32 GainNum = 6; //获得数量 -} - -//CS_JOINGAME -//请求的通知 -message CSJoinGame{ - int32 MsgType = 1;//0.请求信息1.确认信息 - int32 SnId = 2;//type=1发送,为服务器下发的数据,原数据发送 - int32 Pos = 3;//type=0时发送,为申请坐下的位置,索引0开始 - bool Agree = 4;//type=1时发送,true为同意,false为拒绝 -} -//SC_TJOINGAME -//请求的通知 -message SCJoinGame{ - int32 MsgType = 1;//0.请求信息1.确认信息 - string Name = 2;//type=0为申请者的昵称,和snid同步发送,广播范围是房间内用户 - int32 SnId = 3;//type=0申请者ID - OpResultCode_Game OpRetCode = 4;//type=1时,为申请的结果,为0成功,其他的为错误代码 1 座位已满 2 观战人数已满 -} -//PACKET_CS_ENTERDGGAME -message CSEnterDgGame{ - int32 LoginType = 1;//0.试玩登录1.正常登录 - int32 DgGameId = 2;//游戏ID - string Domains = 3;//sdk - -} -message SCEnterDgGame{ - OpResultCode_Game OpRetCode = 1; //结果 - string LoginUrl = 2; - string Token = 3; - int32 DgGameId = 4;//游戏ID - int32 CodeId = 5; - string Domains = 6; - repeated string List = 7; -} -//PACKET_CS_LEAVEDGGAME -message CSLeaveDgGame{ -} -message SCLeaveDgGame{ - OpResultCode_Game OpRetCode = 1; //结果 -} - -//第三方个人账户信息统计 -message CSThridAccountStatistic{ - int32 ReqId = 1; //-1返回全部平台信息,0为系统平台 -} -message ThridAccount{ - int32 ThridPlatformId = 1; - string Name = 2; - int32 Status = 3; //200正常,403异常 - int64 Balance = 4; -} -message SCThridAccountStatistic{ - int32 ReqId = 1; - repeated ThridAccount Accounts = 2; -} - -//第三方个人账户余额转入转出 -message CSThridAccountTransfer{ - int32 FromId = 1; - int32 ToId = 2; - int64 Amount = 3; -} -message SCThridAccountTransfer{ - OpResultCode_Game OpRetCode = 1; //结果 - repeated ThridAccount Accounts = 2; //OpRetCode为0时,两条数据 分别是from to -} - -message CSEnterThridGame{ - int32 ThridGameId = 2;//第三方游戏ID -} -message SCEnterThridGame{ - OpResultCode_Game OpRetCode = 1; //结果 - string EnterUrl = 2; - int32 ScreenOrientationType = 3; - int32 ThridGameId = 4;//第三方游戏ID -} - -message CSLeaveThridGame{ -} -message SCLeaveThridGame{ - OpResultCode_Game OpRetCode = 1; //结果 -} - -message CSThridGameList{ -} - -message ThridGameDatas{ - string ThridGameId = 1;//第三方游戏ID - string ThridGameName = 2;//游戏名 -} - -message ThridGamePlatforms{ - int32 ThridPlatformId = 1; - string ThridPlatformName = 2;//平台名 - repeated ThridGameDatas GameDatas = 3; -} - -message SCThridGameList{ - OpResultCode_Game OpRetCode = 1; //结果 - repeated ThridGamePlatforms GamePlatforms = 2; -} - -message CSThridGameBalanceUpdate{ -} -message SCThridGameBalanceUpdate{ - OpResultCode_Game OpRetCode = 1; //结果 - int64 Coin = 2;//玩家的余额 -} -message SCThridGameBalanceUpdateState{ - OpResultCode_Game OpRetCode = 1; //结果 -} - -//创建私人房间 -//PACKET_CS_CREATEPRIVATEROOM -message CSCreatePrivateRoom{ - int32 GameFreeId = 1; //游戏id - repeated int32 Params = 2; //场参数 1:局数索引(从1开始) 2:中途加入 3:同IP -} - -//创建私人房间 -//PACKET_SC_CREATEPRIVATEROOM -message SCCreatePrivateRoom{ - //游戏ID - int32 GameFreeId = 1; //游戏id - repeated int32 Params = 2; //场参数 1:局数索引(从1开始) 2:中途加入 3:同IP - int32 RoomId = 3; //房间编号 - OpResultCode_Game OpRetCode = 4; //结果 -} - -//个人创建的房间信息 -message PrivateRoomInfo{ - int32 GameFreeId = 1; //游戏id - int32 RoomId = 2; //房间编号 - int32 CurrRound = 3; //当前第几轮 - int32 MaxRound = 4; //最多多少轮 - int32 CurrNum = 5; //当前人数 - int32 MaxPlayer = 6; //最大人数 - int32 CreateTs = 7; //创建时间戳 -} - -//获取代开的房间列表 -//PACKET_CS_GETPRIVATEROOMLIST -message CSGetPrivateRoomList{ -} - -//PACKET_SC_GETPRIVATEROOMLIST -message SCGetPrivateRoomList{ - repeated PrivateRoomInfo Datas = 1; //房间列表 -} - -//获取代开的房间历史记录 -//PACKET_CS_GETPRIVATEROOMHISTORY -message CSGetPrivateRoomHistory{ - int32 QueryTime = 1; //查询日期 YYYYMMDD -} - -//已开房间历史记录 -message PrivateRoomHistory{ - int32 GameFreeId = 1; //游戏id - int32 RoomId = 2; //房间编号 - int32 CreateTime = 3; //创建时间,时间戳 - int32 DestroyTime = 4; //结束时间,时间戳 - int32 CreateFee = 5; //房费 -} - -//PACKET_SC_GETPRIVATEROOMHISTORY -message SCGetPrivateRoomHistory{ - int32 QueryTime = 1; //查询日期 - repeated PrivateRoomHistory Datas = 2; //历史开房记录 -} - -//PACKET_CS_DESTROYPRIVATEROOM -message CSDestroyPrivateRoom{ - int32 RoomId = 1; -} - -//PACKET_SC_DESTROYPRIVATEROOM -message SCDestroyPrivateRoom{ - int32 RoomId = 1; //房间编号 - OpResultCode_Game OpRetCode = 2; //结果 - int32 State = 3; //状态 0:删除中 1:已删除 -} - -//PACKET_CS_QUERYROOMINFO -message CSQueryRoomInfo{ - repeated int32 GameIds = 1; - int32 GameSite = 2; //1.初级 2.中级 3.高级 - repeated int32 Id = 3; //gamefreeid - int32 SceneMode = 4; // 0公共房 2私人房 -} - -//个人创建的房间信息 -message QRoomInfo{ - int32 GameFreeId = 1; //游戏id - int32 GameId = 2; - int32 RoomId = 3; //房间编号 - int64 BaseCoin = 4; - int64 LimitCoin = 5; - int32 CurrNum = 6; //当前人数 - int32 MaxPlayer = 7; //最大人数 - int32 Creator = 8; - int32 CreateTs = 9; //创建时间戳 - repeated int32 Params = 10; // 建房参数 -} - -//PACKET_SC_QUERYROOMINFO -message SCQueryRoomInfo{ - repeated int32 GameIds = 1; - int32 GameSite = 2; //1.初级 2.中级 3.高级 - repeated QRoomInfo RoomInfo = 3; //房间列表 - OpResultCode_Game OpRetCode = 4; //结果 -} -//注册观察者,用于推送游戏的状态信息 -//PACKET_CS_GAMEOBSERVE -message CSGameObserve{ - int32 GameId = 1; //游戏ID - bool StartOrEnd = 2; //打开或者关闭 -} -//PACKET_SC_GAMESUBLIST -message GameSubRecord { - int32 GameFreeId = 1; - int32 LogCnt = 2; - int32 NewLog = 3; //新结果 - repeated int32 TotleLog = 4; //最近几局的中奖结果 -} -message SCGameSubList { - repeated GameSubRecord List = 1; -} -//游戏中的状态 -message GameState { - int32 GameFreeId = 1; - int64 Ts = 2; - int32 Sec = 3; -} -message SCGameState { - repeated GameState List = 1; -} - -//奖金池数据 -message LotteryData { - int32 GameFreeId = 1; - int64 Value = 2; -} -//奖金池同步 PACKET_SC_LOTTERYSYNC -message SCLotterySync { - repeated LotteryData Datas = 1; -} - -//PACKET_CS_LOTTERYLOG = 2288; -message CSLotteryLog { - int32 GameFreeId = 1; -} - -//奖池中奖记录 -message LotteryLog { - int32 Time = 1; - string NickName = 2; - repeated int32 Card = 3; - int32 Kind = 4; - int32 Coin = 5; -} - -//PACKET_SC_LOTTERYLOG = 2289; -message SCLotteryLog { - int32 GameFreeId = 1; - repeated LotteryLog Logs = 2; -} - -//PACKET_SC_LOTTERYBILL = 2290 -message SCLotteryBill { - int32 GameFreeId = 1; - int32 SnId = 2; - string Name = 3; - int32 Kind = 4; - repeated int32 Card = 5; - int64 Value = 6; -} - -message GameConfig1{ - int32 LogicId = 1; //对应DB_GameFree.xlsx中的id - int64 LimitCoin = 2; //进房下限 - int64 MaxCoinLimit = 3;//入场上限 - int32 BaseScore = 4; //底分 - repeated int64 OtherIntParams = 5; //其他参数 - int32 BetScore = 6; //押注限制 - repeated int32 MaxBetCoin = 7; //多门押注限制 - int32 MatchMode = 8;//0:默认1:队列 - int64 LotteryCoin = 9;//彩金池 - string LotteryCfg = 10;//彩金池配置 - bool Status = 11; //游戏开关 全局开关&&平台开关 - int32 SceneType = 12; // 场次类型 - repeated int32 ChessGradeLimit =13; // 入场象棋积分限制区间 - int32 RankType = 14; // 段位类型 - int32 SceneAdd = 15; // 场次加成 -} -//PACKET_CS_GETGAMECONFIG = 2231 -message CSGetGameConfig { - string Platform = 1; //平台 - string Channel = 2; //渠道号 - int32 GameId = 3; //游戏id -} - -message ChessRankInfo { - int32 Score = 1; // 积分 - string Name = 2; // 段位名称 -} - -//PACKET_SC_GETGAMECONFIG = 2232 -message SCGetGameConfig { - repeated GameConfig1 GameCfg = 1;//指定游戏的配置信息 - int32 GameId = 2; //游戏Id - repeated ChessRankInfo ChessRanks = 3; //段位表 -} - -//PACKET_SC_CHANGEGAMESTATUS == 2233 -message SCChangeGameStatus { - repeated GameConfig1 GameCfg = 1; //全局游戏状态发生变动,且自身平台游戏转台处于开启 -} - -//PACKET_SC_CHANGEENTRYSWITCH -message SCChangeEntrySwitch { - int32 Index = 1; // 游戏id - repeated bool Switch = 2; // 0:游戏入口开关 1:hot开关 2:new开关 -} - //PACKET_CS_ENTERGAME message CSEnterGame { int32 Id = 1; //游戏id @@ -770,6 +214,7 @@ message SCEnterGame { int32 MinResVer = 6; //最低资源版本号 int32 LatestResVer = 7; //最新资源版本号 } + //PACKET_CS_QUITGAME message CSQuitGame { int32 Id = 1; //游戏id @@ -781,19 +226,157 @@ message SCQuitGame { int32 Id = 2; int32 Reason = 3;//原因 } -//PACKET_CS_UPLOADLOC -message CSUploadLoc{ - int32 Longitude = 1; //经度 - int32 Latitude = 2; //纬度 - string City = 3; //城市 例:中国-河南省-郑州市 + +message GameConfig1{ + int32 LogicId = 1; //对应DB_GameFree.xlsx中的id + int64 LimitCoin = 2; //进房下限 + int64 MaxCoinLimit = 3;//入场上限 + int32 BaseScore = 4; //底分 + repeated int64 OtherIntParams = 5; //其他参数 + int32 BetScore = 6; //押注限制 + repeated int32 MaxBetCoin = 7; //多门押注限制 + int32 MatchMode = 8;//0:默认1:队列 + int64 LotteryCoin = 9;//彩金池 + string LotteryCfg = 10;//彩金池配置 + bool Status = 11; //游戏开关 全局开关&&平台开关 + int32 SceneType = 12; // 场次类型 + repeated int32 ChessGradeLimit =13; // 入场象棋积分限制区间 + int32 RankType = 14; // 段位类型 + int32 SceneAdd = 15; // 场次加成 } -//PACKET_SC_UPLOADLOC -message SCUploadLoc{ - int32 Pos = 1; - int32 Longitude = 2; //经度 - int32 Latitude = 3; //纬度 - string City = 4; //城市 例:中国-河南省-郑州市 +//PACKET_CS_GETGAMECONFIG +message CSGetGameConfig { + string Platform = 1; //平台 + string Channel = 2; //渠道号 + int32 GameId = 3; //游戏id +} + +message ChessRankInfo { + int32 Score = 1; // 积分 + string Name = 2; // 段位名称 +} + +//PACKET_SC_GETGAMECONFIG +message SCGetGameConfig { + repeated GameConfig1 GameCfg = 1;//指定游戏的配置信息 + int32 GameId = 2; //游戏Id + repeated ChessRankInfo ChessRanks = 3; //段位表 +} + +//PACKET_SC_CHANGEGAMESTATUS == 2233 +message SCChangeGameStatus { + repeated GameConfig1 GameCfg = 1; //全局游戏状态发生变动,且自身平台游戏转台处于开启 +} + +//PACKET_SC_CHANGEENTRYSWITCH +message SCChangeEntrySwitch { + int32 Index = 1; // 游戏id + repeated bool Switch = 2; // 0:游戏入口开关 1:hot开关 2:new开关 +} + +//创建竞技馆私人房间 +//PACKET_CS_CREATEPRIVATEROOM +message CSCreatePrivateRoom{ + int32 GameFreeId = 1; //游戏id + int32 RoomTypeId = 2; //房间类型id + int32 RoomConfigId = 3; //房间配置id + int32 Round = 4; //局数 + int32 PlayerNum = 5; //人数 + int32 NeedPassword = 6; //是否需要密码 1需要 + int32 CostType = 7; // 房卡支付方式 1AA 2房主 + int32 Voice = 8; //是否开启语音 1开启 +} +//PACKET_SC_CREATEPRIVATEROOM +message SCCreatePrivateRoom{ + OpResultCode_Game OpRetCode = 1; //结果 + int32 GameFreeId = 2; //游戏id + int32 RoomTypeId = 3; //房间类型id + int32 RoomConfigId = 4; //房间配置id + int32 Round = 5; //局数 + int32 PlayerNum = 6; //人数 + int32 NeedPassword = 7; //是否需要密码 1需要 + int32 CostType = 8; //房卡支付方式 1AA 2房主 + int32 Voice = 9; //是否开启语音 1开启 + int32 RoomId = 10; //房间id + string Password = 11; //房间密码 +} + +//PACKET_CS_GETPRIVATEROOMLIST +message CSGetPrivateRoomList{ + int32 RoomConfigId = 1; //房间配置id + int32 GameFreeId = 2; // 场次id + int32 RoomId = 3; // 房间id + int32 RoomTypeId = 4; // 玩法类型id +} + +message PrivatePlayerInfo{ + int32 SnId = 1; // 玩家id + string Name = 2; // 玩家昵称 + int32 UseRoleId = 3;//使用的人物模型id +} + +//个人创建的房间信息 +message PrivateRoomInfo{ + int32 GameFreeId = 1; //场次id + int32 GameId = 2; //游戏id + int32 RoomTypeId = 3; //玩法类型id + int32 RoomConfigId = 4; //房间配置id + int32 RoomId = 5; //房间号 + int32 NeedPassword = 6; //是否需要密码 1是 + int32 CurrRound = 7; //当前第几轮 + int32 MaxRound = 8; //最大轮数 + int32 CurrNum = 9; //当前人数 + int32 MaxPlayer = 10; //最大人数 + int64 CreateTs = 11; //创建时间戳 + int32 State = 12; //房间状态 0等待中 1进行中 2已结束 + repeated PrivatePlayerInfo Players = 13; //玩家列表 +} + +//PACKET_SC_GETPRIVATEROOMLIST +message SCGetPrivateRoomList{ + int32 Tp = 1; // 0所有配置 1更新 2新增 3删除 + repeated PrivateRoomInfo Datas = 2; //房间列表 +} + +//PACKET_CS_QUERYROOMINFO +message CSQueryRoomInfo{ + repeated int32 GameIds = 1; + int32 GameSite = 2; //1.初级 2.中级 3.高级 + repeated int32 Id = 3; //gamefreeid + int32 SceneMode = 4; // 0公共房 2私人房 +} + +//自由桌房间信息 +message QRoomInfo{ + int32 GameFreeId = 1; //游戏id + int32 GameId = 2; + int32 RoomId = 3; //房间编号 + int64 BaseCoin = 4; + int64 LimitCoin = 5; + int32 CurrNum = 6; //当前人数 + int32 MaxPlayer = 7; //最大人数 + int32 Creator = 8; + int32 CreateTs = 9; //创建时间戳 + repeated int32 Params = 10; // 建房参数 +} + +//PACKET_SC_QUERYROOMINFO +message SCQueryRoomInfo{ + repeated int32 GameIds = 1; + int32 GameSite = 2; //1.初级 2.中级 3.高级 + repeated QRoomInfo RoomInfo = 3; //房间列表 + OpResultCode_Game OpRetCode = 4; //结果 +} + +message GameState { + int32 GameFreeId = 1; + int64 Ts = 2; + int32 Sec = 3; +} +//PACKET_SC_GAMESTATE +message SCGameState { + repeated GameState List = 1; } //PACKET_CS_AUDIENCESIT @@ -850,6 +433,46 @@ message SCRecordAndNotice{ // PACKET_SC_NoticeChange message SCNoticeChange{} + +//PACKET_CS_DESTROYROOM +message CSDestroyRoom{ +} +//PACKET_SC_DESTROYROOM +message SCDestroyRoom{ + int32 RoomId = 1; //房间编号 + OpResultCode_Game OpRetCode = 2; //结果 + int32 IsForce = 3; //是否强制销毁 +} + +//PACKET_CS_LEAVEROOM +//PACKET_CS_AUDIENCE_LEAVEROOM +//玩家离开房间,返回大厅 +message CSLeaveRoom{ + int32 Mode = 1; //离开方式 0:退出 1:暂离(占着座位,返回大厅) +} +//PACKET_SC_LEAVEROOM +message SCLeaveRoom{ + OpResultCode_Game OpRetCode = 1; //结果 + int32 Reason = 2;//原因 0:主动退出 1:被踢出 + int32 RoomId = 3;//房间ID + int32 Mode = 4; +} + +//PACKET_CS_FORCESTART +message CSForceStart{ +} +//PACKET_SC_FORCESTART +message SCForceStart{ + OpResultCode_Game OpRetCode = 1; //结果 +} + +//玩家设置标记 +//PACKET_CS_PLAYER_SWITCHFLAG +message CSPlayerSwithFlag{ + int32 Flag = 1; + int32 Mark = 2; //1:设置 0:取消 +} + // PACKET_CSRoomEvent message CSRoomEvent{ int32 Tp = 1; // 事件类型 1普通消息 2互动表情 @@ -863,4 +486,57 @@ message SCRoomEvent{ string Content = 4; // 内容 repeated int32 Param= 5; // 参数 int64 Ts = 6; // 时间戳 +} + +message ItemInfo{ + int32 Id = 1; // id + int32 Num = 2; // 数量 +} + +enum DataType{ + Zero = 0; + PrivateRoomList = 1; // 竞技馆房间列表 返回消息 PACKET_SC_GETPRIVATEROOMLIST +} + +// PACKET_CSTouchType +// 每10秒发送一次,保持更新 +message CSTouchType{ + DataType Tp = 1; // 保持更新类型 + // Tp: Params + // 1: 房间配置id + repeated int32 Params = 3; +} + +message RoomConfigInfo{ + int32 Id = 2; // 配置id + string Name = 3; // 配置名称 + int32 RoomType = 4; // 房间类型id, RoomTypeInfo.Id + int32 On = 5; // 开关 1开启 2关闭 + int32 SortId = 6; // 排序ID + repeated ItemInfo Cost = 7; // 进入房间消耗 + repeated ItemInfo Reward = 8; // 进入房间奖励 + repeated string OnChannelName = 9; // 开启的渠道名称 + repeated int32 GameFreeId = 10; // 场次id + repeated int32 Round = 11; // 局数 + repeated int32 PlayerNum = 12; // 人数 + int32 NeedPassword = 13; // 是否需要密码 1是 2否 3自定义 + int32 CostType = 14; // 消耗类型 1AA 2房主 3自定义 + int32 Voice = 15; // 是否开启语音 1是 2否 3自定义 + string ImageURI = 16; // 奖励图片 +} + +message RoomTypeInfo{ + int32 Id = 1; // id + string Name = 2; // 类型名称 + int32 On = 3; // 开关 1开启 2关闭 + int32 SortId = 4; // 排序ID + repeated RoomConfigInfo List = 5; // 房间配置列表 +} + +// PACKET_CSRoomConfig +message CSRoomConfig{} + +// PACKET_SCRoomConfig 竞技馆房间配置 +message SCRoomConfig{ + repeated RoomTypeInfo List = 1; } \ No newline at end of file diff --git a/protocol/gamehall/gamehall.js b/protocol/gamehall/gamehall.js deleted file mode 100644 index a20c8d6..0000000 --- a/protocol/gamehall/gamehall.js +++ /dev/null @@ -1,46999 +0,0 @@ -/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/ -"use strict"; - -var $protobuf = require("protobufjs/minimal.js"); - -// Common aliases -var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util; - -// Exported root namespace -var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {}); - -$root.gamehall = (function() { - - /** - * Namespace gamehall. - * @exports gamehall - * @namespace - */ - var gamehall = {}; - - /** - * OpResultCode enum. - * @name gamehall.OpResultCode - * @enum {number} - * @property {number} OPRC_Sucess=0 OPRC_Sucess value - * @property {number} OPRC_Error=1 OPRC_Error value - * @property {number} OPRC_RoomIsFull=1019 OPRC_RoomIsFull value - * @property {number} OPRC_RoomHadClosed=1053 OPRC_RoomHadClosed value - * @property {number} OPRC_SceneServerMaintain=1054 OPRC_SceneServerMaintain value - * @property {number} OPRC_CoinNotEnough=1056 OPRC_CoinNotEnough value - * @property {number} OPRC_CoinTooMore=1058 OPRC_CoinTooMore value - * @property {number} OPRC_CoinSceneYouAreGaming=1059 OPRC_CoinSceneYouAreGaming value - * @property {number} OPRC_NoFindDownTiceRoom=1079 OPRC_NoFindDownTiceRoom value - * @property {number} OPRC_ChangeRoomTooOften=1080 OPRC_ChangeRoomTooOften value - * @property {number} OPRC_NoOtherDownTiceRoom=1081 OPRC_NoOtherDownTiceRoom value - * @property {number} OPRC_OpYield=1082 OPRC_OpYield value - * @property {number} OPRC_RoomGameTimes=1103 OPRC_RoomGameTimes value - * @property {number} OPRC_CoinSceneEnterQueueSucc=1105 OPRC_CoinSceneEnterQueueSucc value - * @property {number} OPRC_CoinSceneEnterQueueFail=1106 OPRC_CoinSceneEnterQueueFail value - * @property {number} OPRC_CoinSceneEnterQueueOverTime=1107 OPRC_CoinSceneEnterQueueOverTime value - * @property {number} OPRC_MustBindPromoter=1113 OPRC_MustBindPromoter value - * @property {number} OPRC_YourAreGamingCannotLeave=1078 OPRC_YourAreGamingCannotLeave value - */ - gamehall.OpResultCode = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "OPRC_Sucess"] = 0; - values[valuesById[1] = "OPRC_Error"] = 1; - values[valuesById[1019] = "OPRC_RoomIsFull"] = 1019; - values[valuesById[1053] = "OPRC_RoomHadClosed"] = 1053; - values[valuesById[1054] = "OPRC_SceneServerMaintain"] = 1054; - values[valuesById[1056] = "OPRC_CoinNotEnough"] = 1056; - values[valuesById[1058] = "OPRC_CoinTooMore"] = 1058; - values[valuesById[1059] = "OPRC_CoinSceneYouAreGaming"] = 1059; - values[valuesById[1079] = "OPRC_NoFindDownTiceRoom"] = 1079; - values[valuesById[1080] = "OPRC_ChangeRoomTooOften"] = 1080; - values[valuesById[1081] = "OPRC_NoOtherDownTiceRoom"] = 1081; - values[valuesById[1082] = "OPRC_OpYield"] = 1082; - values[valuesById[1103] = "OPRC_RoomGameTimes"] = 1103; - values[valuesById[1105] = "OPRC_CoinSceneEnterQueueSucc"] = 1105; - values[valuesById[1106] = "OPRC_CoinSceneEnterQueueFail"] = 1106; - values[valuesById[1107] = "OPRC_CoinSceneEnterQueueOverTime"] = 1107; - values[valuesById[1113] = "OPRC_MustBindPromoter"] = 1113; - values[valuesById[1078] = "OPRC_YourAreGamingCannotLeave"] = 1078; - return values; - })(); - - /** - * CoinSceneGamePacketID enum. - * @name gamehall.CoinSceneGamePacketID - * @enum {number} - * @property {number} PACKET_CoinSceneGame_ZERO=0 PACKET_CoinSceneGame_ZERO value - * @property {number} PACKET_CS_COINSCENE_GETPLAYERNUM=2320 PACKET_CS_COINSCENE_GETPLAYERNUM value - * @property {number} PACKET_SC_COINSCENE_GETPLAYERNUM=2321 PACKET_SC_COINSCENE_GETPLAYERNUM value - * @property {number} PACKET_CS_COINSCENE_OP=2322 PACKET_CS_COINSCENE_OP value - * @property {number} PACKET_SC_COINSCENE_OP=2323 PACKET_SC_COINSCENE_OP value - * @property {number} PACKET_CS_COINSCENE_LISTROOM=2324 PACKET_CS_COINSCENE_LISTROOM value - * @property {number} PACKET_SC_COINSCENE_LISTROOM=2325 PACKET_SC_COINSCENE_LISTROOM value - * @property {number} PACKET_SC_COINSCENE_QUEUESTATE=2326 PACKET_SC_COINSCENE_QUEUESTATE value - */ - gamehall.CoinSceneGamePacketID = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "PACKET_CoinSceneGame_ZERO"] = 0; - values[valuesById[2320] = "PACKET_CS_COINSCENE_GETPLAYERNUM"] = 2320; - values[valuesById[2321] = "PACKET_SC_COINSCENE_GETPLAYERNUM"] = 2321; - values[valuesById[2322] = "PACKET_CS_COINSCENE_OP"] = 2322; - values[valuesById[2323] = "PACKET_SC_COINSCENE_OP"] = 2323; - values[valuesById[2324] = "PACKET_CS_COINSCENE_LISTROOM"] = 2324; - values[valuesById[2325] = "PACKET_SC_COINSCENE_LISTROOM"] = 2325; - values[valuesById[2326] = "PACKET_SC_COINSCENE_QUEUESTATE"] = 2326; - return values; - })(); - - gamehall.CSCoinSceneGetPlayerNum = (function() { - - /** - * Properties of a CSCoinSceneGetPlayerNum. - * @memberof gamehall - * @interface ICSCoinSceneGetPlayerNum - * @property {number|null} [GameId] CSCoinSceneGetPlayerNum GameId - * @property {number|null} [GameModel] CSCoinSceneGetPlayerNum GameModel - */ - - /** - * Constructs a new CSCoinSceneGetPlayerNum. - * @memberof gamehall - * @classdesc Represents a CSCoinSceneGetPlayerNum. - * @implements ICSCoinSceneGetPlayerNum - * @constructor - * @param {gamehall.ICSCoinSceneGetPlayerNum=} [properties] Properties to set - */ - function CSCoinSceneGetPlayerNum(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCoinSceneGetPlayerNum GameId. - * @member {number} GameId - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @instance - */ - CSCoinSceneGetPlayerNum.prototype.GameId = 0; - - /** - * CSCoinSceneGetPlayerNum GameModel. - * @member {number} GameModel - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @instance - */ - CSCoinSceneGetPlayerNum.prototype.GameModel = 0; - - /** - * Creates a new CSCoinSceneGetPlayerNum instance using the specified properties. - * @function create - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {gamehall.ICSCoinSceneGetPlayerNum=} [properties] Properties to set - * @returns {gamehall.CSCoinSceneGetPlayerNum} CSCoinSceneGetPlayerNum instance - */ - CSCoinSceneGetPlayerNum.create = function create(properties) { - return new CSCoinSceneGetPlayerNum(properties); - }; - - /** - * Encodes the specified CSCoinSceneGetPlayerNum message. Does not implicitly {@link gamehall.CSCoinSceneGetPlayerNum.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {gamehall.ICSCoinSceneGetPlayerNum} message CSCoinSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneGetPlayerNum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.GameModel != null && Object.hasOwnProperty.call(message, "GameModel")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameModel); - return writer; - }; - - /** - * Encodes the specified CSCoinSceneGetPlayerNum message, length delimited. Does not implicitly {@link gamehall.CSCoinSceneGetPlayerNum.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {gamehall.ICSCoinSceneGetPlayerNum} message CSCoinSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneGetPlayerNum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCoinSceneGetPlayerNum message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCoinSceneGetPlayerNum} CSCoinSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneGetPlayerNum.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCoinSceneGetPlayerNum(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.GameModel = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCoinSceneGetPlayerNum message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCoinSceneGetPlayerNum} CSCoinSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneGetPlayerNum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCoinSceneGetPlayerNum message. - * @function verify - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCoinSceneGetPlayerNum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.GameModel != null && message.hasOwnProperty("GameModel")) - if (!$util.isInteger(message.GameModel)) - return "GameModel: integer expected"; - return null; - }; - - /** - * Creates a CSCoinSceneGetPlayerNum message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCoinSceneGetPlayerNum} CSCoinSceneGetPlayerNum - */ - CSCoinSceneGetPlayerNum.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCoinSceneGetPlayerNum) - return object; - var message = new $root.gamehall.CSCoinSceneGetPlayerNum(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.GameModel != null) - message.GameModel = object.GameModel | 0; - return message; - }; - - /** - * Creates a plain object from a CSCoinSceneGetPlayerNum message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {gamehall.CSCoinSceneGetPlayerNum} message CSCoinSceneGetPlayerNum - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCoinSceneGetPlayerNum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.GameModel = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.GameModel != null && message.hasOwnProperty("GameModel")) - object.GameModel = message.GameModel; - return object; - }; - - /** - * Converts this CSCoinSceneGetPlayerNum to JSON. - * @function toJSON - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @instance - * @returns {Object.} JSON object - */ - CSCoinSceneGetPlayerNum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCoinSceneGetPlayerNum - * @function getTypeUrl - * @memberof gamehall.CSCoinSceneGetPlayerNum - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCoinSceneGetPlayerNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCoinSceneGetPlayerNum"; - }; - - return CSCoinSceneGetPlayerNum; - })(); - - gamehall.SCCoinSceneGetPlayerNum = (function() { - - /** - * Properties of a SCCoinSceneGetPlayerNum. - * @memberof gamehall - * @interface ISCCoinSceneGetPlayerNum - * @property {Array.|null} [Nums] SCCoinSceneGetPlayerNum Nums - */ - - /** - * Constructs a new SCCoinSceneGetPlayerNum. - * @memberof gamehall - * @classdesc Represents a SCCoinSceneGetPlayerNum. - * @implements ISCCoinSceneGetPlayerNum - * @constructor - * @param {gamehall.ISCCoinSceneGetPlayerNum=} [properties] Properties to set - */ - function SCCoinSceneGetPlayerNum(properties) { - this.Nums = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinSceneGetPlayerNum Nums. - * @member {Array.} Nums - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @instance - */ - SCCoinSceneGetPlayerNum.prototype.Nums = $util.emptyArray; - - /** - * Creates a new SCCoinSceneGetPlayerNum instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {gamehall.ISCCoinSceneGetPlayerNum=} [properties] Properties to set - * @returns {gamehall.SCCoinSceneGetPlayerNum} SCCoinSceneGetPlayerNum instance - */ - SCCoinSceneGetPlayerNum.create = function create(properties) { - return new SCCoinSceneGetPlayerNum(properties); - }; - - /** - * Encodes the specified SCCoinSceneGetPlayerNum message. Does not implicitly {@link gamehall.SCCoinSceneGetPlayerNum.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {gamehall.ISCCoinSceneGetPlayerNum} message SCCoinSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneGetPlayerNum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Nums != null && message.Nums.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.Nums.length; ++i) - writer.int32(message.Nums[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCCoinSceneGetPlayerNum message, length delimited. Does not implicitly {@link gamehall.SCCoinSceneGetPlayerNum.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {gamehall.ISCCoinSceneGetPlayerNum} message SCCoinSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneGetPlayerNum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinSceneGetPlayerNum message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinSceneGetPlayerNum} SCCoinSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneGetPlayerNum.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinSceneGetPlayerNum(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Nums && message.Nums.length)) - message.Nums = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Nums.push(reader.int32()); - } else - message.Nums.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinSceneGetPlayerNum message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinSceneGetPlayerNum} SCCoinSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneGetPlayerNum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinSceneGetPlayerNum message. - * @function verify - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinSceneGetPlayerNum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Nums != null && message.hasOwnProperty("Nums")) { - if (!Array.isArray(message.Nums)) - return "Nums: array expected"; - for (var i = 0; i < message.Nums.length; ++i) - if (!$util.isInteger(message.Nums[i])) - return "Nums: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCCoinSceneGetPlayerNum message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinSceneGetPlayerNum} SCCoinSceneGetPlayerNum - */ - SCCoinSceneGetPlayerNum.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinSceneGetPlayerNum) - return object; - var message = new $root.gamehall.SCCoinSceneGetPlayerNum(); - if (object.Nums) { - if (!Array.isArray(object.Nums)) - throw TypeError(".gamehall.SCCoinSceneGetPlayerNum.Nums: array expected"); - message.Nums = []; - for (var i = 0; i < object.Nums.length; ++i) - message.Nums[i] = object.Nums[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCCoinSceneGetPlayerNum message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {gamehall.SCCoinSceneGetPlayerNum} message SCCoinSceneGetPlayerNum - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinSceneGetPlayerNum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Nums = []; - if (message.Nums && message.Nums.length) { - object.Nums = []; - for (var j = 0; j < message.Nums.length; ++j) - object.Nums[j] = message.Nums[j]; - } - return object; - }; - - /** - * Converts this SCCoinSceneGetPlayerNum to JSON. - * @function toJSON - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @instance - * @returns {Object.} JSON object - */ - SCCoinSceneGetPlayerNum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinSceneGetPlayerNum - * @function getTypeUrl - * @memberof gamehall.SCCoinSceneGetPlayerNum - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinSceneGetPlayerNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinSceneGetPlayerNum"; - }; - - return SCCoinSceneGetPlayerNum; - })(); - - gamehall.CSCoinSceneOp = (function() { - - /** - * Properties of a CSCoinSceneOp. - * @memberof gamehall - * @interface ICSCoinSceneOp - * @property {number|null} [Id] CSCoinSceneOp Id - * @property {number|null} [OpType] CSCoinSceneOp OpType - * @property {Array.|null} [OpParams] CSCoinSceneOp OpParams - * @property {string|null} [Platform] CSCoinSceneOp Platform - */ - - /** - * Constructs a new CSCoinSceneOp. - * @memberof gamehall - * @classdesc Represents a CSCoinSceneOp. - * @implements ICSCoinSceneOp - * @constructor - * @param {gamehall.ICSCoinSceneOp=} [properties] Properties to set - */ - function CSCoinSceneOp(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCoinSceneOp Id. - * @member {number} Id - * @memberof gamehall.CSCoinSceneOp - * @instance - */ - CSCoinSceneOp.prototype.Id = 0; - - /** - * CSCoinSceneOp OpType. - * @member {number} OpType - * @memberof gamehall.CSCoinSceneOp - * @instance - */ - CSCoinSceneOp.prototype.OpType = 0; - - /** - * CSCoinSceneOp OpParams. - * @member {Array.} OpParams - * @memberof gamehall.CSCoinSceneOp - * @instance - */ - CSCoinSceneOp.prototype.OpParams = $util.emptyArray; - - /** - * CSCoinSceneOp Platform. - * @member {string} Platform - * @memberof gamehall.CSCoinSceneOp - * @instance - */ - CSCoinSceneOp.prototype.Platform = ""; - - /** - * Creates a new CSCoinSceneOp instance using the specified properties. - * @function create - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {gamehall.ICSCoinSceneOp=} [properties] Properties to set - * @returns {gamehall.CSCoinSceneOp} CSCoinSceneOp instance - */ - CSCoinSceneOp.create = function create(properties) { - return new CSCoinSceneOp(properties); - }; - - /** - * Encodes the specified CSCoinSceneOp message. Does not implicitly {@link gamehall.CSCoinSceneOp.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {gamehall.ICSCoinSceneOp} message CSCoinSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneOp.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.OpType != null && Object.hasOwnProperty.call(message, "OpType")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpType); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 3, wireType 2 =*/26).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - if (message.Platform != null && Object.hasOwnProperty.call(message, "Platform")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.Platform); - return writer; - }; - - /** - * Encodes the specified CSCoinSceneOp message, length delimited. Does not implicitly {@link gamehall.CSCoinSceneOp.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {gamehall.ICSCoinSceneOp} message CSCoinSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneOp.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCoinSceneOp message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCoinSceneOp} CSCoinSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneOp.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCoinSceneOp(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.OpType = reader.int32(); - break; - } - case 3: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - case 4: { - message.Platform = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCoinSceneOp message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCoinSceneOp} CSCoinSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneOp.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCoinSceneOp message. - * @function verify - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCoinSceneOp.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpType != null && message.hasOwnProperty("OpType")) - if (!$util.isInteger(message.OpType)) - return "OpType: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - if (!$util.isString(message.Platform)) - return "Platform: string expected"; - return null; - }; - - /** - * Creates a CSCoinSceneOp message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCoinSceneOp} CSCoinSceneOp - */ - CSCoinSceneOp.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCoinSceneOp) - return object; - var message = new $root.gamehall.CSCoinSceneOp(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpType != null) - message.OpType = object.OpType | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.CSCoinSceneOp.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - if (object.Platform != null) - message.Platform = String(object.Platform); - return message; - }; - - /** - * Creates a plain object from a CSCoinSceneOp message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {gamehall.CSCoinSceneOp} message CSCoinSceneOp - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCoinSceneOp.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.Id = 0; - object.OpType = 0; - object.Platform = ""; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpType != null && message.hasOwnProperty("OpType")) - object.OpType = message.OpType; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - object.Platform = message.Platform; - return object; - }; - - /** - * Converts this CSCoinSceneOp to JSON. - * @function toJSON - * @memberof gamehall.CSCoinSceneOp - * @instance - * @returns {Object.} JSON object - */ - CSCoinSceneOp.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCoinSceneOp - * @function getTypeUrl - * @memberof gamehall.CSCoinSceneOp - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCoinSceneOp.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCoinSceneOp"; - }; - - return CSCoinSceneOp; - })(); - - gamehall.SCCoinSceneOp = (function() { - - /** - * Properties of a SCCoinSceneOp. - * @memberof gamehall - * @interface ISCCoinSceneOp - * @property {gamehall.OpResultCode|null} [OpCode] SCCoinSceneOp OpCode - * @property {number|null} [Id] SCCoinSceneOp Id - * @property {number|null} [OpType] SCCoinSceneOp OpType - * @property {Array.|null} [OpParams] SCCoinSceneOp OpParams - */ - - /** - * Constructs a new SCCoinSceneOp. - * @memberof gamehall - * @classdesc Represents a SCCoinSceneOp. - * @implements ISCCoinSceneOp - * @constructor - * @param {gamehall.ISCCoinSceneOp=} [properties] Properties to set - */ - function SCCoinSceneOp(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinSceneOp OpCode. - * @member {gamehall.OpResultCode} OpCode - * @memberof gamehall.SCCoinSceneOp - * @instance - */ - SCCoinSceneOp.prototype.OpCode = 0; - - /** - * SCCoinSceneOp Id. - * @member {number} Id - * @memberof gamehall.SCCoinSceneOp - * @instance - */ - SCCoinSceneOp.prototype.Id = 0; - - /** - * SCCoinSceneOp OpType. - * @member {number} OpType - * @memberof gamehall.SCCoinSceneOp - * @instance - */ - SCCoinSceneOp.prototype.OpType = 0; - - /** - * SCCoinSceneOp OpParams. - * @member {Array.} OpParams - * @memberof gamehall.SCCoinSceneOp - * @instance - */ - SCCoinSceneOp.prototype.OpParams = $util.emptyArray; - - /** - * Creates a new SCCoinSceneOp instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {gamehall.ISCCoinSceneOp=} [properties] Properties to set - * @returns {gamehall.SCCoinSceneOp} SCCoinSceneOp instance - */ - SCCoinSceneOp.create = function create(properties) { - return new SCCoinSceneOp(properties); - }; - - /** - * Encodes the specified SCCoinSceneOp message. Does not implicitly {@link gamehall.SCCoinSceneOp.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {gamehall.ISCCoinSceneOp} message SCCoinSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneOp.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpCode); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Id); - if (message.OpType != null && Object.hasOwnProperty.call(message, "OpType")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.OpType); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 4, wireType 2 =*/34).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCCoinSceneOp message, length delimited. Does not implicitly {@link gamehall.SCCoinSceneOp.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {gamehall.ISCCoinSceneOp} message SCCoinSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneOp.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinSceneOp message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinSceneOp} SCCoinSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneOp.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinSceneOp(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int32(); - break; - } - case 2: { - message.Id = reader.int32(); - break; - } - case 3: { - message.OpType = reader.int32(); - break; - } - case 4: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinSceneOp message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinSceneOp} SCCoinSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneOp.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinSceneOp message. - * @function verify - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinSceneOp.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1019: - case 1053: - case 1054: - case 1056: - case 1058: - case 1059: - case 1079: - case 1080: - case 1081: - case 1082: - case 1103: - case 1105: - case 1106: - case 1107: - case 1113: - case 1078: - break; - } - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpType != null && message.hasOwnProperty("OpType")) - if (!$util.isInteger(message.OpType)) - return "OpType: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCCoinSceneOp message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinSceneOp} SCCoinSceneOp - */ - SCCoinSceneOp.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinSceneOp) - return object; - var message = new $root.gamehall.SCCoinSceneOp(); - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error": - case 1: - message.OpCode = 1; - break; - case "OPRC_RoomIsFull": - case 1019: - message.OpCode = 1019; - break; - case "OPRC_RoomHadClosed": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_CoinNotEnough": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_CoinSceneYouAreGaming": - case 1059: - message.OpCode = 1059; - break; - case "OPRC_NoFindDownTiceRoom": - case 1079: - message.OpCode = 1079; - break; - case "OPRC_ChangeRoomTooOften": - case 1080: - message.OpCode = 1080; - break; - case "OPRC_NoOtherDownTiceRoom": - case 1081: - message.OpCode = 1081; - break; - case "OPRC_OpYield": - case 1082: - message.OpCode = 1082; - break; - case "OPRC_RoomGameTimes": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_CoinSceneEnterQueueSucc": - case 1105: - message.OpCode = 1105; - break; - case "OPRC_CoinSceneEnterQueueFail": - case 1106: - message.OpCode = 1106; - break; - case "OPRC_CoinSceneEnterQueueOverTime": - case 1107: - message.OpCode = 1107; - break; - case "OPRC_MustBindPromoter": - case 1113: - message.OpCode = 1113; - break; - case "OPRC_YourAreGamingCannotLeave": - case 1078: - message.OpCode = 1078; - break; - } - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpType != null) - message.OpType = object.OpType | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.SCCoinSceneOp.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCCoinSceneOp message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {gamehall.SCCoinSceneOp} message SCCoinSceneOp - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinSceneOp.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.OpCode = options.enums === String ? "OPRC_Sucess" : 0; - object.Id = 0; - object.OpType = 0; - } - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode[message.OpCode] : message.OpCode; - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpType != null && message.hasOwnProperty("OpType")) - object.OpType = message.OpType; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - return object; - }; - - /** - * Converts this SCCoinSceneOp to JSON. - * @function toJSON - * @memberof gamehall.SCCoinSceneOp - * @instance - * @returns {Object.} JSON object - */ - SCCoinSceneOp.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinSceneOp - * @function getTypeUrl - * @memberof gamehall.SCCoinSceneOp - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinSceneOp.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinSceneOp"; - }; - - return SCCoinSceneOp; - })(); - - gamehall.CSCoinSceneListRoom = (function() { - - /** - * Properties of a CSCoinSceneListRoom. - * @memberof gamehall - * @interface ICSCoinSceneListRoom - * @property {number|null} [Id] CSCoinSceneListRoom Id - */ - - /** - * Constructs a new CSCoinSceneListRoom. - * @memberof gamehall - * @classdesc Represents a CSCoinSceneListRoom. - * @implements ICSCoinSceneListRoom - * @constructor - * @param {gamehall.ICSCoinSceneListRoom=} [properties] Properties to set - */ - function CSCoinSceneListRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCoinSceneListRoom Id. - * @member {number} Id - * @memberof gamehall.CSCoinSceneListRoom - * @instance - */ - CSCoinSceneListRoom.prototype.Id = 0; - - /** - * Creates a new CSCoinSceneListRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {gamehall.ICSCoinSceneListRoom=} [properties] Properties to set - * @returns {gamehall.CSCoinSceneListRoom} CSCoinSceneListRoom instance - */ - CSCoinSceneListRoom.create = function create(properties) { - return new CSCoinSceneListRoom(properties); - }; - - /** - * Encodes the specified CSCoinSceneListRoom message. Does not implicitly {@link gamehall.CSCoinSceneListRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {gamehall.ICSCoinSceneListRoom} message CSCoinSceneListRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneListRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - return writer; - }; - - /** - * Encodes the specified CSCoinSceneListRoom message, length delimited. Does not implicitly {@link gamehall.CSCoinSceneListRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {gamehall.ICSCoinSceneListRoom} message CSCoinSceneListRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinSceneListRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCoinSceneListRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCoinSceneListRoom} CSCoinSceneListRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneListRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCoinSceneListRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCoinSceneListRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCoinSceneListRoom} CSCoinSceneListRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinSceneListRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCoinSceneListRoom message. - * @function verify - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCoinSceneListRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - return null; - }; - - /** - * Creates a CSCoinSceneListRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCoinSceneListRoom} CSCoinSceneListRoom - */ - CSCoinSceneListRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCoinSceneListRoom) - return object; - var message = new $root.gamehall.CSCoinSceneListRoom(); - if (object.Id != null) - message.Id = object.Id | 0; - return message; - }; - - /** - * Creates a plain object from a CSCoinSceneListRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {gamehall.CSCoinSceneListRoom} message CSCoinSceneListRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCoinSceneListRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.Id = 0; - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - return object; - }; - - /** - * Converts this CSCoinSceneListRoom to JSON. - * @function toJSON - * @memberof gamehall.CSCoinSceneListRoom - * @instance - * @returns {Object.} JSON object - */ - CSCoinSceneListRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCoinSceneListRoom - * @function getTypeUrl - * @memberof gamehall.CSCoinSceneListRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCoinSceneListRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCoinSceneListRoom"; - }; - - return CSCoinSceneListRoom; - })(); - - gamehall.CoinSceneInfo = (function() { - - /** - * Properties of a CoinSceneInfo. - * @memberof gamehall - * @interface ICoinSceneInfo - * @property {number|null} [SceneId] CoinSceneInfo SceneId - * @property {number|null} [PlayerNum] CoinSceneInfo PlayerNum - */ - - /** - * Constructs a new CoinSceneInfo. - * @memberof gamehall - * @classdesc Represents a CoinSceneInfo. - * @implements ICoinSceneInfo - * @constructor - * @param {gamehall.ICoinSceneInfo=} [properties] Properties to set - */ - function CoinSceneInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CoinSceneInfo SceneId. - * @member {number} SceneId - * @memberof gamehall.CoinSceneInfo - * @instance - */ - CoinSceneInfo.prototype.SceneId = 0; - - /** - * CoinSceneInfo PlayerNum. - * @member {number} PlayerNum - * @memberof gamehall.CoinSceneInfo - * @instance - */ - CoinSceneInfo.prototype.PlayerNum = 0; - - /** - * Creates a new CoinSceneInfo instance using the specified properties. - * @function create - * @memberof gamehall.CoinSceneInfo - * @static - * @param {gamehall.ICoinSceneInfo=} [properties] Properties to set - * @returns {gamehall.CoinSceneInfo} CoinSceneInfo instance - */ - CoinSceneInfo.create = function create(properties) { - return new CoinSceneInfo(properties); - }; - - /** - * Encodes the specified CoinSceneInfo message. Does not implicitly {@link gamehall.CoinSceneInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.CoinSceneInfo - * @static - * @param {gamehall.ICoinSceneInfo} message CoinSceneInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CoinSceneInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.SceneId != null && Object.hasOwnProperty.call(message, "SceneId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.SceneId); - if (message.PlayerNum != null && Object.hasOwnProperty.call(message, "PlayerNum")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PlayerNum); - return writer; - }; - - /** - * Encodes the specified CoinSceneInfo message, length delimited. Does not implicitly {@link gamehall.CoinSceneInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CoinSceneInfo - * @static - * @param {gamehall.ICoinSceneInfo} message CoinSceneInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CoinSceneInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CoinSceneInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CoinSceneInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CoinSceneInfo} CoinSceneInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CoinSceneInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CoinSceneInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.SceneId = reader.int32(); - break; - } - case 2: { - message.PlayerNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CoinSceneInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CoinSceneInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CoinSceneInfo} CoinSceneInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CoinSceneInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CoinSceneInfo message. - * @function verify - * @memberof gamehall.CoinSceneInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CoinSceneInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.SceneId != null && message.hasOwnProperty("SceneId")) - if (!$util.isInteger(message.SceneId)) - return "SceneId: integer expected"; - if (message.PlayerNum != null && message.hasOwnProperty("PlayerNum")) - if (!$util.isInteger(message.PlayerNum)) - return "PlayerNum: integer expected"; - return null; - }; - - /** - * Creates a CoinSceneInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CoinSceneInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CoinSceneInfo} CoinSceneInfo - */ - CoinSceneInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CoinSceneInfo) - return object; - var message = new $root.gamehall.CoinSceneInfo(); - if (object.SceneId != null) - message.SceneId = object.SceneId | 0; - if (object.PlayerNum != null) - message.PlayerNum = object.PlayerNum | 0; - return message; - }; - - /** - * Creates a plain object from a CoinSceneInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CoinSceneInfo - * @static - * @param {gamehall.CoinSceneInfo} message CoinSceneInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CoinSceneInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.SceneId = 0; - object.PlayerNum = 0; - } - if (message.SceneId != null && message.hasOwnProperty("SceneId")) - object.SceneId = message.SceneId; - if (message.PlayerNum != null && message.hasOwnProperty("PlayerNum")) - object.PlayerNum = message.PlayerNum; - return object; - }; - - /** - * Converts this CoinSceneInfo to JSON. - * @function toJSON - * @memberof gamehall.CoinSceneInfo - * @instance - * @returns {Object.} JSON object - */ - CoinSceneInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CoinSceneInfo - * @function getTypeUrl - * @memberof gamehall.CoinSceneInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CoinSceneInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CoinSceneInfo"; - }; - - return CoinSceneInfo; - })(); - - gamehall.SCCoinSceneListRoom = (function() { - - /** - * Properties of a SCCoinSceneListRoom. - * @memberof gamehall - * @interface ISCCoinSceneListRoom - * @property {number|null} [Id] SCCoinSceneListRoom Id - * @property {number|null} [LimitCoin] SCCoinSceneListRoom LimitCoin - * @property {number|null} [MaxCoinLimit] SCCoinSceneListRoom MaxCoinLimit - * @property {number|null} [BaseScore] SCCoinSceneListRoom BaseScore - * @property {number|null} [MaxScore] SCCoinSceneListRoom MaxScore - * @property {number|null} [MaxPlayerNum] SCCoinSceneListRoom MaxPlayerNum - * @property {Array.|null} [OtherIntParams] SCCoinSceneListRoom OtherIntParams - * @property {Array.|null} [Datas] SCCoinSceneListRoom Datas - */ - - /** - * Constructs a new SCCoinSceneListRoom. - * @memberof gamehall - * @classdesc Represents a SCCoinSceneListRoom. - * @implements ISCCoinSceneListRoom - * @constructor - * @param {gamehall.ISCCoinSceneListRoom=} [properties] Properties to set - */ - function SCCoinSceneListRoom(properties) { - this.OtherIntParams = []; - this.Datas = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinSceneListRoom Id. - * @member {number} Id - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.Id = 0; - - /** - * SCCoinSceneListRoom LimitCoin. - * @member {number} LimitCoin - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.LimitCoin = 0; - - /** - * SCCoinSceneListRoom MaxCoinLimit. - * @member {number} MaxCoinLimit - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.MaxCoinLimit = 0; - - /** - * SCCoinSceneListRoom BaseScore. - * @member {number} BaseScore - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.BaseScore = 0; - - /** - * SCCoinSceneListRoom MaxScore. - * @member {number} MaxScore - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.MaxScore = 0; - - /** - * SCCoinSceneListRoom MaxPlayerNum. - * @member {number} MaxPlayerNum - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.MaxPlayerNum = 0; - - /** - * SCCoinSceneListRoom OtherIntParams. - * @member {Array.} OtherIntParams - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.OtherIntParams = $util.emptyArray; - - /** - * SCCoinSceneListRoom Datas. - * @member {Array.} Datas - * @memberof gamehall.SCCoinSceneListRoom - * @instance - */ - SCCoinSceneListRoom.prototype.Datas = $util.emptyArray; - - /** - * Creates a new SCCoinSceneListRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {gamehall.ISCCoinSceneListRoom=} [properties] Properties to set - * @returns {gamehall.SCCoinSceneListRoom} SCCoinSceneListRoom instance - */ - SCCoinSceneListRoom.create = function create(properties) { - return new SCCoinSceneListRoom(properties); - }; - - /** - * Encodes the specified SCCoinSceneListRoom message. Does not implicitly {@link gamehall.SCCoinSceneListRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {gamehall.ISCCoinSceneListRoom} message SCCoinSceneListRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneListRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.LimitCoin != null && Object.hasOwnProperty.call(message, "LimitCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.LimitCoin); - if (message.MaxCoinLimit != null && Object.hasOwnProperty.call(message, "MaxCoinLimit")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.MaxCoinLimit); - if (message.BaseScore != null && Object.hasOwnProperty.call(message, "BaseScore")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.BaseScore); - if (message.MaxScore != null && Object.hasOwnProperty.call(message, "MaxScore")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.MaxScore); - if (message.MaxPlayerNum != null && Object.hasOwnProperty.call(message, "MaxPlayerNum")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.MaxPlayerNum); - if (message.OtherIntParams != null && message.OtherIntParams.length) { - writer.uint32(/* id 7, wireType 2 =*/58).fork(); - for (var i = 0; i < message.OtherIntParams.length; ++i) - writer.int32(message.OtherIntParams[i]); - writer.ldelim(); - } - if (message.Datas != null && message.Datas.length) - for (var i = 0; i < message.Datas.length; ++i) - $root.gamehall.CoinSceneInfo.encode(message.Datas[i], writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCCoinSceneListRoom message, length delimited. Does not implicitly {@link gamehall.SCCoinSceneListRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {gamehall.ISCCoinSceneListRoom} message SCCoinSceneListRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneListRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinSceneListRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinSceneListRoom} SCCoinSceneListRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneListRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinSceneListRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.LimitCoin = reader.int32(); - break; - } - case 3: { - message.MaxCoinLimit = reader.int32(); - break; - } - case 4: { - message.BaseScore = reader.int32(); - break; - } - case 5: { - message.MaxScore = reader.int32(); - break; - } - case 6: { - message.MaxPlayerNum = reader.int32(); - break; - } - case 7: { - if (!(message.OtherIntParams && message.OtherIntParams.length)) - message.OtherIntParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OtherIntParams.push(reader.int32()); - } else - message.OtherIntParams.push(reader.int32()); - break; - } - case 8: { - if (!(message.Datas && message.Datas.length)) - message.Datas = []; - message.Datas.push($root.gamehall.CoinSceneInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinSceneListRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinSceneListRoom} SCCoinSceneListRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneListRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinSceneListRoom message. - * @function verify - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinSceneListRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - if (!$util.isInteger(message.LimitCoin)) - return "LimitCoin: integer expected"; - if (message.MaxCoinLimit != null && message.hasOwnProperty("MaxCoinLimit")) - if (!$util.isInteger(message.MaxCoinLimit)) - return "MaxCoinLimit: integer expected"; - if (message.BaseScore != null && message.hasOwnProperty("BaseScore")) - if (!$util.isInteger(message.BaseScore)) - return "BaseScore: integer expected"; - if (message.MaxScore != null && message.hasOwnProperty("MaxScore")) - if (!$util.isInteger(message.MaxScore)) - return "MaxScore: integer expected"; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - if (!$util.isInteger(message.MaxPlayerNum)) - return "MaxPlayerNum: integer expected"; - if (message.OtherIntParams != null && message.hasOwnProperty("OtherIntParams")) { - if (!Array.isArray(message.OtherIntParams)) - return "OtherIntParams: array expected"; - for (var i = 0; i < message.OtherIntParams.length; ++i) - if (!$util.isInteger(message.OtherIntParams[i])) - return "OtherIntParams: integer[] expected"; - } - if (message.Datas != null && message.hasOwnProperty("Datas")) { - if (!Array.isArray(message.Datas)) - return "Datas: array expected"; - for (var i = 0; i < message.Datas.length; ++i) { - var error = $root.gamehall.CoinSceneInfo.verify(message.Datas[i]); - if (error) - return "Datas." + error; - } - } - return null; - }; - - /** - * Creates a SCCoinSceneListRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinSceneListRoom} SCCoinSceneListRoom - */ - SCCoinSceneListRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinSceneListRoom) - return object; - var message = new $root.gamehall.SCCoinSceneListRoom(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.LimitCoin != null) - message.LimitCoin = object.LimitCoin | 0; - if (object.MaxCoinLimit != null) - message.MaxCoinLimit = object.MaxCoinLimit | 0; - if (object.BaseScore != null) - message.BaseScore = object.BaseScore | 0; - if (object.MaxScore != null) - message.MaxScore = object.MaxScore | 0; - if (object.MaxPlayerNum != null) - message.MaxPlayerNum = object.MaxPlayerNum | 0; - if (object.OtherIntParams) { - if (!Array.isArray(object.OtherIntParams)) - throw TypeError(".gamehall.SCCoinSceneListRoom.OtherIntParams: array expected"); - message.OtherIntParams = []; - for (var i = 0; i < object.OtherIntParams.length; ++i) - message.OtherIntParams[i] = object.OtherIntParams[i] | 0; - } - if (object.Datas) { - if (!Array.isArray(object.Datas)) - throw TypeError(".gamehall.SCCoinSceneListRoom.Datas: array expected"); - message.Datas = []; - for (var i = 0; i < object.Datas.length; ++i) { - if (typeof object.Datas[i] !== "object") - throw TypeError(".gamehall.SCCoinSceneListRoom.Datas: object expected"); - message.Datas[i] = $root.gamehall.CoinSceneInfo.fromObject(object.Datas[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCCoinSceneListRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {gamehall.SCCoinSceneListRoom} message SCCoinSceneListRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinSceneListRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.OtherIntParams = []; - object.Datas = []; - } - if (options.defaults) { - object.Id = 0; - object.LimitCoin = 0; - object.MaxCoinLimit = 0; - object.BaseScore = 0; - object.MaxScore = 0; - object.MaxPlayerNum = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - object.LimitCoin = message.LimitCoin; - if (message.MaxCoinLimit != null && message.hasOwnProperty("MaxCoinLimit")) - object.MaxCoinLimit = message.MaxCoinLimit; - if (message.BaseScore != null && message.hasOwnProperty("BaseScore")) - object.BaseScore = message.BaseScore; - if (message.MaxScore != null && message.hasOwnProperty("MaxScore")) - object.MaxScore = message.MaxScore; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - object.MaxPlayerNum = message.MaxPlayerNum; - if (message.OtherIntParams && message.OtherIntParams.length) { - object.OtherIntParams = []; - for (var j = 0; j < message.OtherIntParams.length; ++j) - object.OtherIntParams[j] = message.OtherIntParams[j]; - } - if (message.Datas && message.Datas.length) { - object.Datas = []; - for (var j = 0; j < message.Datas.length; ++j) - object.Datas[j] = $root.gamehall.CoinSceneInfo.toObject(message.Datas[j], options); - } - return object; - }; - - /** - * Converts this SCCoinSceneListRoom to JSON. - * @function toJSON - * @memberof gamehall.SCCoinSceneListRoom - * @instance - * @returns {Object.} JSON object - */ - SCCoinSceneListRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinSceneListRoom - * @function getTypeUrl - * @memberof gamehall.SCCoinSceneListRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinSceneListRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinSceneListRoom"; - }; - - return SCCoinSceneListRoom; - })(); - - gamehall.SCCoinSceneQueueState = (function() { - - /** - * Properties of a SCCoinSceneQueueState. - * @memberof gamehall - * @interface ISCCoinSceneQueueState - * @property {number|null} [GameFreeId] SCCoinSceneQueueState GameFreeId - * @property {number|null} [Count] SCCoinSceneQueueState Count - * @property {number|Long|null} [Ts] SCCoinSceneQueueState Ts - */ - - /** - * Constructs a new SCCoinSceneQueueState. - * @memberof gamehall - * @classdesc Represents a SCCoinSceneQueueState. - * @implements ISCCoinSceneQueueState - * @constructor - * @param {gamehall.ISCCoinSceneQueueState=} [properties] Properties to set - */ - function SCCoinSceneQueueState(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinSceneQueueState GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.SCCoinSceneQueueState - * @instance - */ - SCCoinSceneQueueState.prototype.GameFreeId = 0; - - /** - * SCCoinSceneQueueState Count. - * @member {number} Count - * @memberof gamehall.SCCoinSceneQueueState - * @instance - */ - SCCoinSceneQueueState.prototype.Count = 0; - - /** - * SCCoinSceneQueueState Ts. - * @member {number|Long} Ts - * @memberof gamehall.SCCoinSceneQueueState - * @instance - */ - SCCoinSceneQueueState.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCCoinSceneQueueState instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {gamehall.ISCCoinSceneQueueState=} [properties] Properties to set - * @returns {gamehall.SCCoinSceneQueueState} SCCoinSceneQueueState instance - */ - SCCoinSceneQueueState.create = function create(properties) { - return new SCCoinSceneQueueState(properties); - }; - - /** - * Encodes the specified SCCoinSceneQueueState message. Does not implicitly {@link gamehall.SCCoinSceneQueueState.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {gamehall.ISCCoinSceneQueueState} message SCCoinSceneQueueState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneQueueState.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Count != null && Object.hasOwnProperty.call(message, "Count")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Count); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Ts); - return writer; - }; - - /** - * Encodes the specified SCCoinSceneQueueState message, length delimited. Does not implicitly {@link gamehall.SCCoinSceneQueueState.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {gamehall.ISCCoinSceneQueueState} message SCCoinSceneQueueState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinSceneQueueState.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinSceneQueueState message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinSceneQueueState} SCCoinSceneQueueState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneQueueState.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinSceneQueueState(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.Count = reader.int32(); - break; - } - case 3: { - message.Ts = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinSceneQueueState message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinSceneQueueState} SCCoinSceneQueueState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinSceneQueueState.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinSceneQueueState message. - * @function verify - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinSceneQueueState.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Count != null && message.hasOwnProperty("Count")) - if (!$util.isInteger(message.Count)) - return "Count: integer expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - return null; - }; - - /** - * Creates a SCCoinSceneQueueState message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinSceneQueueState} SCCoinSceneQueueState - */ - SCCoinSceneQueueState.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinSceneQueueState) - return object; - var message = new $root.gamehall.SCCoinSceneQueueState(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Count != null) - message.Count = object.Count | 0; - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCCoinSceneQueueState message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {gamehall.SCCoinSceneQueueState} message SCCoinSceneQueueState - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinSceneQueueState.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - object.Count = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Count != null && message.hasOwnProperty("Count")) - object.Count = message.Count; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - return object; - }; - - /** - * Converts this SCCoinSceneQueueState to JSON. - * @function toJSON - * @memberof gamehall.SCCoinSceneQueueState - * @instance - * @returns {Object.} JSON object - */ - SCCoinSceneQueueState.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinSceneQueueState - * @function getTypeUrl - * @memberof gamehall.SCCoinSceneQueueState - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinSceneQueueState.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinSceneQueueState"; - }; - - return SCCoinSceneQueueState; - })(); - - /** - * OpResultCode_Game enum. - * @name gamehall.OpResultCode_Game - * @enum {number} - * @property {number} OPRC_Sucess_Game=0 OPRC_Sucess_Game value - * @property {number} OPRC_Error_Game=1 OPRC_Error_Game value - * @property {number} OPRC_RoomNotExist_Game=1016 OPRC_RoomNotExist_Game value - * @property {number} OPRC_GameNotExist_Game=1017 OPRC_GameNotExist_Game value - * @property {number} OPRC_GameHadClosed=1018 OPRC_GameHadClosed value - * @property {number} OPRC_RoomIsFull_Game=1019 OPRC_RoomIsFull_Game value - * @property {number} OPRC_RoomHadExist_Game=1020 OPRC_RoomHadExist_Game value - * @property {number} OPRC_GameStarting_Game=1022 OPRC_GameStarting_Game value - * @property {number} OPRC_CannotWatchReasonInOther_Game=1024 OPRC_CannotWatchReasonInOther_Game value - * @property {number} OPRC_MoneyNotEnough_Game=1040 OPRC_MoneyNotEnough_Game value - * @property {number} OPRC_CannotWatchReasonRoomNotStart_Game=1042 OPRC_CannotWatchReasonRoomNotStart_Game value - * @property {number} OPRC_OnlyAllowClubMemberEnter_Game=1043 OPRC_OnlyAllowClubMemberEnter_Game value - * @property {number} OPRC_YourResVerIsLow_Game=1044 OPRC_YourResVerIsLow_Game value - * @property {number} OPRC_YourAppVerIsLow_Game=1045 OPRC_YourAppVerIsLow_Game value - * @property {number} OPRC_ScenePosFull_Game=1048 OPRC_ScenePosFull_Game value - * @property {number} OPRC_SceneEnterForWatcher_Game=1050 OPRC_SceneEnterForWatcher_Game value - * @property {number} OPRC_RoomHadClosed_Game=1053 OPRC_RoomHadClosed_Game value - * @property {number} OPRC_SceneServerMaintain_Game=1054 OPRC_SceneServerMaintain_Game value - * @property {number} OPRC_SameIpForbid_Game=1055 OPRC_SameIpForbid_Game value - * @property {number} OPRC_CoinNotEnough_Game=1056 OPRC_CoinNotEnough_Game value - * @property {number} OPRC_CoinTooMore_Game=1058 OPRC_CoinTooMore_Game value - * @property {number} OPRC_InOtherGameIng_Game=1059 OPRC_InOtherGameIng_Game value - * @property {number} OPRC_OpYield_Game=1082 OPRC_OpYield_Game value - * @property {number} OPRC_AllocRoomIdFailed_Game=1097 OPRC_AllocRoomIdFailed_Game value - * @property {number} OPRC_PrivateRoomCountLimit_Game=1098 OPRC_PrivateRoomCountLimit_Game value - * @property {number} OPRC_LowerRice_ScenceMax_Game=1075 OPRC_LowerRice_ScenceMax_Game value - * @property {number} OPRC_LowerRice_PlayerMax_Game=1076 OPRC_LowerRice_PlayerMax_Game value - * @property {number} OPRC_LowerRice_PlayerDownMax_Game=1077 OPRC_LowerRice_PlayerDownMax_Game value - * @property {number} OPRC_YourAreGamingCannotLeave_Game=1078 OPRC_YourAreGamingCannotLeave_Game value - * @property {number} OPRC_ThirdPltProcessing_Game=1096 OPRC_ThirdPltProcessing_Game value - * @property {number} OPRC_RoomGameTimes_Game=1103 OPRC_RoomGameTimes_Game value - * @property {number} OPRC_MustBindPromoter_Game=1113 OPRC_MustBindPromoter_Game value - * @property {number} Oprc_Club_ClubIsClose_Game=5023 Oprc_Club_ClubIsClose_Game value - * @property {number} OPRC_Dg_RegistErr_Game=9000 OPRC_Dg_RegistErr_Game value - * @property {number} OPRC_Dg_LoginErr_Game=9001 OPRC_Dg_LoginErr_Game value - * @property {number} OPRC_Dg_PlatErr_Game=9002 OPRC_Dg_PlatErr_Game value - * @property {number} OPRC_Dg_QuotaNotEnough_Game=9003 OPRC_Dg_QuotaNotEnough_Game value - * @property {number} OPRC_Thr_GameClose_Game=9010 OPRC_Thr_GameClose_Game value - */ - gamehall.OpResultCode_Game = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "OPRC_Sucess_Game"] = 0; - values[valuesById[1] = "OPRC_Error_Game"] = 1; - values[valuesById[1016] = "OPRC_RoomNotExist_Game"] = 1016; - values[valuesById[1017] = "OPRC_GameNotExist_Game"] = 1017; - values[valuesById[1018] = "OPRC_GameHadClosed"] = 1018; - values[valuesById[1019] = "OPRC_RoomIsFull_Game"] = 1019; - values[valuesById[1020] = "OPRC_RoomHadExist_Game"] = 1020; - values[valuesById[1022] = "OPRC_GameStarting_Game"] = 1022; - values[valuesById[1024] = "OPRC_CannotWatchReasonInOther_Game"] = 1024; - values[valuesById[1040] = "OPRC_MoneyNotEnough_Game"] = 1040; - values[valuesById[1042] = "OPRC_CannotWatchReasonRoomNotStart_Game"] = 1042; - values[valuesById[1043] = "OPRC_OnlyAllowClubMemberEnter_Game"] = 1043; - values[valuesById[1044] = "OPRC_YourResVerIsLow_Game"] = 1044; - values[valuesById[1045] = "OPRC_YourAppVerIsLow_Game"] = 1045; - values[valuesById[1048] = "OPRC_ScenePosFull_Game"] = 1048; - values[valuesById[1050] = "OPRC_SceneEnterForWatcher_Game"] = 1050; - values[valuesById[1053] = "OPRC_RoomHadClosed_Game"] = 1053; - values[valuesById[1054] = "OPRC_SceneServerMaintain_Game"] = 1054; - values[valuesById[1055] = "OPRC_SameIpForbid_Game"] = 1055; - values[valuesById[1056] = "OPRC_CoinNotEnough_Game"] = 1056; - values[valuesById[1058] = "OPRC_CoinTooMore_Game"] = 1058; - values[valuesById[1059] = "OPRC_InOtherGameIng_Game"] = 1059; - values[valuesById[1082] = "OPRC_OpYield_Game"] = 1082; - values[valuesById[1097] = "OPRC_AllocRoomIdFailed_Game"] = 1097; - values[valuesById[1098] = "OPRC_PrivateRoomCountLimit_Game"] = 1098; - values[valuesById[1075] = "OPRC_LowerRice_ScenceMax_Game"] = 1075; - values[valuesById[1076] = "OPRC_LowerRice_PlayerMax_Game"] = 1076; - values[valuesById[1077] = "OPRC_LowerRice_PlayerDownMax_Game"] = 1077; - values[valuesById[1078] = "OPRC_YourAreGamingCannotLeave_Game"] = 1078; - values[valuesById[1096] = "OPRC_ThirdPltProcessing_Game"] = 1096; - values[valuesById[1103] = "OPRC_RoomGameTimes_Game"] = 1103; - values[valuesById[1113] = "OPRC_MustBindPromoter_Game"] = 1113; - values[valuesById[5023] = "Oprc_Club_ClubIsClose_Game"] = 5023; - values[valuesById[9000] = "OPRC_Dg_RegistErr_Game"] = 9000; - values[valuesById[9001] = "OPRC_Dg_LoginErr_Game"] = 9001; - values[valuesById[9002] = "OPRC_Dg_PlatErr_Game"] = 9002; - values[valuesById[9003] = "OPRC_Dg_QuotaNotEnough_Game"] = 9003; - values[valuesById[9010] = "OPRC_Thr_GameClose_Game"] = 9010; - return values; - })(); - - /** - * GameHallPacketID enum. - * @name gamehall.GameHallPacketID - * @enum {number} - * @property {number} PACKET_GameHall_ZERO=0 PACKET_GameHall_ZERO value - * @property {number} PACKET_CS_JOINGAME=2200 PACKET_CS_JOINGAME value - * @property {number} PACKET_SC_JOINGAME=2201 PACKET_SC_JOINGAME value - * @property {number} PACKET_CS_CREATEROOM=2202 PACKET_CS_CREATEROOM value - * @property {number} PACKET_SC_CREATEROOM=2203 PACKET_SC_CREATEROOM value - * @property {number} PACKET_CS_ENTERROOM=2204 PACKET_CS_ENTERROOM value - * @property {number} PACKET_SC_ENTERROOM=2205 PACKET_SC_ENTERROOM value - * @property {number} PACKET_CS_RETURNROOM=2206 PACKET_CS_RETURNROOM value - * @property {number} PACKET_SC_RETURNROOM=2207 PACKET_SC_RETURNROOM value - * @property {number} PACKET_CS_AUDIENCE_ENTERROOM=2208 PACKET_CS_AUDIENCE_ENTERROOM value - * @property {number} PACKET_CS_ENTERGAME=2209 PACKET_CS_ENTERGAME value - * @property {number} PACKET_SC_ENTERGAME=2210 PACKET_SC_ENTERGAME value - * @property {number} PACKET_CS_QUITGAME=2211 PACKET_CS_QUITGAME value - * @property {number} PACKET_SC_QUITGAME=2212 PACKET_SC_QUITGAME value - * @property {number} PACKET_SC_CARDGAINWAY=2213 PACKET_SC_CARDGAINWAY value - * @property {number} PACKET_CS_TASKLIST=2214 PACKET_CS_TASKLIST value - * @property {number} PACKET_SC_TASKLIST=2215 PACKET_SC_TASKLIST value - * @property {number} PACKET_SC_TASKCHG=2216 PACKET_SC_TASKCHG value - * @property {number} PACKET_SC_TACKCOMPLETE=2217 PACKET_SC_TACKCOMPLETE value - * @property {number} PACKET_SC_TASKDEL=2218 PACKET_SC_TASKDEL value - * @property {number} PACKET_CS_TACKDRAWPRIZE=2219 PACKET_CS_TACKDRAWPRIZE value - * @property {number} PACKET_SC_TACKDRAWPRIZE=2220 PACKET_SC_TACKDRAWPRIZE value - * @property {number} PACKET_CS_GETAGENTGAMEREC=2223 PACKET_CS_GETAGENTGAMEREC value - * @property {number} PACKET_SC_GETAGENTGAMEREC=2224 PACKET_SC_GETAGENTGAMEREC value - * @property {number} PACKET_CS_DELAGENTGAMEREC=2225 PACKET_CS_DELAGENTGAMEREC value - * @property {number} PACKET_CS_SHOPBUY=2226 PACKET_CS_SHOPBUY value - * @property {number} PACKET_SC_SHOPBUY=2227 PACKET_SC_SHOPBUY value - * @property {number} PACKET_SC_LIMITLIST=2228 PACKET_SC_LIMITLIST value - * @property {number} PACKET_CS_GETLATELYGAMEIDS=2229 PACKET_CS_GETLATELYGAMEIDS value - * @property {number} PACKET_SC_GETLATELYGAMEIDS=2230 PACKET_SC_GETLATELYGAMEIDS value - * @property {number} PACKET_CS_GETGAMECONFIG=2231 PACKET_CS_GETGAMECONFIG value - * @property {number} PACKET_SC_GETGAMECONFIG=2232 PACKET_SC_GETGAMECONFIG value - * @property {number} PACKET_SC_CHANGEGAMESTATUS=2233 PACKET_SC_CHANGEGAMESTATUS value - * @property {number} PACKET_CS_ENTERHALL=2240 PACKET_CS_ENTERHALL value - * @property {number} PACKET_SC_ENTERHALL=2241 PACKET_SC_ENTERHALL value - * @property {number} PACKET_CS_LEAVEHALL=2242 PACKET_CS_LEAVEHALL value - * @property {number} PACKET_SC_LEAVEHALL=2243 PACKET_SC_LEAVEHALL value - * @property {number} PACKET_CS_HALLROOMLIST=2244 PACKET_CS_HALLROOMLIST value - * @property {number} PACKET_SC_HALLROOMLIST=2245 PACKET_SC_HALLROOMLIST value - * @property {number} PACKET_SC_ROOMPLAYERENTER=2246 PACKET_SC_ROOMPLAYERENTER value - * @property {number} PACKET_SC_ROOMPLAYERLEAVE=2247 PACKET_SC_ROOMPLAYERLEAVE value - * @property {number} PACKET_SC_ROOMSTATECHANG=2248 PACKET_SC_ROOMSTATECHANG value - * @property {number} PACKET_SC_HALLPLAYERNUM=2249 PACKET_SC_HALLPLAYERNUM value - * @property {number} PACKET_SC_BULLETIONINFO=2250 PACKET_SC_BULLETIONINFO value - * @property {number} PACKET_CS_BULLETIONINFO=2251 PACKET_CS_BULLETIONINFO value - * @property {number} PACKET_CS_CUSTOMERINFOLIST=2252 PACKET_CS_CUSTOMERINFOLIST value - * @property {number} PACKET_SC_CUSTOMERINFOLIST=2253 PACKET_SC_CUSTOMERINFOLIST value - * @property {number} PACKET_CS_ENTERDGGAME=2254 PACKET_CS_ENTERDGGAME value - * @property {number} PACKET_SC_ENTERDGGAME=2255 PACKET_SC_ENTERDGGAME value - * @property {number} PACKET_CS_LEAVEDGGAME=2256 PACKET_CS_LEAVEDGGAME value - * @property {number} PACKET_SC_LEAVEDGGAME=2257 PACKET_SC_LEAVEDGGAME value - * @property {number} PACKET_SC_PLAYERRECHARGEANSWER=2258 PACKET_SC_PLAYERRECHARGEANSWER value - * @property {number} PACKET_CS_THRIDACCOUNTSTATICSTIC=2259 PACKET_CS_THRIDACCOUNTSTATICSTIC value - * @property {number} PACKET_SC_THRIDACCOUNTSTATICSTIC=2260 PACKET_SC_THRIDACCOUNTSTATICSTIC value - * @property {number} PACKET_CS_THRIDACCOUNTTRANSFER=2261 PACKET_CS_THRIDACCOUNTTRANSFER value - * @property {number} PACKET_SC_THRIDACCOUNTTRANSFER=2262 PACKET_SC_THRIDACCOUNTTRANSFER value - * @property {number} PACKET_CS_ENTERTHRIDGAME=2263 PACKET_CS_ENTERTHRIDGAME value - * @property {number} PACKET_SC_ENTERTHRIDGAME=2264 PACKET_SC_ENTERTHRIDGAME value - * @property {number} PACKET_CS_LEAVETHRIDGAME=2265 PACKET_CS_LEAVETHRIDGAME value - * @property {number} PACKET_SC_LEAVETHRIDGAME=2266 PACKET_SC_LEAVETHRIDGAME value - * @property {number} PACKET_CS_THRIDGAMELIST=2267 PACKET_CS_THRIDGAMELIST value - * @property {number} PACKET_SC_THRIDGAMELIST=2268 PACKET_SC_THRIDGAMELIST value - * @property {number} PACKET_CS_THRIDGAMEBALANCEUPDATE=2269 PACKET_CS_THRIDGAMEBALANCEUPDATE value - * @property {number} PACKET_SC_THRIDGAMEBALANCEUPDATE=2270 PACKET_SC_THRIDGAMEBALANCEUPDATE value - * @property {number} PACKET_SC_THRIDGAMEBALANCEUPDATESTATE=2271 PACKET_SC_THRIDGAMEBALANCEUPDATESTATE value - * @property {number} PACKET_CS_CREATEPRIVATEROOM=2272 PACKET_CS_CREATEPRIVATEROOM value - * @property {number} PACKET_SC_CREATEPRIVATEROOM=2273 PACKET_SC_CREATEPRIVATEROOM value - * @property {number} PACKET_CS_GETPRIVATEROOMLIST=2274 PACKET_CS_GETPRIVATEROOMLIST value - * @property {number} PACKET_SC_GETPRIVATEROOMLIST=2275 PACKET_SC_GETPRIVATEROOMLIST value - * @property {number} PACKET_CS_GETPRIVATEROOMHISTORY=2276 PACKET_CS_GETPRIVATEROOMHISTORY value - * @property {number} PACKET_SC_GETPRIVATEROOMHISTORY=2277 PACKET_SC_GETPRIVATEROOMHISTORY value - * @property {number} PACKET_CS_DESTROYPRIVATEROOM=2278 PACKET_CS_DESTROYPRIVATEROOM value - * @property {number} PACKET_SC_DESTROYPRIVATEROOM=2279 PACKET_SC_DESTROYPRIVATEROOM value - * @property {number} PACKET_CS_QUERYROOMINFO=2280 PACKET_CS_QUERYROOMINFO value - * @property {number} PACKET_SC_QUERYROOMINFO=2281 PACKET_SC_QUERYROOMINFO value - * @property {number} PACKET_SC_GAMESUBLIST=2283 PACKET_SC_GAMESUBLIST value - * @property {number} PACKET_CS_GAMEOBSERVE=2284 PACKET_CS_GAMEOBSERVE value - * @property {number} PACKET_SC_GAMESTATE=2285 PACKET_SC_GAMESTATE value - * @property {number} PACKET_SC_SYNCGAMEFREE=2286 PACKET_SC_SYNCGAMEFREE value - * @property {number} PACKET_SC_LOTTERYSYNC=2287 PACKET_SC_LOTTERYSYNC value - * @property {number} PACKET_CS_LOTTERYLOG=2288 PACKET_CS_LOTTERYLOG value - * @property {number} PACKET_SC_LOTTERYLOG=2289 PACKET_SC_LOTTERYLOG value - * @property {number} PACKET_SC_LOTTERYBILL=2290 PACKET_SC_LOTTERYBILL value - * @property {number} PACKET_CS_UPLOADLOC=2291 PACKET_CS_UPLOADLOC value - * @property {number} PACKET_SC_UPLOADLOC=2292 PACKET_SC_UPLOADLOC value - * @property {number} PACKET_CS_AUDIENCESIT=2293 PACKET_CS_AUDIENCESIT value - * @property {number} PACKET_SC_AUDIENCESIT=2294 PACKET_SC_AUDIENCESIT value - * @property {number} PACKET_CS_COMNOTICE=2295 PACKET_CS_COMNOTICE value - * @property {number} PACKET_SC_COMNOTICE=2296 PACKET_SC_COMNOTICE value - * @property {number} PACKET_SC_CHANGEENTRYSWITCH=2297 PACKET_SC_CHANGEENTRYSWITCH value - * @property {number} PACKET_CS_LEAVEROOM=8001 PACKET_CS_LEAVEROOM value - * @property {number} PACKET_SC_LEAVEROOM=8002 PACKET_SC_LEAVEROOM value - * @property {number} PACKET_CS_DESTROYROOM=8003 PACKET_CS_DESTROYROOM value - * @property {number} PACKET_SC_DESTROYROOM=8004 PACKET_SC_DESTROYROOM value - * @property {number} PACKET_CS_FORCESTART=8005 PACKET_CS_FORCESTART value - * @property {number} PACKET_SC_FORCESTART=8006 PACKET_SC_FORCESTART value - * @property {number} PACKET_CS_AUDIENCE_LEAVEROOM=8007 PACKET_CS_AUDIENCE_LEAVEROOM value - * @property {number} PACKET_CS_PLAYER_SWITCHFLAG=8008 PACKET_CS_PLAYER_SWITCHFLAG value - */ - gamehall.GameHallPacketID = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "PACKET_GameHall_ZERO"] = 0; - values[valuesById[2200] = "PACKET_CS_JOINGAME"] = 2200; - values[valuesById[2201] = "PACKET_SC_JOINGAME"] = 2201; - values[valuesById[2202] = "PACKET_CS_CREATEROOM"] = 2202; - values[valuesById[2203] = "PACKET_SC_CREATEROOM"] = 2203; - values[valuesById[2204] = "PACKET_CS_ENTERROOM"] = 2204; - values[valuesById[2205] = "PACKET_SC_ENTERROOM"] = 2205; - values[valuesById[2206] = "PACKET_CS_RETURNROOM"] = 2206; - values[valuesById[2207] = "PACKET_SC_RETURNROOM"] = 2207; - values[valuesById[2208] = "PACKET_CS_AUDIENCE_ENTERROOM"] = 2208; - values[valuesById[2209] = "PACKET_CS_ENTERGAME"] = 2209; - values[valuesById[2210] = "PACKET_SC_ENTERGAME"] = 2210; - values[valuesById[2211] = "PACKET_CS_QUITGAME"] = 2211; - values[valuesById[2212] = "PACKET_SC_QUITGAME"] = 2212; - values[valuesById[2213] = "PACKET_SC_CARDGAINWAY"] = 2213; - values[valuesById[2214] = "PACKET_CS_TASKLIST"] = 2214; - values[valuesById[2215] = "PACKET_SC_TASKLIST"] = 2215; - values[valuesById[2216] = "PACKET_SC_TASKCHG"] = 2216; - values[valuesById[2217] = "PACKET_SC_TACKCOMPLETE"] = 2217; - values[valuesById[2218] = "PACKET_SC_TASKDEL"] = 2218; - values[valuesById[2219] = "PACKET_CS_TACKDRAWPRIZE"] = 2219; - values[valuesById[2220] = "PACKET_SC_TACKDRAWPRIZE"] = 2220; - values[valuesById[2223] = "PACKET_CS_GETAGENTGAMEREC"] = 2223; - values[valuesById[2224] = "PACKET_SC_GETAGENTGAMEREC"] = 2224; - values[valuesById[2225] = "PACKET_CS_DELAGENTGAMEREC"] = 2225; - values[valuesById[2226] = "PACKET_CS_SHOPBUY"] = 2226; - values[valuesById[2227] = "PACKET_SC_SHOPBUY"] = 2227; - values[valuesById[2228] = "PACKET_SC_LIMITLIST"] = 2228; - values[valuesById[2229] = "PACKET_CS_GETLATELYGAMEIDS"] = 2229; - values[valuesById[2230] = "PACKET_SC_GETLATELYGAMEIDS"] = 2230; - values[valuesById[2231] = "PACKET_CS_GETGAMECONFIG"] = 2231; - values[valuesById[2232] = "PACKET_SC_GETGAMECONFIG"] = 2232; - values[valuesById[2233] = "PACKET_SC_CHANGEGAMESTATUS"] = 2233; - values[valuesById[2240] = "PACKET_CS_ENTERHALL"] = 2240; - values[valuesById[2241] = "PACKET_SC_ENTERHALL"] = 2241; - values[valuesById[2242] = "PACKET_CS_LEAVEHALL"] = 2242; - values[valuesById[2243] = "PACKET_SC_LEAVEHALL"] = 2243; - values[valuesById[2244] = "PACKET_CS_HALLROOMLIST"] = 2244; - values[valuesById[2245] = "PACKET_SC_HALLROOMLIST"] = 2245; - values[valuesById[2246] = "PACKET_SC_ROOMPLAYERENTER"] = 2246; - values[valuesById[2247] = "PACKET_SC_ROOMPLAYERLEAVE"] = 2247; - values[valuesById[2248] = "PACKET_SC_ROOMSTATECHANG"] = 2248; - values[valuesById[2249] = "PACKET_SC_HALLPLAYERNUM"] = 2249; - values[valuesById[2250] = "PACKET_SC_BULLETIONINFO"] = 2250; - values[valuesById[2251] = "PACKET_CS_BULLETIONINFO"] = 2251; - values[valuesById[2252] = "PACKET_CS_CUSTOMERINFOLIST"] = 2252; - values[valuesById[2253] = "PACKET_SC_CUSTOMERINFOLIST"] = 2253; - values[valuesById[2254] = "PACKET_CS_ENTERDGGAME"] = 2254; - values[valuesById[2255] = "PACKET_SC_ENTERDGGAME"] = 2255; - values[valuesById[2256] = "PACKET_CS_LEAVEDGGAME"] = 2256; - values[valuesById[2257] = "PACKET_SC_LEAVEDGGAME"] = 2257; - values[valuesById[2258] = "PACKET_SC_PLAYERRECHARGEANSWER"] = 2258; - values[valuesById[2259] = "PACKET_CS_THRIDACCOUNTSTATICSTIC"] = 2259; - values[valuesById[2260] = "PACKET_SC_THRIDACCOUNTSTATICSTIC"] = 2260; - values[valuesById[2261] = "PACKET_CS_THRIDACCOUNTTRANSFER"] = 2261; - values[valuesById[2262] = "PACKET_SC_THRIDACCOUNTTRANSFER"] = 2262; - values[valuesById[2263] = "PACKET_CS_ENTERTHRIDGAME"] = 2263; - values[valuesById[2264] = "PACKET_SC_ENTERTHRIDGAME"] = 2264; - values[valuesById[2265] = "PACKET_CS_LEAVETHRIDGAME"] = 2265; - values[valuesById[2266] = "PACKET_SC_LEAVETHRIDGAME"] = 2266; - values[valuesById[2267] = "PACKET_CS_THRIDGAMELIST"] = 2267; - values[valuesById[2268] = "PACKET_SC_THRIDGAMELIST"] = 2268; - values[valuesById[2269] = "PACKET_CS_THRIDGAMEBALANCEUPDATE"] = 2269; - values[valuesById[2270] = "PACKET_SC_THRIDGAMEBALANCEUPDATE"] = 2270; - values[valuesById[2271] = "PACKET_SC_THRIDGAMEBALANCEUPDATESTATE"] = 2271; - values[valuesById[2272] = "PACKET_CS_CREATEPRIVATEROOM"] = 2272; - values[valuesById[2273] = "PACKET_SC_CREATEPRIVATEROOM"] = 2273; - values[valuesById[2274] = "PACKET_CS_GETPRIVATEROOMLIST"] = 2274; - values[valuesById[2275] = "PACKET_SC_GETPRIVATEROOMLIST"] = 2275; - values[valuesById[2276] = "PACKET_CS_GETPRIVATEROOMHISTORY"] = 2276; - values[valuesById[2277] = "PACKET_SC_GETPRIVATEROOMHISTORY"] = 2277; - values[valuesById[2278] = "PACKET_CS_DESTROYPRIVATEROOM"] = 2278; - values[valuesById[2279] = "PACKET_SC_DESTROYPRIVATEROOM"] = 2279; - values[valuesById[2280] = "PACKET_CS_QUERYROOMINFO"] = 2280; - values[valuesById[2281] = "PACKET_SC_QUERYROOMINFO"] = 2281; - values[valuesById[2283] = "PACKET_SC_GAMESUBLIST"] = 2283; - values[valuesById[2284] = "PACKET_CS_GAMEOBSERVE"] = 2284; - values[valuesById[2285] = "PACKET_SC_GAMESTATE"] = 2285; - values[valuesById[2286] = "PACKET_SC_SYNCGAMEFREE"] = 2286; - values[valuesById[2287] = "PACKET_SC_LOTTERYSYNC"] = 2287; - values[valuesById[2288] = "PACKET_CS_LOTTERYLOG"] = 2288; - values[valuesById[2289] = "PACKET_SC_LOTTERYLOG"] = 2289; - values[valuesById[2290] = "PACKET_SC_LOTTERYBILL"] = 2290; - values[valuesById[2291] = "PACKET_CS_UPLOADLOC"] = 2291; - values[valuesById[2292] = "PACKET_SC_UPLOADLOC"] = 2292; - values[valuesById[2293] = "PACKET_CS_AUDIENCESIT"] = 2293; - values[valuesById[2294] = "PACKET_SC_AUDIENCESIT"] = 2294; - values[valuesById[2295] = "PACKET_CS_COMNOTICE"] = 2295; - values[valuesById[2296] = "PACKET_SC_COMNOTICE"] = 2296; - values[valuesById[2297] = "PACKET_SC_CHANGEENTRYSWITCH"] = 2297; - values[valuesById[8001] = "PACKET_CS_LEAVEROOM"] = 8001; - values[valuesById[8002] = "PACKET_SC_LEAVEROOM"] = 8002; - values[valuesById[8003] = "PACKET_CS_DESTROYROOM"] = 8003; - values[valuesById[8004] = "PACKET_SC_DESTROYROOM"] = 8004; - values[valuesById[8005] = "PACKET_CS_FORCESTART"] = 8005; - values[valuesById[8006] = "PACKET_SC_FORCESTART"] = 8006; - values[valuesById[8007] = "PACKET_CS_AUDIENCE_LEAVEROOM"] = 8007; - values[valuesById[8008] = "PACKET_CS_PLAYER_SWITCHFLAG"] = 8008; - return values; - })(); - - gamehall.CSEnterHall = (function() { - - /** - * Properties of a CSEnterHall. - * @memberof gamehall - * @interface ICSEnterHall - * @property {number|null} [HallId] CSEnterHall HallId - */ - - /** - * Constructs a new CSEnterHall. - * @memberof gamehall - * @classdesc Represents a CSEnterHall. - * @implements ICSEnterHall - * @constructor - * @param {gamehall.ICSEnterHall=} [properties] Properties to set - */ - function CSEnterHall(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSEnterHall HallId. - * @member {number} HallId - * @memberof gamehall.CSEnterHall - * @instance - */ - CSEnterHall.prototype.HallId = 0; - - /** - * Creates a new CSEnterHall instance using the specified properties. - * @function create - * @memberof gamehall.CSEnterHall - * @static - * @param {gamehall.ICSEnterHall=} [properties] Properties to set - * @returns {gamehall.CSEnterHall} CSEnterHall instance - */ - CSEnterHall.create = function create(properties) { - return new CSEnterHall(properties); - }; - - /** - * Encodes the specified CSEnterHall message. Does not implicitly {@link gamehall.CSEnterHall.verify|verify} messages. - * @function encode - * @memberof gamehall.CSEnterHall - * @static - * @param {gamehall.ICSEnterHall} message CSEnterHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterHall.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.HallId); - return writer; - }; - - /** - * Encodes the specified CSEnterHall message, length delimited. Does not implicitly {@link gamehall.CSEnterHall.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSEnterHall - * @static - * @param {gamehall.ICSEnterHall} message CSEnterHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterHall.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSEnterHall message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSEnterHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSEnterHall} CSEnterHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterHall.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSEnterHall(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.HallId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSEnterHall message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSEnterHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSEnterHall} CSEnterHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterHall.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSEnterHall message. - * @function verify - * @memberof gamehall.CSEnterHall - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSEnterHall.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - return null; - }; - - /** - * Creates a CSEnterHall message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSEnterHall - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSEnterHall} CSEnterHall - */ - CSEnterHall.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSEnterHall) - return object; - var message = new $root.gamehall.CSEnterHall(); - if (object.HallId != null) - message.HallId = object.HallId | 0; - return message; - }; - - /** - * Creates a plain object from a CSEnterHall message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSEnterHall - * @static - * @param {gamehall.CSEnterHall} message CSEnterHall - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSEnterHall.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.HallId = 0; - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - return object; - }; - - /** - * Converts this CSEnterHall to JSON. - * @function toJSON - * @memberof gamehall.CSEnterHall - * @instance - * @returns {Object.} JSON object - */ - CSEnterHall.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSEnterHall - * @function getTypeUrl - * @memberof gamehall.CSEnterHall - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSEnterHall.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSEnterHall"; - }; - - return CSEnterHall; - })(); - - gamehall.SCEnterHall = (function() { - - /** - * Properties of a SCEnterHall. - * @memberof gamehall - * @interface ISCEnterHall - * @property {number|null} [HallId] SCEnterHall HallId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCEnterHall OpRetCode - */ - - /** - * Constructs a new SCEnterHall. - * @memberof gamehall - * @classdesc Represents a SCEnterHall. - * @implements ISCEnterHall - * @constructor - * @param {gamehall.ISCEnterHall=} [properties] Properties to set - */ - function SCEnterHall(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCEnterHall HallId. - * @member {number} HallId - * @memberof gamehall.SCEnterHall - * @instance - */ - SCEnterHall.prototype.HallId = 0; - - /** - * SCEnterHall OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCEnterHall - * @instance - */ - SCEnterHall.prototype.OpRetCode = 0; - - /** - * Creates a new SCEnterHall instance using the specified properties. - * @function create - * @memberof gamehall.SCEnterHall - * @static - * @param {gamehall.ISCEnterHall=} [properties] Properties to set - * @returns {gamehall.SCEnterHall} SCEnterHall instance - */ - SCEnterHall.create = function create(properties) { - return new SCEnterHall(properties); - }; - - /** - * Encodes the specified SCEnterHall message. Does not implicitly {@link gamehall.SCEnterHall.verify|verify} messages. - * @function encode - * @memberof gamehall.SCEnterHall - * @static - * @param {gamehall.ISCEnterHall} message SCEnterHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterHall.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.HallId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCEnterHall message, length delimited. Does not implicitly {@link gamehall.SCEnterHall.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCEnterHall - * @static - * @param {gamehall.ISCEnterHall} message SCEnterHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterHall.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCEnterHall message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCEnterHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCEnterHall} SCEnterHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterHall.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCEnterHall(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.HallId = reader.int32(); - break; - } - case 2: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCEnterHall message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCEnterHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCEnterHall} SCEnterHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterHall.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCEnterHall message. - * @function verify - * @memberof gamehall.SCEnterHall - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCEnterHall.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCEnterHall message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCEnterHall - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCEnterHall} SCEnterHall - */ - SCEnterHall.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCEnterHall) - return object; - var message = new $root.gamehall.SCEnterHall(); - if (object.HallId != null) - message.HallId = object.HallId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCEnterHall message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCEnterHall - * @static - * @param {gamehall.SCEnterHall} message SCEnterHall - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCEnterHall.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.HallId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCEnterHall to JSON. - * @function toJSON - * @memberof gamehall.SCEnterHall - * @instance - * @returns {Object.} JSON object - */ - SCEnterHall.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCEnterHall - * @function getTypeUrl - * @memberof gamehall.SCEnterHall - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCEnterHall.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCEnterHall"; - }; - - return SCEnterHall; - })(); - - gamehall.CSLeaveHall = (function() { - - /** - * Properties of a CSLeaveHall. - * @memberof gamehall - * @interface ICSLeaveHall - */ - - /** - * Constructs a new CSLeaveHall. - * @memberof gamehall - * @classdesc Represents a CSLeaveHall. - * @implements ICSLeaveHall - * @constructor - * @param {gamehall.ICSLeaveHall=} [properties] Properties to set - */ - function CSLeaveHall(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSLeaveHall instance using the specified properties. - * @function create - * @memberof gamehall.CSLeaveHall - * @static - * @param {gamehall.ICSLeaveHall=} [properties] Properties to set - * @returns {gamehall.CSLeaveHall} CSLeaveHall instance - */ - CSLeaveHall.create = function create(properties) { - return new CSLeaveHall(properties); - }; - - /** - * Encodes the specified CSLeaveHall message. Does not implicitly {@link gamehall.CSLeaveHall.verify|verify} messages. - * @function encode - * @memberof gamehall.CSLeaveHall - * @static - * @param {gamehall.ICSLeaveHall} message CSLeaveHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveHall.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSLeaveHall message, length delimited. Does not implicitly {@link gamehall.CSLeaveHall.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSLeaveHall - * @static - * @param {gamehall.ICSLeaveHall} message CSLeaveHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveHall.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSLeaveHall message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSLeaveHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSLeaveHall} CSLeaveHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveHall.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSLeaveHall(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSLeaveHall message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSLeaveHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSLeaveHall} CSLeaveHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveHall.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSLeaveHall message. - * @function verify - * @memberof gamehall.CSLeaveHall - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSLeaveHall.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSLeaveHall message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSLeaveHall - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSLeaveHall} CSLeaveHall - */ - CSLeaveHall.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSLeaveHall) - return object; - return new $root.gamehall.CSLeaveHall(); - }; - - /** - * Creates a plain object from a CSLeaveHall message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSLeaveHall - * @static - * @param {gamehall.CSLeaveHall} message CSLeaveHall - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSLeaveHall.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSLeaveHall to JSON. - * @function toJSON - * @memberof gamehall.CSLeaveHall - * @instance - * @returns {Object.} JSON object - */ - CSLeaveHall.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSLeaveHall - * @function getTypeUrl - * @memberof gamehall.CSLeaveHall - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSLeaveHall.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSLeaveHall"; - }; - - return CSLeaveHall; - })(); - - gamehall.SCLeaveHall = (function() { - - /** - * Properties of a SCLeaveHall. - * @memberof gamehall - * @interface ISCLeaveHall - * @property {number|null} [HallId] SCLeaveHall HallId - */ - - /** - * Constructs a new SCLeaveHall. - * @memberof gamehall - * @classdesc Represents a SCLeaveHall. - * @implements ISCLeaveHall - * @constructor - * @param {gamehall.ISCLeaveHall=} [properties] Properties to set - */ - function SCLeaveHall(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLeaveHall HallId. - * @member {number} HallId - * @memberof gamehall.SCLeaveHall - * @instance - */ - SCLeaveHall.prototype.HallId = 0; - - /** - * Creates a new SCLeaveHall instance using the specified properties. - * @function create - * @memberof gamehall.SCLeaveHall - * @static - * @param {gamehall.ISCLeaveHall=} [properties] Properties to set - * @returns {gamehall.SCLeaveHall} SCLeaveHall instance - */ - SCLeaveHall.create = function create(properties) { - return new SCLeaveHall(properties); - }; - - /** - * Encodes the specified SCLeaveHall message. Does not implicitly {@link gamehall.SCLeaveHall.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLeaveHall - * @static - * @param {gamehall.ISCLeaveHall} message SCLeaveHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveHall.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.HallId); - return writer; - }; - - /** - * Encodes the specified SCLeaveHall message, length delimited. Does not implicitly {@link gamehall.SCLeaveHall.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLeaveHall - * @static - * @param {gamehall.ISCLeaveHall} message SCLeaveHall message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveHall.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLeaveHall message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLeaveHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLeaveHall} SCLeaveHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveHall.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLeaveHall(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.HallId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLeaveHall message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLeaveHall - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLeaveHall} SCLeaveHall - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveHall.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLeaveHall message. - * @function verify - * @memberof gamehall.SCLeaveHall - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLeaveHall.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - return null; - }; - - /** - * Creates a SCLeaveHall message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLeaveHall - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLeaveHall} SCLeaveHall - */ - SCLeaveHall.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLeaveHall) - return object; - var message = new $root.gamehall.SCLeaveHall(); - if (object.HallId != null) - message.HallId = object.HallId | 0; - return message; - }; - - /** - * Creates a plain object from a SCLeaveHall message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLeaveHall - * @static - * @param {gamehall.SCLeaveHall} message SCLeaveHall - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLeaveHall.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.HallId = 0; - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - return object; - }; - - /** - * Converts this SCLeaveHall to JSON. - * @function toJSON - * @memberof gamehall.SCLeaveHall - * @instance - * @returns {Object.} JSON object - */ - SCLeaveHall.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLeaveHall - * @function getTypeUrl - * @memberof gamehall.SCLeaveHall - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLeaveHall.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLeaveHall"; - }; - - return SCLeaveHall; - })(); - - gamehall.RoomPlayerInfo = (function() { - - /** - * Properties of a RoomPlayerInfo. - * @memberof gamehall - * @interface IRoomPlayerInfo - * @property {number|null} [SnId] RoomPlayerInfo SnId - * @property {number|null} [Head] RoomPlayerInfo Head - * @property {number|null} [Sex] RoomPlayerInfo Sex - * @property {string|null} [Name] RoomPlayerInfo Name - * @property {number|null} [Pos] RoomPlayerInfo Pos - * @property {number|null} [Flag] RoomPlayerInfo Flag - * @property {number|null} [HeadOutLine] RoomPlayerInfo HeadOutLine - * @property {number|null} [VIP] RoomPlayerInfo VIP - */ - - /** - * Constructs a new RoomPlayerInfo. - * @memberof gamehall - * @classdesc Represents a RoomPlayerInfo. - * @implements IRoomPlayerInfo - * @constructor - * @param {gamehall.IRoomPlayerInfo=} [properties] Properties to set - */ - function RoomPlayerInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * RoomPlayerInfo SnId. - * @member {number} SnId - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.SnId = 0; - - /** - * RoomPlayerInfo Head. - * @member {number} Head - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.Head = 0; - - /** - * RoomPlayerInfo Sex. - * @member {number} Sex - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.Sex = 0; - - /** - * RoomPlayerInfo Name. - * @member {string} Name - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.Name = ""; - - /** - * RoomPlayerInfo Pos. - * @member {number} Pos - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.Pos = 0; - - /** - * RoomPlayerInfo Flag. - * @member {number} Flag - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.Flag = 0; - - /** - * RoomPlayerInfo HeadOutLine. - * @member {number} HeadOutLine - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.HeadOutLine = 0; - - /** - * RoomPlayerInfo VIP. - * @member {number} VIP - * @memberof gamehall.RoomPlayerInfo - * @instance - */ - RoomPlayerInfo.prototype.VIP = 0; - - /** - * Creates a new RoomPlayerInfo instance using the specified properties. - * @function create - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {gamehall.IRoomPlayerInfo=} [properties] Properties to set - * @returns {gamehall.RoomPlayerInfo} RoomPlayerInfo instance - */ - RoomPlayerInfo.create = function create(properties) { - return new RoomPlayerInfo(properties); - }; - - /** - * Encodes the specified RoomPlayerInfo message. Does not implicitly {@link gamehall.RoomPlayerInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {gamehall.IRoomPlayerInfo} message RoomPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RoomPlayerInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.SnId != null && Object.hasOwnProperty.call(message, "SnId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.SnId); - if (message.Head != null && Object.hasOwnProperty.call(message, "Head")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Head); - if (message.Sex != null && Object.hasOwnProperty.call(message, "Sex")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Sex); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.Name); - if (message.Pos != null && Object.hasOwnProperty.call(message, "Pos")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.Pos); - if (message.Flag != null && Object.hasOwnProperty.call(message, "Flag")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.Flag); - if (message.HeadOutLine != null && Object.hasOwnProperty.call(message, "HeadOutLine")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.HeadOutLine); - if (message.VIP != null && Object.hasOwnProperty.call(message, "VIP")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.VIP); - return writer; - }; - - /** - * Encodes the specified RoomPlayerInfo message, length delimited. Does not implicitly {@link gamehall.RoomPlayerInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {gamehall.IRoomPlayerInfo} message RoomPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RoomPlayerInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a RoomPlayerInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.RoomPlayerInfo} RoomPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RoomPlayerInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.RoomPlayerInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.SnId = reader.int32(); - break; - } - case 2: { - message.Head = reader.int32(); - break; - } - case 3: { - message.Sex = reader.int32(); - break; - } - case 4: { - message.Name = reader.string(); - break; - } - case 5: { - message.Pos = reader.int32(); - break; - } - case 6: { - message.Flag = reader.int32(); - break; - } - case 7: { - message.HeadOutLine = reader.int32(); - break; - } - case 8: { - message.VIP = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a RoomPlayerInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.RoomPlayerInfo} RoomPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RoomPlayerInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a RoomPlayerInfo message. - * @function verify - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - RoomPlayerInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.SnId != null && message.hasOwnProperty("SnId")) - if (!$util.isInteger(message.SnId)) - return "SnId: integer expected"; - if (message.Head != null && message.hasOwnProperty("Head")) - if (!$util.isInteger(message.Head)) - return "Head: integer expected"; - if (message.Sex != null && message.hasOwnProperty("Sex")) - if (!$util.isInteger(message.Sex)) - return "Sex: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.Pos != null && message.hasOwnProperty("Pos")) - if (!$util.isInteger(message.Pos)) - return "Pos: integer expected"; - if (message.Flag != null && message.hasOwnProperty("Flag")) - if (!$util.isInteger(message.Flag)) - return "Flag: integer expected"; - if (message.HeadOutLine != null && message.hasOwnProperty("HeadOutLine")) - if (!$util.isInteger(message.HeadOutLine)) - return "HeadOutLine: integer expected"; - if (message.VIP != null && message.hasOwnProperty("VIP")) - if (!$util.isInteger(message.VIP)) - return "VIP: integer expected"; - return null; - }; - - /** - * Creates a RoomPlayerInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.RoomPlayerInfo} RoomPlayerInfo - */ - RoomPlayerInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.RoomPlayerInfo) - return object; - var message = new $root.gamehall.RoomPlayerInfo(); - if (object.SnId != null) - message.SnId = object.SnId | 0; - if (object.Head != null) - message.Head = object.Head | 0; - if (object.Sex != null) - message.Sex = object.Sex | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.Pos != null) - message.Pos = object.Pos | 0; - if (object.Flag != null) - message.Flag = object.Flag | 0; - if (object.HeadOutLine != null) - message.HeadOutLine = object.HeadOutLine | 0; - if (object.VIP != null) - message.VIP = object.VIP | 0; - return message; - }; - - /** - * Creates a plain object from a RoomPlayerInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {gamehall.RoomPlayerInfo} message RoomPlayerInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - RoomPlayerInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.SnId = 0; - object.Head = 0; - object.Sex = 0; - object.Name = ""; - object.Pos = 0; - object.Flag = 0; - object.HeadOutLine = 0; - object.VIP = 0; - } - if (message.SnId != null && message.hasOwnProperty("SnId")) - object.SnId = message.SnId; - if (message.Head != null && message.hasOwnProperty("Head")) - object.Head = message.Head; - if (message.Sex != null && message.hasOwnProperty("Sex")) - object.Sex = message.Sex; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.Pos != null && message.hasOwnProperty("Pos")) - object.Pos = message.Pos; - if (message.Flag != null && message.hasOwnProperty("Flag")) - object.Flag = message.Flag; - if (message.HeadOutLine != null && message.hasOwnProperty("HeadOutLine")) - object.HeadOutLine = message.HeadOutLine; - if (message.VIP != null && message.hasOwnProperty("VIP")) - object.VIP = message.VIP; - return object; - }; - - /** - * Converts this RoomPlayerInfo to JSON. - * @function toJSON - * @memberof gamehall.RoomPlayerInfo - * @instance - * @returns {Object.} JSON object - */ - RoomPlayerInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for RoomPlayerInfo - * @function getTypeUrl - * @memberof gamehall.RoomPlayerInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - RoomPlayerInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.RoomPlayerInfo"; - }; - - return RoomPlayerInfo; - })(); - - gamehall.RoomInfo = (function() { - - /** - * Properties of a RoomInfo. - * @memberof gamehall - * @interface IRoomInfo - * @property {number|null} [RoomId] RoomInfo RoomId - * @property {boolean|null} [Starting] RoomInfo Starting - * @property {Array.|null} [Players] RoomInfo Players - */ - - /** - * Constructs a new RoomInfo. - * @memberof gamehall - * @classdesc Represents a RoomInfo. - * @implements IRoomInfo - * @constructor - * @param {gamehall.IRoomInfo=} [properties] Properties to set - */ - function RoomInfo(properties) { - this.Players = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * RoomInfo RoomId. - * @member {number} RoomId - * @memberof gamehall.RoomInfo - * @instance - */ - RoomInfo.prototype.RoomId = 0; - - /** - * RoomInfo Starting. - * @member {boolean} Starting - * @memberof gamehall.RoomInfo - * @instance - */ - RoomInfo.prototype.Starting = false; - - /** - * RoomInfo Players. - * @member {Array.} Players - * @memberof gamehall.RoomInfo - * @instance - */ - RoomInfo.prototype.Players = $util.emptyArray; - - /** - * Creates a new RoomInfo instance using the specified properties. - * @function create - * @memberof gamehall.RoomInfo - * @static - * @param {gamehall.IRoomInfo=} [properties] Properties to set - * @returns {gamehall.RoomInfo} RoomInfo instance - */ - RoomInfo.create = function create(properties) { - return new RoomInfo(properties); - }; - - /** - * Encodes the specified RoomInfo message. Does not implicitly {@link gamehall.RoomInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.RoomInfo - * @static - * @param {gamehall.IRoomInfo} message RoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RoomInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.Players != null && message.Players.length) - for (var i = 0; i < message.Players.length; ++i) - $root.gamehall.RoomPlayerInfo.encode(message.Players[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); - if (message.Starting != null && Object.hasOwnProperty.call(message, "Starting")) - writer.uint32(/* id 7, wireType 0 =*/56).bool(message.Starting); - return writer; - }; - - /** - * Encodes the specified RoomInfo message, length delimited. Does not implicitly {@link gamehall.RoomInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.RoomInfo - * @static - * @param {gamehall.IRoomInfo} message RoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RoomInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a RoomInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.RoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.RoomInfo} RoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RoomInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.RoomInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 7: { - message.Starting = reader.bool(); - break; - } - case 5: { - if (!(message.Players && message.Players.length)) - message.Players = []; - message.Players.push($root.gamehall.RoomPlayerInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a RoomInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.RoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.RoomInfo} RoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RoomInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a RoomInfo message. - * @function verify - * @memberof gamehall.RoomInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - RoomInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.Starting != null && message.hasOwnProperty("Starting")) - if (typeof message.Starting !== "boolean") - return "Starting: boolean expected"; - if (message.Players != null && message.hasOwnProperty("Players")) { - if (!Array.isArray(message.Players)) - return "Players: array expected"; - for (var i = 0; i < message.Players.length; ++i) { - var error = $root.gamehall.RoomPlayerInfo.verify(message.Players[i]); - if (error) - return "Players." + error; - } - } - return null; - }; - - /** - * Creates a RoomInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.RoomInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.RoomInfo} RoomInfo - */ - RoomInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.RoomInfo) - return object; - var message = new $root.gamehall.RoomInfo(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.Starting != null) - message.Starting = Boolean(object.Starting); - if (object.Players) { - if (!Array.isArray(object.Players)) - throw TypeError(".gamehall.RoomInfo.Players: array expected"); - message.Players = []; - for (var i = 0; i < object.Players.length; ++i) { - if (typeof object.Players[i] !== "object") - throw TypeError(".gamehall.RoomInfo.Players: object expected"); - message.Players[i] = $root.gamehall.RoomPlayerInfo.fromObject(object.Players[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a RoomInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.RoomInfo - * @static - * @param {gamehall.RoomInfo} message RoomInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - RoomInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Players = []; - if (options.defaults) { - object.RoomId = 0; - object.Starting = false; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.Players && message.Players.length) { - object.Players = []; - for (var j = 0; j < message.Players.length; ++j) - object.Players[j] = $root.gamehall.RoomPlayerInfo.toObject(message.Players[j], options); - } - if (message.Starting != null && message.hasOwnProperty("Starting")) - object.Starting = message.Starting; - return object; - }; - - /** - * Converts this RoomInfo to JSON. - * @function toJSON - * @memberof gamehall.RoomInfo - * @instance - * @returns {Object.} JSON object - */ - RoomInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for RoomInfo - * @function getTypeUrl - * @memberof gamehall.RoomInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - RoomInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.RoomInfo"; - }; - - return RoomInfo; - })(); - - gamehall.CSHallRoomList = (function() { - - /** - * Properties of a CSHallRoomList. - * @memberof gamehall - * @interface ICSHallRoomList - * @property {number|null} [HallId] CSHallRoomList HallId - */ - - /** - * Constructs a new CSHallRoomList. - * @memberof gamehall - * @classdesc Represents a CSHallRoomList. - * @implements ICSHallRoomList - * @constructor - * @param {gamehall.ICSHallRoomList=} [properties] Properties to set - */ - function CSHallRoomList(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSHallRoomList HallId. - * @member {number} HallId - * @memberof gamehall.CSHallRoomList - * @instance - */ - CSHallRoomList.prototype.HallId = 0; - - /** - * Creates a new CSHallRoomList instance using the specified properties. - * @function create - * @memberof gamehall.CSHallRoomList - * @static - * @param {gamehall.ICSHallRoomList=} [properties] Properties to set - * @returns {gamehall.CSHallRoomList} CSHallRoomList instance - */ - CSHallRoomList.create = function create(properties) { - return new CSHallRoomList(properties); - }; - - /** - * Encodes the specified CSHallRoomList message. Does not implicitly {@link gamehall.CSHallRoomList.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHallRoomList - * @static - * @param {gamehall.ICSHallRoomList} message CSHallRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHallRoomList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.HallId); - return writer; - }; - - /** - * Encodes the specified CSHallRoomList message, length delimited. Does not implicitly {@link gamehall.CSHallRoomList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHallRoomList - * @static - * @param {gamehall.ICSHallRoomList} message CSHallRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHallRoomList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHallRoomList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHallRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHallRoomList} CSHallRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHallRoomList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHallRoomList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.HallId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHallRoomList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHallRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHallRoomList} CSHallRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHallRoomList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHallRoomList message. - * @function verify - * @memberof gamehall.CSHallRoomList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHallRoomList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - return null; - }; - - /** - * Creates a CSHallRoomList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHallRoomList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHallRoomList} CSHallRoomList - */ - CSHallRoomList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHallRoomList) - return object; - var message = new $root.gamehall.CSHallRoomList(); - if (object.HallId != null) - message.HallId = object.HallId | 0; - return message; - }; - - /** - * Creates a plain object from a CSHallRoomList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHallRoomList - * @static - * @param {gamehall.CSHallRoomList} message CSHallRoomList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHallRoomList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.HallId = 0; - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - return object; - }; - - /** - * Converts this CSHallRoomList to JSON. - * @function toJSON - * @memberof gamehall.CSHallRoomList - * @instance - * @returns {Object.} JSON object - */ - CSHallRoomList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHallRoomList - * @function getTypeUrl - * @memberof gamehall.CSHallRoomList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHallRoomList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHallRoomList"; - }; - - return CSHallRoomList; - })(); - - gamehall.HallInfo = (function() { - - /** - * Properties of a HallInfo. - * @memberof gamehall - * @interface IHallInfo - * @property {number|null} [SceneType] HallInfo SceneType - * @property {number|null} [PlayerNum] HallInfo PlayerNum - */ - - /** - * Constructs a new HallInfo. - * @memberof gamehall - * @classdesc Represents a HallInfo. - * @implements IHallInfo - * @constructor - * @param {gamehall.IHallInfo=} [properties] Properties to set - */ - function HallInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * HallInfo SceneType. - * @member {number} SceneType - * @memberof gamehall.HallInfo - * @instance - */ - HallInfo.prototype.SceneType = 0; - - /** - * HallInfo PlayerNum. - * @member {number} PlayerNum - * @memberof gamehall.HallInfo - * @instance - */ - HallInfo.prototype.PlayerNum = 0; - - /** - * Creates a new HallInfo instance using the specified properties. - * @function create - * @memberof gamehall.HallInfo - * @static - * @param {gamehall.IHallInfo=} [properties] Properties to set - * @returns {gamehall.HallInfo} HallInfo instance - */ - HallInfo.create = function create(properties) { - return new HallInfo(properties); - }; - - /** - * Encodes the specified HallInfo message. Does not implicitly {@link gamehall.HallInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.HallInfo - * @static - * @param {gamehall.IHallInfo} message HallInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.SceneType != null && Object.hasOwnProperty.call(message, "SceneType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.SceneType); - if (message.PlayerNum != null && Object.hasOwnProperty.call(message, "PlayerNum")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PlayerNum); - return writer; - }; - - /** - * Encodes the specified HallInfo message, length delimited. Does not implicitly {@link gamehall.HallInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.HallInfo - * @static - * @param {gamehall.IHallInfo} message HallInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a HallInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.HallInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.HallInfo} HallInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.HallInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.SceneType = reader.int32(); - break; - } - case 2: { - message.PlayerNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a HallInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.HallInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.HallInfo} HallInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a HallInfo message. - * @function verify - * @memberof gamehall.HallInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - HallInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.SceneType != null && message.hasOwnProperty("SceneType")) - if (!$util.isInteger(message.SceneType)) - return "SceneType: integer expected"; - if (message.PlayerNum != null && message.hasOwnProperty("PlayerNum")) - if (!$util.isInteger(message.PlayerNum)) - return "PlayerNum: integer expected"; - return null; - }; - - /** - * Creates a HallInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.HallInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.HallInfo} HallInfo - */ - HallInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.HallInfo) - return object; - var message = new $root.gamehall.HallInfo(); - if (object.SceneType != null) - message.SceneType = object.SceneType | 0; - if (object.PlayerNum != null) - message.PlayerNum = object.PlayerNum | 0; - return message; - }; - - /** - * Creates a plain object from a HallInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.HallInfo - * @static - * @param {gamehall.HallInfo} message HallInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - HallInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.SceneType = 0; - object.PlayerNum = 0; - } - if (message.SceneType != null && message.hasOwnProperty("SceneType")) - object.SceneType = message.SceneType; - if (message.PlayerNum != null && message.hasOwnProperty("PlayerNum")) - object.PlayerNum = message.PlayerNum; - return object; - }; - - /** - * Converts this HallInfo to JSON. - * @function toJSON - * @memberof gamehall.HallInfo - * @instance - * @returns {Object.} JSON object - */ - HallInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for HallInfo - * @function getTypeUrl - * @memberof gamehall.HallInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - HallInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.HallInfo"; - }; - - return HallInfo; - })(); - - gamehall.HallPlayerNum = (function() { - - /** - * Properties of a HallPlayerNum. - * @memberof gamehall - * @interface IHallPlayerNum - * @property {Array.|null} [HallData] HallPlayerNum HallData - */ - - /** - * Constructs a new HallPlayerNum. - * @memberof gamehall - * @classdesc Represents a HallPlayerNum. - * @implements IHallPlayerNum - * @constructor - * @param {gamehall.IHallPlayerNum=} [properties] Properties to set - */ - function HallPlayerNum(properties) { - this.HallData = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * HallPlayerNum HallData. - * @member {Array.} HallData - * @memberof gamehall.HallPlayerNum - * @instance - */ - HallPlayerNum.prototype.HallData = $util.emptyArray; - - /** - * Creates a new HallPlayerNum instance using the specified properties. - * @function create - * @memberof gamehall.HallPlayerNum - * @static - * @param {gamehall.IHallPlayerNum=} [properties] Properties to set - * @returns {gamehall.HallPlayerNum} HallPlayerNum instance - */ - HallPlayerNum.create = function create(properties) { - return new HallPlayerNum(properties); - }; - - /** - * Encodes the specified HallPlayerNum message. Does not implicitly {@link gamehall.HallPlayerNum.verify|verify} messages. - * @function encode - * @memberof gamehall.HallPlayerNum - * @static - * @param {gamehall.IHallPlayerNum} message HallPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallPlayerNum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallData != null && message.HallData.length) - for (var i = 0; i < message.HallData.length; ++i) - $root.gamehall.HallInfo.encode(message.HallData[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified HallPlayerNum message, length delimited. Does not implicitly {@link gamehall.HallPlayerNum.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.HallPlayerNum - * @static - * @param {gamehall.IHallPlayerNum} message HallPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallPlayerNum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a HallPlayerNum message from the specified reader or buffer. - * @function decode - * @memberof gamehall.HallPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.HallPlayerNum} HallPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallPlayerNum.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.HallPlayerNum(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.HallData && message.HallData.length)) - message.HallData = []; - message.HallData.push($root.gamehall.HallInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a HallPlayerNum message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.HallPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.HallPlayerNum} HallPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallPlayerNum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a HallPlayerNum message. - * @function verify - * @memberof gamehall.HallPlayerNum - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - HallPlayerNum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallData != null && message.hasOwnProperty("HallData")) { - if (!Array.isArray(message.HallData)) - return "HallData: array expected"; - for (var i = 0; i < message.HallData.length; ++i) { - var error = $root.gamehall.HallInfo.verify(message.HallData[i]); - if (error) - return "HallData." + error; - } - } - return null; - }; - - /** - * Creates a HallPlayerNum message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.HallPlayerNum - * @static - * @param {Object.} object Plain object - * @returns {gamehall.HallPlayerNum} HallPlayerNum - */ - HallPlayerNum.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.HallPlayerNum) - return object; - var message = new $root.gamehall.HallPlayerNum(); - if (object.HallData) { - if (!Array.isArray(object.HallData)) - throw TypeError(".gamehall.HallPlayerNum.HallData: array expected"); - message.HallData = []; - for (var i = 0; i < object.HallData.length; ++i) { - if (typeof object.HallData[i] !== "object") - throw TypeError(".gamehall.HallPlayerNum.HallData: object expected"); - message.HallData[i] = $root.gamehall.HallInfo.fromObject(object.HallData[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a HallPlayerNum message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.HallPlayerNum - * @static - * @param {gamehall.HallPlayerNum} message HallPlayerNum - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - HallPlayerNum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.HallData = []; - if (message.HallData && message.HallData.length) { - object.HallData = []; - for (var j = 0; j < message.HallData.length; ++j) - object.HallData[j] = $root.gamehall.HallInfo.toObject(message.HallData[j], options); - } - return object; - }; - - /** - * Converts this HallPlayerNum to JSON. - * @function toJSON - * @memberof gamehall.HallPlayerNum - * @instance - * @returns {Object.} JSON object - */ - HallPlayerNum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for HallPlayerNum - * @function getTypeUrl - * @memberof gamehall.HallPlayerNum - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - HallPlayerNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.HallPlayerNum"; - }; - - return HallPlayerNum; - })(); - - gamehall.SCHallRoomList = (function() { - - /** - * Properties of a SCHallRoomList. - * @memberof gamehall - * @interface ISCHallRoomList - * @property {number|null} [HallId] SCHallRoomList HallId - * @property {number|null} [GameId] SCHallRoomList GameId - * @property {number|null} [GameMode] SCHallRoomList GameMode - * @property {boolean|null} [IsAdd] SCHallRoomList IsAdd - * @property {Array.|null} [Params] SCHallRoomList Params - * @property {Array.|null} [Rooms] SCHallRoomList Rooms - * @property {Array.|null} [HallData] SCHallRoomList HallData - */ - - /** - * Constructs a new SCHallRoomList. - * @memberof gamehall - * @classdesc Represents a SCHallRoomList. - * @implements ISCHallRoomList - * @constructor - * @param {gamehall.ISCHallRoomList=} [properties] Properties to set - */ - function SCHallRoomList(properties) { - this.Params = []; - this.Rooms = []; - this.HallData = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCHallRoomList HallId. - * @member {number} HallId - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.HallId = 0; - - /** - * SCHallRoomList GameId. - * @member {number} GameId - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.GameId = 0; - - /** - * SCHallRoomList GameMode. - * @member {number} GameMode - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.GameMode = 0; - - /** - * SCHallRoomList IsAdd. - * @member {boolean} IsAdd - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.IsAdd = false; - - /** - * SCHallRoomList Params. - * @member {Array.} Params - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.Params = $util.emptyArray; - - /** - * SCHallRoomList Rooms. - * @member {Array.} Rooms - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.Rooms = $util.emptyArray; - - /** - * SCHallRoomList HallData. - * @member {Array.} HallData - * @memberof gamehall.SCHallRoomList - * @instance - */ - SCHallRoomList.prototype.HallData = $util.emptyArray; - - /** - * Creates a new SCHallRoomList instance using the specified properties. - * @function create - * @memberof gamehall.SCHallRoomList - * @static - * @param {gamehall.ISCHallRoomList=} [properties] Properties to set - * @returns {gamehall.SCHallRoomList} SCHallRoomList instance - */ - SCHallRoomList.create = function create(properties) { - return new SCHallRoomList(properties); - }; - - /** - * Encodes the specified SCHallRoomList message. Does not implicitly {@link gamehall.SCHallRoomList.verify|verify} messages. - * @function encode - * @memberof gamehall.SCHallRoomList - * @static - * @param {gamehall.ISCHallRoomList} message SCHallRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHallRoomList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.HallId); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - if (message.GameMode != null && Object.hasOwnProperty.call(message, "GameMode")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.GameMode); - if (message.IsAdd != null && Object.hasOwnProperty.call(message, "IsAdd")) - writer.uint32(/* id 4, wireType 0 =*/32).bool(message.IsAdd); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.Rooms != null && message.Rooms.length) - for (var i = 0; i < message.Rooms.length; ++i) - $root.gamehall.RoomInfo.encode(message.Rooms[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); - if (message.HallData != null && message.HallData.length) - for (var i = 0; i < message.HallData.length; ++i) - $root.gamehall.HallInfo.encode(message.HallData[i], writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCHallRoomList message, length delimited. Does not implicitly {@link gamehall.SCHallRoomList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCHallRoomList - * @static - * @param {gamehall.ISCHallRoomList} message SCHallRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHallRoomList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCHallRoomList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCHallRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCHallRoomList} SCHallRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHallRoomList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCHallRoomList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.HallId = reader.int32(); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - case 3: { - message.GameMode = reader.int32(); - break; - } - case 4: { - message.IsAdd = reader.bool(); - break; - } - case 5: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 6: { - if (!(message.Rooms && message.Rooms.length)) - message.Rooms = []; - message.Rooms.push($root.gamehall.RoomInfo.decode(reader, reader.uint32())); - break; - } - case 7: { - if (!(message.HallData && message.HallData.length)) - message.HallData = []; - message.HallData.push($root.gamehall.HallInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCHallRoomList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCHallRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCHallRoomList} SCHallRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHallRoomList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCHallRoomList message. - * @function verify - * @memberof gamehall.SCHallRoomList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCHallRoomList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - if (!$util.isInteger(message.GameMode)) - return "GameMode: integer expected"; - if (message.IsAdd != null && message.hasOwnProperty("IsAdd")) - if (typeof message.IsAdd !== "boolean") - return "IsAdd: boolean expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.Rooms != null && message.hasOwnProperty("Rooms")) { - if (!Array.isArray(message.Rooms)) - return "Rooms: array expected"; - for (var i = 0; i < message.Rooms.length; ++i) { - var error = $root.gamehall.RoomInfo.verify(message.Rooms[i]); - if (error) - return "Rooms." + error; - } - } - if (message.HallData != null && message.hasOwnProperty("HallData")) { - if (!Array.isArray(message.HallData)) - return "HallData: array expected"; - for (var i = 0; i < message.HallData.length; ++i) { - var error = $root.gamehall.HallInfo.verify(message.HallData[i]); - if (error) - return "HallData." + error; - } - } - return null; - }; - - /** - * Creates a SCHallRoomList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCHallRoomList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCHallRoomList} SCHallRoomList - */ - SCHallRoomList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCHallRoomList) - return object; - var message = new $root.gamehall.SCHallRoomList(); - if (object.HallId != null) - message.HallId = object.HallId | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.GameMode != null) - message.GameMode = object.GameMode | 0; - if (object.IsAdd != null) - message.IsAdd = Boolean(object.IsAdd); - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.SCHallRoomList.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - if (object.Rooms) { - if (!Array.isArray(object.Rooms)) - throw TypeError(".gamehall.SCHallRoomList.Rooms: array expected"); - message.Rooms = []; - for (var i = 0; i < object.Rooms.length; ++i) { - if (typeof object.Rooms[i] !== "object") - throw TypeError(".gamehall.SCHallRoomList.Rooms: object expected"); - message.Rooms[i] = $root.gamehall.RoomInfo.fromObject(object.Rooms[i]); - } - } - if (object.HallData) { - if (!Array.isArray(object.HallData)) - throw TypeError(".gamehall.SCHallRoomList.HallData: array expected"); - message.HallData = []; - for (var i = 0; i < object.HallData.length; ++i) { - if (typeof object.HallData[i] !== "object") - throw TypeError(".gamehall.SCHallRoomList.HallData: object expected"); - message.HallData[i] = $root.gamehall.HallInfo.fromObject(object.HallData[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCHallRoomList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCHallRoomList - * @static - * @param {gamehall.SCHallRoomList} message SCHallRoomList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCHallRoomList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.Params = []; - object.Rooms = []; - object.HallData = []; - } - if (options.defaults) { - object.HallId = 0; - object.GameId = 0; - object.GameMode = 0; - object.IsAdd = false; - } - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - object.GameMode = message.GameMode; - if (message.IsAdd != null && message.hasOwnProperty("IsAdd")) - object.IsAdd = message.IsAdd; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.Rooms && message.Rooms.length) { - object.Rooms = []; - for (var j = 0; j < message.Rooms.length; ++j) - object.Rooms[j] = $root.gamehall.RoomInfo.toObject(message.Rooms[j], options); - } - if (message.HallData && message.HallData.length) { - object.HallData = []; - for (var j = 0; j < message.HallData.length; ++j) - object.HallData[j] = $root.gamehall.HallInfo.toObject(message.HallData[j], options); - } - return object; - }; - - /** - * Converts this SCHallRoomList to JSON. - * @function toJSON - * @memberof gamehall.SCHallRoomList - * @instance - * @returns {Object.} JSON object - */ - SCHallRoomList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCHallRoomList - * @function getTypeUrl - * @memberof gamehall.SCHallRoomList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCHallRoomList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCHallRoomList"; - }; - - return SCHallRoomList; - })(); - - gamehall.SCRoomPlayerEnter = (function() { - - /** - * Properties of a SCRoomPlayerEnter. - * @memberof gamehall - * @interface ISCRoomPlayerEnter - * @property {number|null} [RoomId] SCRoomPlayerEnter RoomId - * @property {gamehall.IRoomPlayerInfo|null} [Player] SCRoomPlayerEnter Player - */ - - /** - * Constructs a new SCRoomPlayerEnter. - * @memberof gamehall - * @classdesc Represents a SCRoomPlayerEnter. - * @implements ISCRoomPlayerEnter - * @constructor - * @param {gamehall.ISCRoomPlayerEnter=} [properties] Properties to set - */ - function SCRoomPlayerEnter(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRoomPlayerEnter RoomId. - * @member {number} RoomId - * @memberof gamehall.SCRoomPlayerEnter - * @instance - */ - SCRoomPlayerEnter.prototype.RoomId = 0; - - /** - * SCRoomPlayerEnter Player. - * @member {gamehall.IRoomPlayerInfo|null|undefined} Player - * @memberof gamehall.SCRoomPlayerEnter - * @instance - */ - SCRoomPlayerEnter.prototype.Player = null; - - /** - * Creates a new SCRoomPlayerEnter instance using the specified properties. - * @function create - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {gamehall.ISCRoomPlayerEnter=} [properties] Properties to set - * @returns {gamehall.SCRoomPlayerEnter} SCRoomPlayerEnter instance - */ - SCRoomPlayerEnter.create = function create(properties) { - return new SCRoomPlayerEnter(properties); - }; - - /** - * Encodes the specified SCRoomPlayerEnter message. Does not implicitly {@link gamehall.SCRoomPlayerEnter.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {gamehall.ISCRoomPlayerEnter} message SCRoomPlayerEnter message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomPlayerEnter.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.Player != null && Object.hasOwnProperty.call(message, "Player")) - $root.gamehall.RoomPlayerInfo.encode(message.Player, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCRoomPlayerEnter message, length delimited. Does not implicitly {@link gamehall.SCRoomPlayerEnter.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {gamehall.ISCRoomPlayerEnter} message SCRoomPlayerEnter message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomPlayerEnter.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRoomPlayerEnter message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRoomPlayerEnter} SCRoomPlayerEnter - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomPlayerEnter.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRoomPlayerEnter(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.Player = $root.gamehall.RoomPlayerInfo.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRoomPlayerEnter message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRoomPlayerEnter} SCRoomPlayerEnter - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomPlayerEnter.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRoomPlayerEnter message. - * @function verify - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRoomPlayerEnter.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.Player != null && message.hasOwnProperty("Player")) { - var error = $root.gamehall.RoomPlayerInfo.verify(message.Player); - if (error) - return "Player." + error; - } - return null; - }; - - /** - * Creates a SCRoomPlayerEnter message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRoomPlayerEnter} SCRoomPlayerEnter - */ - SCRoomPlayerEnter.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRoomPlayerEnter) - return object; - var message = new $root.gamehall.SCRoomPlayerEnter(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.Player != null) { - if (typeof object.Player !== "object") - throw TypeError(".gamehall.SCRoomPlayerEnter.Player: object expected"); - message.Player = $root.gamehall.RoomPlayerInfo.fromObject(object.Player); - } - return message; - }; - - /** - * Creates a plain object from a SCRoomPlayerEnter message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {gamehall.SCRoomPlayerEnter} message SCRoomPlayerEnter - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRoomPlayerEnter.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.Player = null; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.Player != null && message.hasOwnProperty("Player")) - object.Player = $root.gamehall.RoomPlayerInfo.toObject(message.Player, options); - return object; - }; - - /** - * Converts this SCRoomPlayerEnter to JSON. - * @function toJSON - * @memberof gamehall.SCRoomPlayerEnter - * @instance - * @returns {Object.} JSON object - */ - SCRoomPlayerEnter.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRoomPlayerEnter - * @function getTypeUrl - * @memberof gamehall.SCRoomPlayerEnter - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRoomPlayerEnter.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRoomPlayerEnter"; - }; - - return SCRoomPlayerEnter; - })(); - - gamehall.SCRoomPlayerLeave = (function() { - - /** - * Properties of a SCRoomPlayerLeave. - * @memberof gamehall - * @interface ISCRoomPlayerLeave - * @property {number|null} [RoomId] SCRoomPlayerLeave RoomId - * @property {number|null} [Pos] SCRoomPlayerLeave Pos - */ - - /** - * Constructs a new SCRoomPlayerLeave. - * @memberof gamehall - * @classdesc Represents a SCRoomPlayerLeave. - * @implements ISCRoomPlayerLeave - * @constructor - * @param {gamehall.ISCRoomPlayerLeave=} [properties] Properties to set - */ - function SCRoomPlayerLeave(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRoomPlayerLeave RoomId. - * @member {number} RoomId - * @memberof gamehall.SCRoomPlayerLeave - * @instance - */ - SCRoomPlayerLeave.prototype.RoomId = 0; - - /** - * SCRoomPlayerLeave Pos. - * @member {number} Pos - * @memberof gamehall.SCRoomPlayerLeave - * @instance - */ - SCRoomPlayerLeave.prototype.Pos = 0; - - /** - * Creates a new SCRoomPlayerLeave instance using the specified properties. - * @function create - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {gamehall.ISCRoomPlayerLeave=} [properties] Properties to set - * @returns {gamehall.SCRoomPlayerLeave} SCRoomPlayerLeave instance - */ - SCRoomPlayerLeave.create = function create(properties) { - return new SCRoomPlayerLeave(properties); - }; - - /** - * Encodes the specified SCRoomPlayerLeave message. Does not implicitly {@link gamehall.SCRoomPlayerLeave.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {gamehall.ISCRoomPlayerLeave} message SCRoomPlayerLeave message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomPlayerLeave.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.Pos != null && Object.hasOwnProperty.call(message, "Pos")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Pos); - return writer; - }; - - /** - * Encodes the specified SCRoomPlayerLeave message, length delimited. Does not implicitly {@link gamehall.SCRoomPlayerLeave.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {gamehall.ISCRoomPlayerLeave} message SCRoomPlayerLeave message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomPlayerLeave.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRoomPlayerLeave message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRoomPlayerLeave} SCRoomPlayerLeave - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomPlayerLeave.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRoomPlayerLeave(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.Pos = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRoomPlayerLeave message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRoomPlayerLeave} SCRoomPlayerLeave - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomPlayerLeave.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRoomPlayerLeave message. - * @function verify - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRoomPlayerLeave.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.Pos != null && message.hasOwnProperty("Pos")) - if (!$util.isInteger(message.Pos)) - return "Pos: integer expected"; - return null; - }; - - /** - * Creates a SCRoomPlayerLeave message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRoomPlayerLeave} SCRoomPlayerLeave - */ - SCRoomPlayerLeave.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRoomPlayerLeave) - return object; - var message = new $root.gamehall.SCRoomPlayerLeave(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.Pos != null) - message.Pos = object.Pos | 0; - return message; - }; - - /** - * Creates a plain object from a SCRoomPlayerLeave message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {gamehall.SCRoomPlayerLeave} message SCRoomPlayerLeave - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRoomPlayerLeave.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.Pos = 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.Pos != null && message.hasOwnProperty("Pos")) - object.Pos = message.Pos; - return object; - }; - - /** - * Converts this SCRoomPlayerLeave to JSON. - * @function toJSON - * @memberof gamehall.SCRoomPlayerLeave - * @instance - * @returns {Object.} JSON object - */ - SCRoomPlayerLeave.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRoomPlayerLeave - * @function getTypeUrl - * @memberof gamehall.SCRoomPlayerLeave - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRoomPlayerLeave.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRoomPlayerLeave"; - }; - - return SCRoomPlayerLeave; - })(); - - gamehall.SCRoomStateChange = (function() { - - /** - * Properties of a SCRoomStateChange. - * @memberof gamehall - * @interface ISCRoomStateChange - * @property {number|null} [RoomId] SCRoomStateChange RoomId - * @property {boolean|null} [Starting] SCRoomStateChange Starting - * @property {number|null} [State] SCRoomStateChange State - */ - - /** - * Constructs a new SCRoomStateChange. - * @memberof gamehall - * @classdesc Represents a SCRoomStateChange. - * @implements ISCRoomStateChange - * @constructor - * @param {gamehall.ISCRoomStateChange=} [properties] Properties to set - */ - function SCRoomStateChange(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRoomStateChange RoomId. - * @member {number} RoomId - * @memberof gamehall.SCRoomStateChange - * @instance - */ - SCRoomStateChange.prototype.RoomId = 0; - - /** - * SCRoomStateChange Starting. - * @member {boolean} Starting - * @memberof gamehall.SCRoomStateChange - * @instance - */ - SCRoomStateChange.prototype.Starting = false; - - /** - * SCRoomStateChange State. - * @member {number} State - * @memberof gamehall.SCRoomStateChange - * @instance - */ - SCRoomStateChange.prototype.State = 0; - - /** - * Creates a new SCRoomStateChange instance using the specified properties. - * @function create - * @memberof gamehall.SCRoomStateChange - * @static - * @param {gamehall.ISCRoomStateChange=} [properties] Properties to set - * @returns {gamehall.SCRoomStateChange} SCRoomStateChange instance - */ - SCRoomStateChange.create = function create(properties) { - return new SCRoomStateChange(properties); - }; - - /** - * Encodes the specified SCRoomStateChange message. Does not implicitly {@link gamehall.SCRoomStateChange.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRoomStateChange - * @static - * @param {gamehall.ISCRoomStateChange} message SCRoomStateChange message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomStateChange.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.Starting != null && Object.hasOwnProperty.call(message, "Starting")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.Starting); - if (message.State != null && Object.hasOwnProperty.call(message, "State")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.State); - return writer; - }; - - /** - * Encodes the specified SCRoomStateChange message, length delimited. Does not implicitly {@link gamehall.SCRoomStateChange.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRoomStateChange - * @static - * @param {gamehall.ISCRoomStateChange} message SCRoomStateChange message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRoomStateChange.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRoomStateChange message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRoomStateChange - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRoomStateChange} SCRoomStateChange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomStateChange.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRoomStateChange(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.Starting = reader.bool(); - break; - } - case 3: { - message.State = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRoomStateChange message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRoomStateChange - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRoomStateChange} SCRoomStateChange - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRoomStateChange.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRoomStateChange message. - * @function verify - * @memberof gamehall.SCRoomStateChange - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRoomStateChange.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.Starting != null && message.hasOwnProperty("Starting")) - if (typeof message.Starting !== "boolean") - return "Starting: boolean expected"; - if (message.State != null && message.hasOwnProperty("State")) - if (!$util.isInteger(message.State)) - return "State: integer expected"; - return null; - }; - - /** - * Creates a SCRoomStateChange message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRoomStateChange - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRoomStateChange} SCRoomStateChange - */ - SCRoomStateChange.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRoomStateChange) - return object; - var message = new $root.gamehall.SCRoomStateChange(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.Starting != null) - message.Starting = Boolean(object.Starting); - if (object.State != null) - message.State = object.State | 0; - return message; - }; - - /** - * Creates a plain object from a SCRoomStateChange message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRoomStateChange - * @static - * @param {gamehall.SCRoomStateChange} message SCRoomStateChange - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRoomStateChange.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.Starting = false; - object.State = 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.Starting != null && message.hasOwnProperty("Starting")) - object.Starting = message.Starting; - if (message.State != null && message.hasOwnProperty("State")) - object.State = message.State; - return object; - }; - - /** - * Converts this SCRoomStateChange to JSON. - * @function toJSON - * @memberof gamehall.SCRoomStateChange - * @instance - * @returns {Object.} JSON object - */ - SCRoomStateChange.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRoomStateChange - * @function getTypeUrl - * @memberof gamehall.SCRoomStateChange - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRoomStateChange.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRoomStateChange"; - }; - - return SCRoomStateChange; - })(); - - gamehall.CSCreateRoom = (function() { - - /** - * Properties of a CSCreateRoom. - * @memberof gamehall - * @interface ICSCreateRoom - * @property {number|null} [GameId] CSCreateRoom GameId - * @property {number|null} [BaseCoin] CSCreateRoom BaseCoin - * @property {number|null} [SceneMode] CSCreateRoom SceneMode - * @property {number|null} [MaxPlayerNum] CSCreateRoom MaxPlayerNum - * @property {Array.|null} [Params] CSCreateRoom Params - */ - - /** - * Constructs a new CSCreateRoom. - * @memberof gamehall - * @classdesc Represents a CSCreateRoom. - * @implements ICSCreateRoom - * @constructor - * @param {gamehall.ICSCreateRoom=} [properties] Properties to set - */ - function CSCreateRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCreateRoom GameId. - * @member {number} GameId - * @memberof gamehall.CSCreateRoom - * @instance - */ - CSCreateRoom.prototype.GameId = 0; - - /** - * CSCreateRoom BaseCoin. - * @member {number} BaseCoin - * @memberof gamehall.CSCreateRoom - * @instance - */ - CSCreateRoom.prototype.BaseCoin = 0; - - /** - * CSCreateRoom SceneMode. - * @member {number} SceneMode - * @memberof gamehall.CSCreateRoom - * @instance - */ - CSCreateRoom.prototype.SceneMode = 0; - - /** - * CSCreateRoom MaxPlayerNum. - * @member {number} MaxPlayerNum - * @memberof gamehall.CSCreateRoom - * @instance - */ - CSCreateRoom.prototype.MaxPlayerNum = 0; - - /** - * CSCreateRoom Params. - * @member {Array.} Params - * @memberof gamehall.CSCreateRoom - * @instance - */ - CSCreateRoom.prototype.Params = $util.emptyArray; - - /** - * Creates a new CSCreateRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSCreateRoom - * @static - * @param {gamehall.ICSCreateRoom=} [properties] Properties to set - * @returns {gamehall.CSCreateRoom} CSCreateRoom instance - */ - CSCreateRoom.create = function create(properties) { - return new CSCreateRoom(properties); - }; - - /** - * Encodes the specified CSCreateRoom message. Does not implicitly {@link gamehall.CSCreateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCreateRoom - * @static - * @param {gamehall.ICSCreateRoom} message CSCreateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCreateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.BaseCoin != null && Object.hasOwnProperty.call(message, "BaseCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.BaseCoin); - if (message.SceneMode != null && Object.hasOwnProperty.call(message, "SceneMode")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.SceneMode); - if (message.MaxPlayerNum != null && Object.hasOwnProperty.call(message, "MaxPlayerNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.MaxPlayerNum); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified CSCreateRoom message, length delimited. Does not implicitly {@link gamehall.CSCreateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCreateRoom - * @static - * @param {gamehall.ICSCreateRoom} message CSCreateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCreateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCreateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCreateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCreateRoom} CSCreateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCreateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCreateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.BaseCoin = reader.int32(); - break; - } - case 3: { - message.SceneMode = reader.int32(); - break; - } - case 4: { - message.MaxPlayerNum = reader.int32(); - break; - } - case 5: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCreateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCreateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCreateRoom} CSCreateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCreateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCreateRoom message. - * @function verify - * @memberof gamehall.CSCreateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCreateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - if (!$util.isInteger(message.BaseCoin)) - return "BaseCoin: integer expected"; - if (message.SceneMode != null && message.hasOwnProperty("SceneMode")) - if (!$util.isInteger(message.SceneMode)) - return "SceneMode: integer expected"; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - if (!$util.isInteger(message.MaxPlayerNum)) - return "MaxPlayerNum: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - return null; - }; - - /** - * Creates a CSCreateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCreateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCreateRoom} CSCreateRoom - */ - CSCreateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCreateRoom) - return object; - var message = new $root.gamehall.CSCreateRoom(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.BaseCoin != null) - message.BaseCoin = object.BaseCoin | 0; - if (object.SceneMode != null) - message.SceneMode = object.SceneMode | 0; - if (object.MaxPlayerNum != null) - message.MaxPlayerNum = object.MaxPlayerNum | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.CSCreateRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a CSCreateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCreateRoom - * @static - * @param {gamehall.CSCreateRoom} message CSCreateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCreateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) { - object.GameId = 0; - object.BaseCoin = 0; - object.SceneMode = 0; - object.MaxPlayerNum = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - object.BaseCoin = message.BaseCoin; - if (message.SceneMode != null && message.hasOwnProperty("SceneMode")) - object.SceneMode = message.SceneMode; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - object.MaxPlayerNum = message.MaxPlayerNum; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - return object; - }; - - /** - * Converts this CSCreateRoom to JSON. - * @function toJSON - * @memberof gamehall.CSCreateRoom - * @instance - * @returns {Object.} JSON object - */ - CSCreateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCreateRoom - * @function getTypeUrl - * @memberof gamehall.CSCreateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCreateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCreateRoom"; - }; - - return CSCreateRoom; - })(); - - gamehall.SCCreateRoom = (function() { - - /** - * Properties of a SCCreateRoom. - * @memberof gamehall - * @interface ISCCreateRoom - * @property {number|null} [GameId] SCCreateRoom GameId - * @property {number|null} [BaseCoin] SCCreateRoom BaseCoin - * @property {number|null} [SceneMode] SCCreateRoom SceneMode - * @property {number|null} [MaxPlayerNum] SCCreateRoom MaxPlayerNum - * @property {Array.|null} [Params] SCCreateRoom Params - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCCreateRoom OpRetCode - */ - - /** - * Constructs a new SCCreateRoom. - * @memberof gamehall - * @classdesc Represents a SCCreateRoom. - * @implements ISCCreateRoom - * @constructor - * @param {gamehall.ISCCreateRoom=} [properties] Properties to set - */ - function SCCreateRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCreateRoom GameId. - * @member {number} GameId - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.GameId = 0; - - /** - * SCCreateRoom BaseCoin. - * @member {number} BaseCoin - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.BaseCoin = 0; - - /** - * SCCreateRoom SceneMode. - * @member {number} SceneMode - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.SceneMode = 0; - - /** - * SCCreateRoom MaxPlayerNum. - * @member {number} MaxPlayerNum - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.MaxPlayerNum = 0; - - /** - * SCCreateRoom Params. - * @member {Array.} Params - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.Params = $util.emptyArray; - - /** - * SCCreateRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCCreateRoom - * @instance - */ - SCCreateRoom.prototype.OpRetCode = 0; - - /** - * Creates a new SCCreateRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCCreateRoom - * @static - * @param {gamehall.ISCCreateRoom=} [properties] Properties to set - * @returns {gamehall.SCCreateRoom} SCCreateRoom instance - */ - SCCreateRoom.create = function create(properties) { - return new SCCreateRoom(properties); - }; - - /** - * Encodes the specified SCCreateRoom message. Does not implicitly {@link gamehall.SCCreateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCreateRoom - * @static - * @param {gamehall.ISCCreateRoom} message SCCreateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCreateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.BaseCoin != null && Object.hasOwnProperty.call(message, "BaseCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.BaseCoin); - if (message.SceneMode != null && Object.hasOwnProperty.call(message, "SceneMode")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.SceneMode); - if (message.MaxPlayerNum != null && Object.hasOwnProperty.call(message, "MaxPlayerNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.MaxPlayerNum); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCCreateRoom message, length delimited. Does not implicitly {@link gamehall.SCCreateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCreateRoom - * @static - * @param {gamehall.ISCCreateRoom} message SCCreateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCreateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCreateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCreateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCreateRoom} SCCreateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCreateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCreateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.BaseCoin = reader.int32(); - break; - } - case 3: { - message.SceneMode = reader.int32(); - break; - } - case 4: { - message.MaxPlayerNum = reader.int32(); - break; - } - case 5: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 6: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCreateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCreateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCreateRoom} SCCreateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCreateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCreateRoom message. - * @function verify - * @memberof gamehall.SCCreateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCreateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - if (!$util.isInteger(message.BaseCoin)) - return "BaseCoin: integer expected"; - if (message.SceneMode != null && message.hasOwnProperty("SceneMode")) - if (!$util.isInteger(message.SceneMode)) - return "SceneMode: integer expected"; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - if (!$util.isInteger(message.MaxPlayerNum)) - return "MaxPlayerNum: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCCreateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCreateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCreateRoom} SCCreateRoom - */ - SCCreateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCreateRoom) - return object; - var message = new $root.gamehall.SCCreateRoom(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.BaseCoin != null) - message.BaseCoin = object.BaseCoin | 0; - if (object.SceneMode != null) - message.SceneMode = object.SceneMode | 0; - if (object.MaxPlayerNum != null) - message.MaxPlayerNum = object.MaxPlayerNum | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.SCCreateRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCCreateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCreateRoom - * @static - * @param {gamehall.SCCreateRoom} message SCCreateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCreateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) { - object.GameId = 0; - object.BaseCoin = 0; - object.SceneMode = 0; - object.MaxPlayerNum = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - object.BaseCoin = message.BaseCoin; - if (message.SceneMode != null && message.hasOwnProperty("SceneMode")) - object.SceneMode = message.SceneMode; - if (message.MaxPlayerNum != null && message.hasOwnProperty("MaxPlayerNum")) - object.MaxPlayerNum = message.MaxPlayerNum; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCCreateRoom to JSON. - * @function toJSON - * @memberof gamehall.SCCreateRoom - * @instance - * @returns {Object.} JSON object - */ - SCCreateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCreateRoom - * @function getTypeUrl - * @memberof gamehall.SCCreateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCreateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCreateRoom"; - }; - - return SCCreateRoom; - })(); - - gamehall.CSDestroyRoom = (function() { - - /** - * Properties of a CSDestroyRoom. - * @memberof gamehall - * @interface ICSDestroyRoom - */ - - /** - * Constructs a new CSDestroyRoom. - * @memberof gamehall - * @classdesc Represents a CSDestroyRoom. - * @implements ICSDestroyRoom - * @constructor - * @param {gamehall.ICSDestroyRoom=} [properties] Properties to set - */ - function CSDestroyRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSDestroyRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSDestroyRoom - * @static - * @param {gamehall.ICSDestroyRoom=} [properties] Properties to set - * @returns {gamehall.CSDestroyRoom} CSDestroyRoom instance - */ - CSDestroyRoom.create = function create(properties) { - return new CSDestroyRoom(properties); - }; - - /** - * Encodes the specified CSDestroyRoom message. Does not implicitly {@link gamehall.CSDestroyRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSDestroyRoom - * @static - * @param {gamehall.ICSDestroyRoom} message CSDestroyRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSDestroyRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSDestroyRoom message, length delimited. Does not implicitly {@link gamehall.CSDestroyRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSDestroyRoom - * @static - * @param {gamehall.ICSDestroyRoom} message CSDestroyRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSDestroyRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSDestroyRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSDestroyRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSDestroyRoom} CSDestroyRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSDestroyRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSDestroyRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSDestroyRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSDestroyRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSDestroyRoom} CSDestroyRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSDestroyRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSDestroyRoom message. - * @function verify - * @memberof gamehall.CSDestroyRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSDestroyRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSDestroyRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSDestroyRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSDestroyRoom} CSDestroyRoom - */ - CSDestroyRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSDestroyRoom) - return object; - return new $root.gamehall.CSDestroyRoom(); - }; - - /** - * Creates a plain object from a CSDestroyRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSDestroyRoom - * @static - * @param {gamehall.CSDestroyRoom} message CSDestroyRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSDestroyRoom.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSDestroyRoom to JSON. - * @function toJSON - * @memberof gamehall.CSDestroyRoom - * @instance - * @returns {Object.} JSON object - */ - CSDestroyRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSDestroyRoom - * @function getTypeUrl - * @memberof gamehall.CSDestroyRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSDestroyRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSDestroyRoom"; - }; - - return CSDestroyRoom; - })(); - - gamehall.SCDestroyRoom = (function() { - - /** - * Properties of a SCDestroyRoom. - * @memberof gamehall - * @interface ISCDestroyRoom - * @property {number|null} [RoomId] SCDestroyRoom RoomId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCDestroyRoom OpRetCode - * @property {number|null} [IsForce] SCDestroyRoom IsForce - */ - - /** - * Constructs a new SCDestroyRoom. - * @memberof gamehall - * @classdesc Represents a SCDestroyRoom. - * @implements ISCDestroyRoom - * @constructor - * @param {gamehall.ISCDestroyRoom=} [properties] Properties to set - */ - function SCDestroyRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCDestroyRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCDestroyRoom - * @instance - */ - SCDestroyRoom.prototype.RoomId = 0; - - /** - * SCDestroyRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCDestroyRoom - * @instance - */ - SCDestroyRoom.prototype.OpRetCode = 0; - - /** - * SCDestroyRoom IsForce. - * @member {number} IsForce - * @memberof gamehall.SCDestroyRoom - * @instance - */ - SCDestroyRoom.prototype.IsForce = 0; - - /** - * Creates a new SCDestroyRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCDestroyRoom - * @static - * @param {gamehall.ISCDestroyRoom=} [properties] Properties to set - * @returns {gamehall.SCDestroyRoom} SCDestroyRoom instance - */ - SCDestroyRoom.create = function create(properties) { - return new SCDestroyRoom(properties); - }; - - /** - * Encodes the specified SCDestroyRoom message. Does not implicitly {@link gamehall.SCDestroyRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCDestroyRoom - * @static - * @param {gamehall.ISCDestroyRoom} message SCDestroyRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCDestroyRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpRetCode); - if (message.IsForce != null && Object.hasOwnProperty.call(message, "IsForce")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.IsForce); - return writer; - }; - - /** - * Encodes the specified SCDestroyRoom message, length delimited. Does not implicitly {@link gamehall.SCDestroyRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCDestroyRoom - * @static - * @param {gamehall.ISCDestroyRoom} message SCDestroyRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCDestroyRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCDestroyRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCDestroyRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCDestroyRoom} SCDestroyRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCDestroyRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCDestroyRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.OpRetCode = reader.int32(); - break; - } - case 3: { - message.IsForce = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCDestroyRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCDestroyRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCDestroyRoom} SCDestroyRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCDestroyRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCDestroyRoom message. - * @function verify - * @memberof gamehall.SCDestroyRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCDestroyRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.IsForce != null && message.hasOwnProperty("IsForce")) - if (!$util.isInteger(message.IsForce)) - return "IsForce: integer expected"; - return null; - }; - - /** - * Creates a SCDestroyRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCDestroyRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCDestroyRoom} SCDestroyRoom - */ - SCDestroyRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCDestroyRoom) - return object; - var message = new $root.gamehall.SCDestroyRoom(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.IsForce != null) - message.IsForce = object.IsForce | 0; - return message; - }; - - /** - * Creates a plain object from a SCDestroyRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCDestroyRoom - * @static - * @param {gamehall.SCDestroyRoom} message SCDestroyRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCDestroyRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.IsForce = 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.IsForce != null && message.hasOwnProperty("IsForce")) - object.IsForce = message.IsForce; - return object; - }; - - /** - * Converts this SCDestroyRoom to JSON. - * @function toJSON - * @memberof gamehall.SCDestroyRoom - * @instance - * @returns {Object.} JSON object - */ - SCDestroyRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCDestroyRoom - * @function getTypeUrl - * @memberof gamehall.SCDestroyRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCDestroyRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCDestroyRoom"; - }; - - return SCDestroyRoom; - })(); - - gamehall.CSEnterRoom = (function() { - - /** - * Properties of a CSEnterRoom. - * @memberof gamehall - * @interface ICSEnterRoom - * @property {number|null} [RoomId] CSEnterRoom RoomId - * @property {number|null} [GameId] CSEnterRoom GameId - */ - - /** - * Constructs a new CSEnterRoom. - * @memberof gamehall - * @classdesc Represents a CSEnterRoom. - * @implements ICSEnterRoom - * @constructor - * @param {gamehall.ICSEnterRoom=} [properties] Properties to set - */ - function CSEnterRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSEnterRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.CSEnterRoom - * @instance - */ - CSEnterRoom.prototype.RoomId = 0; - - /** - * CSEnterRoom GameId. - * @member {number} GameId - * @memberof gamehall.CSEnterRoom - * @instance - */ - CSEnterRoom.prototype.GameId = 0; - - /** - * Creates a new CSEnterRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSEnterRoom - * @static - * @param {gamehall.ICSEnterRoom=} [properties] Properties to set - * @returns {gamehall.CSEnterRoom} CSEnterRoom instance - */ - CSEnterRoom.create = function create(properties) { - return new CSEnterRoom(properties); - }; - - /** - * Encodes the specified CSEnterRoom message. Does not implicitly {@link gamehall.CSEnterRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSEnterRoom - * @static - * @param {gamehall.ICSEnterRoom} message CSEnterRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified CSEnterRoom message, length delimited. Does not implicitly {@link gamehall.CSEnterRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSEnterRoom - * @static - * @param {gamehall.ICSEnterRoom} message CSEnterRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSEnterRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSEnterRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSEnterRoom} CSEnterRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSEnterRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSEnterRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSEnterRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSEnterRoom} CSEnterRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSEnterRoom message. - * @function verify - * @memberof gamehall.CSEnterRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSEnterRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a CSEnterRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSEnterRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSEnterRoom} CSEnterRoom - */ - CSEnterRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSEnterRoom) - return object; - var message = new $root.gamehall.CSEnterRoom(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a CSEnterRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSEnterRoom - * @static - * @param {gamehall.CSEnterRoom} message CSEnterRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSEnterRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.GameId = 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this CSEnterRoom to JSON. - * @function toJSON - * @memberof gamehall.CSEnterRoom - * @instance - * @returns {Object.} JSON object - */ - CSEnterRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSEnterRoom - * @function getTypeUrl - * @memberof gamehall.CSEnterRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSEnterRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSEnterRoom"; - }; - - return CSEnterRoom; - })(); - - gamehall.SCEnterRoom = (function() { - - /** - * Properties of a SCEnterRoom. - * @memberof gamehall - * @interface ISCEnterRoom - * @property {number|null} [GameId] SCEnterRoom GameId - * @property {number|null} [ModeType] SCEnterRoom ModeType - * @property {Array.|null} [Params] SCEnterRoom Params - * @property {number|null} [RoomId] SCEnterRoom RoomId - * @property {number|null} [HallId] SCEnterRoom HallId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCEnterRoom OpRetCode - * @property {number|null} [ClubId] SCEnterRoom ClubId - */ - - /** - * Constructs a new SCEnterRoom. - * @memberof gamehall - * @classdesc Represents a SCEnterRoom. - * @implements ISCEnterRoom - * @constructor - * @param {gamehall.ISCEnterRoom=} [properties] Properties to set - */ - function SCEnterRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCEnterRoom GameId. - * @member {number} GameId - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.GameId = 0; - - /** - * SCEnterRoom ModeType. - * @member {number} ModeType - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.ModeType = 0; - - /** - * SCEnterRoom Params. - * @member {Array.} Params - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.Params = $util.emptyArray; - - /** - * SCEnterRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.RoomId = 0; - - /** - * SCEnterRoom HallId. - * @member {number} HallId - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.HallId = 0; - - /** - * SCEnterRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.OpRetCode = 0; - - /** - * SCEnterRoom ClubId. - * @member {number} ClubId - * @memberof gamehall.SCEnterRoom - * @instance - */ - SCEnterRoom.prototype.ClubId = 0; - - /** - * Creates a new SCEnterRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCEnterRoom - * @static - * @param {gamehall.ISCEnterRoom=} [properties] Properties to set - * @returns {gamehall.SCEnterRoom} SCEnterRoom instance - */ - SCEnterRoom.create = function create(properties) { - return new SCEnterRoom(properties); - }; - - /** - * Encodes the specified SCEnterRoom message. Does not implicitly {@link gamehall.SCEnterRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCEnterRoom - * @static - * @param {gamehall.ISCEnterRoom} message SCEnterRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.ModeType != null && Object.hasOwnProperty.call(message, "ModeType")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.ModeType); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 3, wireType 2 =*/26).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.RoomId); - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.HallId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.OpRetCode); - if (message.ClubId != null && Object.hasOwnProperty.call(message, "ClubId")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.ClubId); - return writer; - }; - - /** - * Encodes the specified SCEnterRoom message, length delimited. Does not implicitly {@link gamehall.SCEnterRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCEnterRoom - * @static - * @param {gamehall.ISCEnterRoom} message SCEnterRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCEnterRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCEnterRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCEnterRoom} SCEnterRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCEnterRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.ModeType = reader.int32(); - break; - } - case 3: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 4: { - message.RoomId = reader.int32(); - break; - } - case 5: { - message.HallId = reader.int32(); - break; - } - case 6: { - message.OpRetCode = reader.int32(); - break; - } - case 7: { - message.ClubId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCEnterRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCEnterRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCEnterRoom} SCEnterRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCEnterRoom message. - * @function verify - * @memberof gamehall.SCEnterRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCEnterRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.ModeType != null && message.hasOwnProperty("ModeType")) - if (!$util.isInteger(message.ModeType)) - return "ModeType: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.ClubId != null && message.hasOwnProperty("ClubId")) - if (!$util.isInteger(message.ClubId)) - return "ClubId: integer expected"; - return null; - }; - - /** - * Creates a SCEnterRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCEnterRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCEnterRoom} SCEnterRoom - */ - SCEnterRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCEnterRoom) - return object; - var message = new $root.gamehall.SCEnterRoom(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.ModeType != null) - message.ModeType = object.ModeType | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.SCEnterRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.HallId != null) - message.HallId = object.HallId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.ClubId != null) - message.ClubId = object.ClubId | 0; - return message; - }; - - /** - * Creates a plain object from a SCEnterRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCEnterRoom - * @static - * @param {gamehall.SCEnterRoom} message SCEnterRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCEnterRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) { - object.GameId = 0; - object.ModeType = 0; - object.RoomId = 0; - object.HallId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.ClubId = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.ModeType != null && message.hasOwnProperty("ModeType")) - object.ModeType = message.ModeType; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.ClubId != null && message.hasOwnProperty("ClubId")) - object.ClubId = message.ClubId; - return object; - }; - - /** - * Converts this SCEnterRoom to JSON. - * @function toJSON - * @memberof gamehall.SCEnterRoom - * @instance - * @returns {Object.} JSON object - */ - SCEnterRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCEnterRoom - * @function getTypeUrl - * @memberof gamehall.SCEnterRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCEnterRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCEnterRoom"; - }; - - return SCEnterRoom; - })(); - - gamehall.CSLeaveRoom = (function() { - - /** - * Properties of a CSLeaveRoom. - * @memberof gamehall - * @interface ICSLeaveRoom - * @property {number|null} [Mode] CSLeaveRoom Mode - */ - - /** - * Constructs a new CSLeaveRoom. - * @memberof gamehall - * @classdesc Represents a CSLeaveRoom. - * @implements ICSLeaveRoom - * @constructor - * @param {gamehall.ICSLeaveRoom=} [properties] Properties to set - */ - function CSLeaveRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSLeaveRoom Mode. - * @member {number} Mode - * @memberof gamehall.CSLeaveRoom - * @instance - */ - CSLeaveRoom.prototype.Mode = 0; - - /** - * Creates a new CSLeaveRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSLeaveRoom - * @static - * @param {gamehall.ICSLeaveRoom=} [properties] Properties to set - * @returns {gamehall.CSLeaveRoom} CSLeaveRoom instance - */ - CSLeaveRoom.create = function create(properties) { - return new CSLeaveRoom(properties); - }; - - /** - * Encodes the specified CSLeaveRoom message. Does not implicitly {@link gamehall.CSLeaveRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSLeaveRoom - * @static - * @param {gamehall.ICSLeaveRoom} message CSLeaveRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Mode != null && Object.hasOwnProperty.call(message, "Mode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Mode); - return writer; - }; - - /** - * Encodes the specified CSLeaveRoom message, length delimited. Does not implicitly {@link gamehall.CSLeaveRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSLeaveRoom - * @static - * @param {gamehall.ICSLeaveRoom} message CSLeaveRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSLeaveRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSLeaveRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSLeaveRoom} CSLeaveRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSLeaveRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Mode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSLeaveRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSLeaveRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSLeaveRoom} CSLeaveRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSLeaveRoom message. - * @function verify - * @memberof gamehall.CSLeaveRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSLeaveRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Mode != null && message.hasOwnProperty("Mode")) - if (!$util.isInteger(message.Mode)) - return "Mode: integer expected"; - return null; - }; - - /** - * Creates a CSLeaveRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSLeaveRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSLeaveRoom} CSLeaveRoom - */ - CSLeaveRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSLeaveRoom) - return object; - var message = new $root.gamehall.CSLeaveRoom(); - if (object.Mode != null) - message.Mode = object.Mode | 0; - return message; - }; - - /** - * Creates a plain object from a CSLeaveRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSLeaveRoom - * @static - * @param {gamehall.CSLeaveRoom} message CSLeaveRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSLeaveRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.Mode = 0; - if (message.Mode != null && message.hasOwnProperty("Mode")) - object.Mode = message.Mode; - return object; - }; - - /** - * Converts this CSLeaveRoom to JSON. - * @function toJSON - * @memberof gamehall.CSLeaveRoom - * @instance - * @returns {Object.} JSON object - */ - CSLeaveRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSLeaveRoom - * @function getTypeUrl - * @memberof gamehall.CSLeaveRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSLeaveRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSLeaveRoom"; - }; - - return CSLeaveRoom; - })(); - - gamehall.SCLeaveRoom = (function() { - - /** - * Properties of a SCLeaveRoom. - * @memberof gamehall - * @interface ISCLeaveRoom - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCLeaveRoom OpRetCode - * @property {number|null} [Reason] SCLeaveRoom Reason - * @property {number|null} [RoomId] SCLeaveRoom RoomId - * @property {number|null} [Mode] SCLeaveRoom Mode - */ - - /** - * Constructs a new SCLeaveRoom. - * @memberof gamehall - * @classdesc Represents a SCLeaveRoom. - * @implements ISCLeaveRoom - * @constructor - * @param {gamehall.ISCLeaveRoom=} [properties] Properties to set - */ - function SCLeaveRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLeaveRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCLeaveRoom - * @instance - */ - SCLeaveRoom.prototype.OpRetCode = 0; - - /** - * SCLeaveRoom Reason. - * @member {number} Reason - * @memberof gamehall.SCLeaveRoom - * @instance - */ - SCLeaveRoom.prototype.Reason = 0; - - /** - * SCLeaveRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCLeaveRoom - * @instance - */ - SCLeaveRoom.prototype.RoomId = 0; - - /** - * SCLeaveRoom Mode. - * @member {number} Mode - * @memberof gamehall.SCLeaveRoom - * @instance - */ - SCLeaveRoom.prototype.Mode = 0; - - /** - * Creates a new SCLeaveRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCLeaveRoom - * @static - * @param {gamehall.ISCLeaveRoom=} [properties] Properties to set - * @returns {gamehall.SCLeaveRoom} SCLeaveRoom instance - */ - SCLeaveRoom.create = function create(properties) { - return new SCLeaveRoom(properties); - }; - - /** - * Encodes the specified SCLeaveRoom message. Does not implicitly {@link gamehall.SCLeaveRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLeaveRoom - * @static - * @param {gamehall.ISCLeaveRoom} message SCLeaveRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.Reason != null && Object.hasOwnProperty.call(message, "Reason")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Reason); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.RoomId); - if (message.Mode != null && Object.hasOwnProperty.call(message, "Mode")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.Mode); - return writer; - }; - - /** - * Encodes the specified SCLeaveRoom message, length delimited. Does not implicitly {@link gamehall.SCLeaveRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLeaveRoom - * @static - * @param {gamehall.ISCLeaveRoom} message SCLeaveRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLeaveRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLeaveRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLeaveRoom} SCLeaveRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLeaveRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.Reason = reader.int32(); - break; - } - case 3: { - message.RoomId = reader.int32(); - break; - } - case 4: { - message.Mode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLeaveRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLeaveRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLeaveRoom} SCLeaveRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLeaveRoom message. - * @function verify - * @memberof gamehall.SCLeaveRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLeaveRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.Reason != null && message.hasOwnProperty("Reason")) - if (!$util.isInteger(message.Reason)) - return "Reason: integer expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.Mode != null && message.hasOwnProperty("Mode")) - if (!$util.isInteger(message.Mode)) - return "Mode: integer expected"; - return null; - }; - - /** - * Creates a SCLeaveRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLeaveRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLeaveRoom} SCLeaveRoom - */ - SCLeaveRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLeaveRoom) - return object; - var message = new $root.gamehall.SCLeaveRoom(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.Reason != null) - message.Reason = object.Reason | 0; - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.Mode != null) - message.Mode = object.Mode | 0; - return message; - }; - - /** - * Creates a plain object from a SCLeaveRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLeaveRoom - * @static - * @param {gamehall.SCLeaveRoom} message SCLeaveRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLeaveRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.Reason = 0; - object.RoomId = 0; - object.Mode = 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.Reason != null && message.hasOwnProperty("Reason")) - object.Reason = message.Reason; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.Mode != null && message.hasOwnProperty("Mode")) - object.Mode = message.Mode; - return object; - }; - - /** - * Converts this SCLeaveRoom to JSON. - * @function toJSON - * @memberof gamehall.SCLeaveRoom - * @instance - * @returns {Object.} JSON object - */ - SCLeaveRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLeaveRoom - * @function getTypeUrl - * @memberof gamehall.SCLeaveRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLeaveRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLeaveRoom"; - }; - - return SCLeaveRoom; - })(); - - gamehall.CSReturnRoom = (function() { - - /** - * Properties of a CSReturnRoom. - * @memberof gamehall - * @interface ICSReturnRoom - * @property {number|null} [ApkVer] CSReturnRoom ApkVer - * @property {number|null} [ResVer] CSReturnRoom ResVer - * @property {boolean|null} [IsLoaded] CSReturnRoom IsLoaded - * @property {number|null} [RoomId] CSReturnRoom RoomId - */ - - /** - * Constructs a new CSReturnRoom. - * @memberof gamehall - * @classdesc Represents a CSReturnRoom. - * @implements ICSReturnRoom - * @constructor - * @param {gamehall.ICSReturnRoom=} [properties] Properties to set - */ - function CSReturnRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSReturnRoom ApkVer. - * @member {number} ApkVer - * @memberof gamehall.CSReturnRoom - * @instance - */ - CSReturnRoom.prototype.ApkVer = 0; - - /** - * CSReturnRoom ResVer. - * @member {number} ResVer - * @memberof gamehall.CSReturnRoom - * @instance - */ - CSReturnRoom.prototype.ResVer = 0; - - /** - * CSReturnRoom IsLoaded. - * @member {boolean} IsLoaded - * @memberof gamehall.CSReturnRoom - * @instance - */ - CSReturnRoom.prototype.IsLoaded = false; - - /** - * CSReturnRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.CSReturnRoom - * @instance - */ - CSReturnRoom.prototype.RoomId = 0; - - /** - * Creates a new CSReturnRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSReturnRoom - * @static - * @param {gamehall.ICSReturnRoom=} [properties] Properties to set - * @returns {gamehall.CSReturnRoom} CSReturnRoom instance - */ - CSReturnRoom.create = function create(properties) { - return new CSReturnRoom(properties); - }; - - /** - * Encodes the specified CSReturnRoom message. Does not implicitly {@link gamehall.CSReturnRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSReturnRoom - * @static - * @param {gamehall.ICSReturnRoom} message CSReturnRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReturnRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ApkVer != null && Object.hasOwnProperty.call(message, "ApkVer")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ApkVer); - if (message.ResVer != null && Object.hasOwnProperty.call(message, "ResVer")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.ResVer); - if (message.IsLoaded != null && Object.hasOwnProperty.call(message, "IsLoaded")) - writer.uint32(/* id 3, wireType 0 =*/24).bool(message.IsLoaded); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.RoomId); - return writer; - }; - - /** - * Encodes the specified CSReturnRoom message, length delimited. Does not implicitly {@link gamehall.CSReturnRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSReturnRoom - * @static - * @param {gamehall.ICSReturnRoom} message CSReturnRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReturnRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSReturnRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSReturnRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSReturnRoom} CSReturnRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReturnRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSReturnRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ApkVer = reader.int32(); - break; - } - case 2: { - message.ResVer = reader.int32(); - break; - } - case 3: { - message.IsLoaded = reader.bool(); - break; - } - case 4: { - message.RoomId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSReturnRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSReturnRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSReturnRoom} CSReturnRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReturnRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSReturnRoom message. - * @function verify - * @memberof gamehall.CSReturnRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSReturnRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - if (!$util.isInteger(message.ApkVer)) - return "ApkVer: integer expected"; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - if (!$util.isInteger(message.ResVer)) - return "ResVer: integer expected"; - if (message.IsLoaded != null && message.hasOwnProperty("IsLoaded")) - if (typeof message.IsLoaded !== "boolean") - return "IsLoaded: boolean expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - return null; - }; - - /** - * Creates a CSReturnRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSReturnRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSReturnRoom} CSReturnRoom - */ - CSReturnRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSReturnRoom) - return object; - var message = new $root.gamehall.CSReturnRoom(); - if (object.ApkVer != null) - message.ApkVer = object.ApkVer | 0; - if (object.ResVer != null) - message.ResVer = object.ResVer | 0; - if (object.IsLoaded != null) - message.IsLoaded = Boolean(object.IsLoaded); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - return message; - }; - - /** - * Creates a plain object from a CSReturnRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSReturnRoom - * @static - * @param {gamehall.CSReturnRoom} message CSReturnRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSReturnRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ApkVer = 0; - object.ResVer = 0; - object.IsLoaded = false; - object.RoomId = 0; - } - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - object.ApkVer = message.ApkVer; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - object.ResVer = message.ResVer; - if (message.IsLoaded != null && message.hasOwnProperty("IsLoaded")) - object.IsLoaded = message.IsLoaded; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - return object; - }; - - /** - * Converts this CSReturnRoom to JSON. - * @function toJSON - * @memberof gamehall.CSReturnRoom - * @instance - * @returns {Object.} JSON object - */ - CSReturnRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSReturnRoom - * @function getTypeUrl - * @memberof gamehall.CSReturnRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSReturnRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSReturnRoom"; - }; - - return CSReturnRoom; - })(); - - gamehall.SCReturnRoom = (function() { - - /** - * Properties of a SCReturnRoom. - * @memberof gamehall - * @interface ISCReturnRoom - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCReturnRoom OpRetCode - * @property {number|null} [RoomId] SCReturnRoom RoomId - * @property {number|null} [GameId] SCReturnRoom GameId - * @property {number|null} [ModeType] SCReturnRoom ModeType - * @property {Array.|null} [Params] SCReturnRoom Params - * @property {number|null} [HallId] SCReturnRoom HallId - * @property {number|null} [MinApkVer] SCReturnRoom MinApkVer - * @property {number|null} [LatestApkVer] SCReturnRoom LatestApkVer - * @property {number|null} [MinResVer] SCReturnRoom MinResVer - * @property {number|null} [LatestResVer] SCReturnRoom LatestResVer - * @property {boolean|null} [IsLoaded] SCReturnRoom IsLoaded - * @property {number|null} [ClubId] SCReturnRoom ClubId - */ - - /** - * Constructs a new SCReturnRoom. - * @memberof gamehall - * @classdesc Represents a SCReturnRoom. - * @implements ISCReturnRoom - * @constructor - * @param {gamehall.ISCReturnRoom=} [properties] Properties to set - */ - function SCReturnRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCReturnRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.OpRetCode = 0; - - /** - * SCReturnRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.RoomId = 0; - - /** - * SCReturnRoom GameId. - * @member {number} GameId - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.GameId = 0; - - /** - * SCReturnRoom ModeType. - * @member {number} ModeType - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.ModeType = 0; - - /** - * SCReturnRoom Params. - * @member {Array.} Params - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.Params = $util.emptyArray; - - /** - * SCReturnRoom HallId. - * @member {number} HallId - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.HallId = 0; - - /** - * SCReturnRoom MinApkVer. - * @member {number} MinApkVer - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.MinApkVer = 0; - - /** - * SCReturnRoom LatestApkVer. - * @member {number} LatestApkVer - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.LatestApkVer = 0; - - /** - * SCReturnRoom MinResVer. - * @member {number} MinResVer - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.MinResVer = 0; - - /** - * SCReturnRoom LatestResVer. - * @member {number} LatestResVer - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.LatestResVer = 0; - - /** - * SCReturnRoom IsLoaded. - * @member {boolean} IsLoaded - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.IsLoaded = false; - - /** - * SCReturnRoom ClubId. - * @member {number} ClubId - * @memberof gamehall.SCReturnRoom - * @instance - */ - SCReturnRoom.prototype.ClubId = 0; - - /** - * Creates a new SCReturnRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCReturnRoom - * @static - * @param {gamehall.ISCReturnRoom=} [properties] Properties to set - * @returns {gamehall.SCReturnRoom} SCReturnRoom instance - */ - SCReturnRoom.create = function create(properties) { - return new SCReturnRoom(properties); - }; - - /** - * Encodes the specified SCReturnRoom message. Does not implicitly {@link gamehall.SCReturnRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCReturnRoom - * @static - * @param {gamehall.ISCReturnRoom} message SCReturnRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReturnRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.RoomId); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.GameId); - if (message.ModeType != null && Object.hasOwnProperty.call(message, "ModeType")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.ModeType); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.HallId != null && Object.hasOwnProperty.call(message, "HallId")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.HallId); - if (message.MinApkVer != null && Object.hasOwnProperty.call(message, "MinApkVer")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.MinApkVer); - if (message.LatestApkVer != null && Object.hasOwnProperty.call(message, "LatestApkVer")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.LatestApkVer); - if (message.MinResVer != null && Object.hasOwnProperty.call(message, "MinResVer")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.MinResVer); - if (message.LatestResVer != null && Object.hasOwnProperty.call(message, "LatestResVer")) - writer.uint32(/* id 10, wireType 0 =*/80).int32(message.LatestResVer); - if (message.IsLoaded != null && Object.hasOwnProperty.call(message, "IsLoaded")) - writer.uint32(/* id 11, wireType 0 =*/88).bool(message.IsLoaded); - if (message.ClubId != null && Object.hasOwnProperty.call(message, "ClubId")) - writer.uint32(/* id 12, wireType 0 =*/96).int32(message.ClubId); - return writer; - }; - - /** - * Encodes the specified SCReturnRoom message, length delimited. Does not implicitly {@link gamehall.SCReturnRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCReturnRoom - * @static - * @param {gamehall.ISCReturnRoom} message SCReturnRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReturnRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCReturnRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCReturnRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCReturnRoom} SCReturnRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReturnRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCReturnRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.RoomId = reader.int32(); - break; - } - case 3: { - message.GameId = reader.int32(); - break; - } - case 4: { - message.ModeType = reader.int32(); - break; - } - case 5: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 6: { - message.HallId = reader.int32(); - break; - } - case 7: { - message.MinApkVer = reader.int32(); - break; - } - case 8: { - message.LatestApkVer = reader.int32(); - break; - } - case 9: { - message.MinResVer = reader.int32(); - break; - } - case 10: { - message.LatestResVer = reader.int32(); - break; - } - case 11: { - message.IsLoaded = reader.bool(); - break; - } - case 12: { - message.ClubId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCReturnRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCReturnRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCReturnRoom} SCReturnRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReturnRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCReturnRoom message. - * @function verify - * @memberof gamehall.SCReturnRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCReturnRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.ModeType != null && message.hasOwnProperty("ModeType")) - if (!$util.isInteger(message.ModeType)) - return "ModeType: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.HallId != null && message.hasOwnProperty("HallId")) - if (!$util.isInteger(message.HallId)) - return "HallId: integer expected"; - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - if (!$util.isInteger(message.MinApkVer)) - return "MinApkVer: integer expected"; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - if (!$util.isInteger(message.LatestApkVer)) - return "LatestApkVer: integer expected"; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - if (!$util.isInteger(message.MinResVer)) - return "MinResVer: integer expected"; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - if (!$util.isInteger(message.LatestResVer)) - return "LatestResVer: integer expected"; - if (message.IsLoaded != null && message.hasOwnProperty("IsLoaded")) - if (typeof message.IsLoaded !== "boolean") - return "IsLoaded: boolean expected"; - if (message.ClubId != null && message.hasOwnProperty("ClubId")) - if (!$util.isInteger(message.ClubId)) - return "ClubId: integer expected"; - return null; - }; - - /** - * Creates a SCReturnRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCReturnRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCReturnRoom} SCReturnRoom - */ - SCReturnRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCReturnRoom) - return object; - var message = new $root.gamehall.SCReturnRoom(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.ModeType != null) - message.ModeType = object.ModeType | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.SCReturnRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - if (object.HallId != null) - message.HallId = object.HallId | 0; - if (object.MinApkVer != null) - message.MinApkVer = object.MinApkVer | 0; - if (object.LatestApkVer != null) - message.LatestApkVer = object.LatestApkVer | 0; - if (object.MinResVer != null) - message.MinResVer = object.MinResVer | 0; - if (object.LatestResVer != null) - message.LatestResVer = object.LatestResVer | 0; - if (object.IsLoaded != null) - message.IsLoaded = Boolean(object.IsLoaded); - if (object.ClubId != null) - message.ClubId = object.ClubId | 0; - return message; - }; - - /** - * Creates a plain object from a SCReturnRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCReturnRoom - * @static - * @param {gamehall.SCReturnRoom} message SCReturnRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCReturnRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.RoomId = 0; - object.GameId = 0; - object.ModeType = 0; - object.HallId = 0; - object.MinApkVer = 0; - object.LatestApkVer = 0; - object.MinResVer = 0; - object.LatestResVer = 0; - object.IsLoaded = false; - object.ClubId = 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.ModeType != null && message.hasOwnProperty("ModeType")) - object.ModeType = message.ModeType; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.HallId != null && message.hasOwnProperty("HallId")) - object.HallId = message.HallId; - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - object.MinApkVer = message.MinApkVer; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - object.LatestApkVer = message.LatestApkVer; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - object.MinResVer = message.MinResVer; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - object.LatestResVer = message.LatestResVer; - if (message.IsLoaded != null && message.hasOwnProperty("IsLoaded")) - object.IsLoaded = message.IsLoaded; - if (message.ClubId != null && message.hasOwnProperty("ClubId")) - object.ClubId = message.ClubId; - return object; - }; - - /** - * Converts this SCReturnRoom to JSON. - * @function toJSON - * @memberof gamehall.SCReturnRoom - * @instance - * @returns {Object.} JSON object - */ - SCReturnRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCReturnRoom - * @function getTypeUrl - * @memberof gamehall.SCReturnRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCReturnRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCReturnRoom"; - }; - - return SCReturnRoom; - })(); - - gamehall.CSGetGameRec = (function() { - - /** - * Properties of a CSGetGameRec. - * @memberof gamehall - * @interface ICSGetGameRec - * @property {number|null} [Ver] CSGetGameRec Ver - * @property {number|null} [GameId] CSGetGameRec GameId - */ - - /** - * Constructs a new CSGetGameRec. - * @memberof gamehall - * @classdesc Represents a CSGetGameRec. - * @implements ICSGetGameRec - * @constructor - * @param {gamehall.ICSGetGameRec=} [properties] Properties to set - */ - function CSGetGameRec(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSGetGameRec Ver. - * @member {number} Ver - * @memberof gamehall.CSGetGameRec - * @instance - */ - CSGetGameRec.prototype.Ver = 0; - - /** - * CSGetGameRec GameId. - * @member {number} GameId - * @memberof gamehall.CSGetGameRec - * @instance - */ - CSGetGameRec.prototype.GameId = 0; - - /** - * Creates a new CSGetGameRec instance using the specified properties. - * @function create - * @memberof gamehall.CSGetGameRec - * @static - * @param {gamehall.ICSGetGameRec=} [properties] Properties to set - * @returns {gamehall.CSGetGameRec} CSGetGameRec instance - */ - CSGetGameRec.create = function create(properties) { - return new CSGetGameRec(properties); - }; - - /** - * Encodes the specified CSGetGameRec message. Does not implicitly {@link gamehall.CSGetGameRec.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetGameRec - * @static - * @param {gamehall.ICSGetGameRec} message CSGetGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetGameRec.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Ver != null && Object.hasOwnProperty.call(message, "Ver")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Ver); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified CSGetGameRec message, length delimited. Does not implicitly {@link gamehall.CSGetGameRec.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetGameRec - * @static - * @param {gamehall.ICSGetGameRec} message CSGetGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetGameRec.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetGameRec message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetGameRec} CSGetGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetGameRec.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetGameRec(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Ver = reader.int32(); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetGameRec message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetGameRec} CSGetGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetGameRec.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetGameRec message. - * @function verify - * @memberof gamehall.CSGetGameRec - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetGameRec.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Ver != null && message.hasOwnProperty("Ver")) - if (!$util.isInteger(message.Ver)) - return "Ver: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a CSGetGameRec message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetGameRec - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetGameRec} CSGetGameRec - */ - CSGetGameRec.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetGameRec) - return object; - var message = new $root.gamehall.CSGetGameRec(); - if (object.Ver != null) - message.Ver = object.Ver | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a CSGetGameRec message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetGameRec - * @static - * @param {gamehall.CSGetGameRec} message CSGetGameRec - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetGameRec.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Ver = 0; - object.GameId = 0; - } - if (message.Ver != null && message.hasOwnProperty("Ver")) - object.Ver = message.Ver; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this CSGetGameRec to JSON. - * @function toJSON - * @memberof gamehall.CSGetGameRec - * @instance - * @returns {Object.} JSON object - */ - CSGetGameRec.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetGameRec - * @function getTypeUrl - * @memberof gamehall.CSGetGameRec - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetGameRec.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetGameRec"; - }; - - return CSGetGameRec; - })(); - - gamehall.PlayerGameRec = (function() { - - /** - * Properties of a PlayerGameRec. - * @memberof gamehall - * @interface IPlayerGameRec - * @property {number|null} [Id] PlayerGameRec Id - * @property {string|null} [Name] PlayerGameRec Name - * @property {number|null} [Head] PlayerGameRec Head - * @property {number|Long|null} [Coin] PlayerGameRec Coin - * @property {number|null} [Pos] PlayerGameRec Pos - * @property {Array.|null} [OtherParams] PlayerGameRec OtherParams - */ - - /** - * Constructs a new PlayerGameRec. - * @memberof gamehall - * @classdesc Represents a PlayerGameRec. - * @implements IPlayerGameRec - * @constructor - * @param {gamehall.IPlayerGameRec=} [properties] Properties to set - */ - function PlayerGameRec(properties) { - this.OtherParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PlayerGameRec Id. - * @member {number} Id - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.Id = 0; - - /** - * PlayerGameRec Name. - * @member {string} Name - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.Name = ""; - - /** - * PlayerGameRec Head. - * @member {number} Head - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.Head = 0; - - /** - * PlayerGameRec Coin. - * @member {number|Long} Coin - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerGameRec Pos. - * @member {number} Pos - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.Pos = 0; - - /** - * PlayerGameRec OtherParams. - * @member {Array.} OtherParams - * @memberof gamehall.PlayerGameRec - * @instance - */ - PlayerGameRec.prototype.OtherParams = $util.emptyArray; - - /** - * Creates a new PlayerGameRec instance using the specified properties. - * @function create - * @memberof gamehall.PlayerGameRec - * @static - * @param {gamehall.IPlayerGameRec=} [properties] Properties to set - * @returns {gamehall.PlayerGameRec} PlayerGameRec instance - */ - PlayerGameRec.create = function create(properties) { - return new PlayerGameRec(properties); - }; - - /** - * Encodes the specified PlayerGameRec message. Does not implicitly {@link gamehall.PlayerGameRec.verify|verify} messages. - * @function encode - * @memberof gamehall.PlayerGameRec - * @static - * @param {gamehall.IPlayerGameRec} message PlayerGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerGameRec.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Name); - if (message.Head != null && Object.hasOwnProperty.call(message, "Head")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Head); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.Coin); - if (message.Pos != null && Object.hasOwnProperty.call(message, "Pos")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.Pos); - if (message.OtherParams != null && message.OtherParams.length) { - writer.uint32(/* id 6, wireType 2 =*/50).fork(); - for (var i = 0; i < message.OtherParams.length; ++i) - writer.int32(message.OtherParams[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified PlayerGameRec message, length delimited. Does not implicitly {@link gamehall.PlayerGameRec.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.PlayerGameRec - * @static - * @param {gamehall.IPlayerGameRec} message PlayerGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerGameRec.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a PlayerGameRec message from the specified reader or buffer. - * @function decode - * @memberof gamehall.PlayerGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.PlayerGameRec} PlayerGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerGameRec.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.PlayerGameRec(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.Name = reader.string(); - break; - } - case 3: { - message.Head = reader.int32(); - break; - } - case 4: { - message.Coin = reader.int64(); - break; - } - case 5: { - message.Pos = reader.int32(); - break; - } - case 6: { - if (!(message.OtherParams && message.OtherParams.length)) - message.OtherParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OtherParams.push(reader.int32()); - } else - message.OtherParams.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a PlayerGameRec message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.PlayerGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.PlayerGameRec} PlayerGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerGameRec.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a PlayerGameRec message. - * @function verify - * @memberof gamehall.PlayerGameRec - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PlayerGameRec.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.Head != null && message.hasOwnProperty("Head")) - if (!$util.isInteger(message.Head)) - return "Head: integer expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - if (message.Pos != null && message.hasOwnProperty("Pos")) - if (!$util.isInteger(message.Pos)) - return "Pos: integer expected"; - if (message.OtherParams != null && message.hasOwnProperty("OtherParams")) { - if (!Array.isArray(message.OtherParams)) - return "OtherParams: array expected"; - for (var i = 0; i < message.OtherParams.length; ++i) - if (!$util.isInteger(message.OtherParams[i])) - return "OtherParams: integer[] expected"; - } - return null; - }; - - /** - * Creates a PlayerGameRec message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.PlayerGameRec - * @static - * @param {Object.} object Plain object - * @returns {gamehall.PlayerGameRec} PlayerGameRec - */ - PlayerGameRec.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.PlayerGameRec) - return object; - var message = new $root.gamehall.PlayerGameRec(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.Head != null) - message.Head = object.Head | 0; - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - if (object.Pos != null) - message.Pos = object.Pos | 0; - if (object.OtherParams) { - if (!Array.isArray(object.OtherParams)) - throw TypeError(".gamehall.PlayerGameRec.OtherParams: array expected"); - message.OtherParams = []; - for (var i = 0; i < object.OtherParams.length; ++i) - message.OtherParams[i] = object.OtherParams[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a PlayerGameRec message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.PlayerGameRec - * @static - * @param {gamehall.PlayerGameRec} message PlayerGameRec - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - PlayerGameRec.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OtherParams = []; - if (options.defaults) { - object.Id = 0; - object.Name = ""; - object.Head = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - object.Pos = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.Head != null && message.hasOwnProperty("Head")) - object.Head = message.Head; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - if (message.Pos != null && message.hasOwnProperty("Pos")) - object.Pos = message.Pos; - if (message.OtherParams && message.OtherParams.length) { - object.OtherParams = []; - for (var j = 0; j < message.OtherParams.length; ++j) - object.OtherParams[j] = message.OtherParams[j]; - } - return object; - }; - - /** - * Converts this PlayerGameRec to JSON. - * @function toJSON - * @memberof gamehall.PlayerGameRec - * @instance - * @returns {Object.} JSON object - */ - PlayerGameRec.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for PlayerGameRec - * @function getTypeUrl - * @memberof gamehall.PlayerGameRec - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - PlayerGameRec.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.PlayerGameRec"; - }; - - return PlayerGameRec; - })(); - - gamehall.GameRec = (function() { - - /** - * Properties of a GameRec. - * @memberof gamehall - * @interface IGameRec - * @property {number|null} [RecId] GameRec RecId - * @property {Array.|null} [Datas] GameRec Datas - * @property {number|Long|null} [Ts] GameRec Ts - * @property {number|null} [RoomId] GameRec RoomId - * @property {number|null} [GameMode] GameRec GameMode - * @property {number|null} [SceneType] GameRec SceneType - * @property {number|null} [GameId] GameRec GameId - * @property {number|null} [TotalOfGames] GameRec TotalOfGames - * @property {number|null} [NumOfGames] GameRec NumOfGames - * @property {number|null} [RoomFeeMode] GameRec RoomFeeMode - * @property {number|null} [RoomCardCnt] GameRec RoomCardCnt - * @property {Array.|null} [Params] GameRec Params - * @property {number|null} [GameTime] GameRec GameTime - */ - - /** - * Constructs a new GameRec. - * @memberof gamehall - * @classdesc Represents a GameRec. - * @implements IGameRec - * @constructor - * @param {gamehall.IGameRec=} [properties] Properties to set - */ - function GameRec(properties) { - this.Datas = []; - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameRec RecId. - * @member {number} RecId - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.RecId = 0; - - /** - * GameRec Datas. - * @member {Array.} Datas - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.Datas = $util.emptyArray; - - /** - * GameRec Ts. - * @member {number|Long} Ts - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * GameRec RoomId. - * @member {number} RoomId - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.RoomId = 0; - - /** - * GameRec GameMode. - * @member {number} GameMode - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.GameMode = 0; - - /** - * GameRec SceneType. - * @member {number} SceneType - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.SceneType = 0; - - /** - * GameRec GameId. - * @member {number} GameId - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.GameId = 0; - - /** - * GameRec TotalOfGames. - * @member {number} TotalOfGames - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.TotalOfGames = 0; - - /** - * GameRec NumOfGames. - * @member {number} NumOfGames - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.NumOfGames = 0; - - /** - * GameRec RoomFeeMode. - * @member {number} RoomFeeMode - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.RoomFeeMode = 0; - - /** - * GameRec RoomCardCnt. - * @member {number} RoomCardCnt - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.RoomCardCnt = 0; - - /** - * GameRec Params. - * @member {Array.} Params - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.Params = $util.emptyArray; - - /** - * GameRec GameTime. - * @member {number} GameTime - * @memberof gamehall.GameRec - * @instance - */ - GameRec.prototype.GameTime = 0; - - /** - * Creates a new GameRec instance using the specified properties. - * @function create - * @memberof gamehall.GameRec - * @static - * @param {gamehall.IGameRec=} [properties] Properties to set - * @returns {gamehall.GameRec} GameRec instance - */ - GameRec.create = function create(properties) { - return new GameRec(properties); - }; - - /** - * Encodes the specified GameRec message. Does not implicitly {@link gamehall.GameRec.verify|verify} messages. - * @function encode - * @memberof gamehall.GameRec - * @static - * @param {gamehall.IGameRec} message GameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameRec.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RecId != null && Object.hasOwnProperty.call(message, "RecId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RecId); - if (message.Datas != null && message.Datas.length) - for (var i = 0; i < message.Datas.length; ++i) - $root.gamehall.PlayerGameRec.encode(message.Datas[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Ts); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.RoomId); - if (message.GameMode != null && Object.hasOwnProperty.call(message, "GameMode")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.GameMode); - if (message.SceneType != null && Object.hasOwnProperty.call(message, "SceneType")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.SceneType); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.GameId); - if (message.TotalOfGames != null && Object.hasOwnProperty.call(message, "TotalOfGames")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.TotalOfGames); - if (message.NumOfGames != null && Object.hasOwnProperty.call(message, "NumOfGames")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.NumOfGames); - if (message.RoomFeeMode != null && Object.hasOwnProperty.call(message, "RoomFeeMode")) - writer.uint32(/* id 10, wireType 0 =*/80).int32(message.RoomFeeMode); - if (message.RoomCardCnt != null && Object.hasOwnProperty.call(message, "RoomCardCnt")) - writer.uint32(/* id 11, wireType 0 =*/88).int32(message.RoomCardCnt); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 12, wireType 2 =*/98).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.GameTime != null && Object.hasOwnProperty.call(message, "GameTime")) - writer.uint32(/* id 13, wireType 0 =*/104).int32(message.GameTime); - return writer; - }; - - /** - * Encodes the specified GameRec message, length delimited. Does not implicitly {@link gamehall.GameRec.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameRec - * @static - * @param {gamehall.IGameRec} message GameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameRec.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameRec message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameRec} GameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameRec.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameRec(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RecId = reader.int32(); - break; - } - case 2: { - if (!(message.Datas && message.Datas.length)) - message.Datas = []; - message.Datas.push($root.gamehall.PlayerGameRec.decode(reader, reader.uint32())); - break; - } - case 3: { - message.Ts = reader.int64(); - break; - } - case 4: { - message.RoomId = reader.int32(); - break; - } - case 5: { - message.GameMode = reader.int32(); - break; - } - case 6: { - message.SceneType = reader.int32(); - break; - } - case 7: { - message.GameId = reader.int32(); - break; - } - case 8: { - message.TotalOfGames = reader.int32(); - break; - } - case 9: { - message.NumOfGames = reader.int32(); - break; - } - case 10: { - message.RoomFeeMode = reader.int32(); - break; - } - case 11: { - message.RoomCardCnt = reader.int32(); - break; - } - case 12: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 13: { - message.GameTime = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameRec message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameRec} GameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameRec.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameRec message. - * @function verify - * @memberof gamehall.GameRec - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameRec.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RecId != null && message.hasOwnProperty("RecId")) - if (!$util.isInteger(message.RecId)) - return "RecId: integer expected"; - if (message.Datas != null && message.hasOwnProperty("Datas")) { - if (!Array.isArray(message.Datas)) - return "Datas: array expected"; - for (var i = 0; i < message.Datas.length; ++i) { - var error = $root.gamehall.PlayerGameRec.verify(message.Datas[i]); - if (error) - return "Datas." + error; - } - } - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - if (!$util.isInteger(message.GameMode)) - return "GameMode: integer expected"; - if (message.SceneType != null && message.hasOwnProperty("SceneType")) - if (!$util.isInteger(message.SceneType)) - return "SceneType: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.TotalOfGames != null && message.hasOwnProperty("TotalOfGames")) - if (!$util.isInteger(message.TotalOfGames)) - return "TotalOfGames: integer expected"; - if (message.NumOfGames != null && message.hasOwnProperty("NumOfGames")) - if (!$util.isInteger(message.NumOfGames)) - return "NumOfGames: integer expected"; - if (message.RoomFeeMode != null && message.hasOwnProperty("RoomFeeMode")) - if (!$util.isInteger(message.RoomFeeMode)) - return "RoomFeeMode: integer expected"; - if (message.RoomCardCnt != null && message.hasOwnProperty("RoomCardCnt")) - if (!$util.isInteger(message.RoomCardCnt)) - return "RoomCardCnt: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.GameTime != null && message.hasOwnProperty("GameTime")) - if (!$util.isInteger(message.GameTime)) - return "GameTime: integer expected"; - return null; - }; - - /** - * Creates a GameRec message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameRec - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameRec} GameRec - */ - GameRec.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameRec) - return object; - var message = new $root.gamehall.GameRec(); - if (object.RecId != null) - message.RecId = object.RecId | 0; - if (object.Datas) { - if (!Array.isArray(object.Datas)) - throw TypeError(".gamehall.GameRec.Datas: array expected"); - message.Datas = []; - for (var i = 0; i < object.Datas.length; ++i) { - if (typeof object.Datas[i] !== "object") - throw TypeError(".gamehall.GameRec.Datas: object expected"); - message.Datas[i] = $root.gamehall.PlayerGameRec.fromObject(object.Datas[i]); - } - } - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.GameMode != null) - message.GameMode = object.GameMode | 0; - if (object.SceneType != null) - message.SceneType = object.SceneType | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.TotalOfGames != null) - message.TotalOfGames = object.TotalOfGames | 0; - if (object.NumOfGames != null) - message.NumOfGames = object.NumOfGames | 0; - if (object.RoomFeeMode != null) - message.RoomFeeMode = object.RoomFeeMode | 0; - if (object.RoomCardCnt != null) - message.RoomCardCnt = object.RoomCardCnt | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.GameRec.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - if (object.GameTime != null) - message.GameTime = object.GameTime | 0; - return message; - }; - - /** - * Creates a plain object from a GameRec message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameRec - * @static - * @param {gamehall.GameRec} message GameRec - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameRec.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.Datas = []; - object.Params = []; - } - if (options.defaults) { - object.RecId = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - object.RoomId = 0; - object.GameMode = 0; - object.SceneType = 0; - object.GameId = 0; - object.TotalOfGames = 0; - object.NumOfGames = 0; - object.RoomFeeMode = 0; - object.RoomCardCnt = 0; - object.GameTime = 0; - } - if (message.RecId != null && message.hasOwnProperty("RecId")) - object.RecId = message.RecId; - if (message.Datas && message.Datas.length) { - object.Datas = []; - for (var j = 0; j < message.Datas.length; ++j) - object.Datas[j] = $root.gamehall.PlayerGameRec.toObject(message.Datas[j], options); - } - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - object.GameMode = message.GameMode; - if (message.SceneType != null && message.hasOwnProperty("SceneType")) - object.SceneType = message.SceneType; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.TotalOfGames != null && message.hasOwnProperty("TotalOfGames")) - object.TotalOfGames = message.TotalOfGames; - if (message.NumOfGames != null && message.hasOwnProperty("NumOfGames")) - object.NumOfGames = message.NumOfGames; - if (message.RoomFeeMode != null && message.hasOwnProperty("RoomFeeMode")) - object.RoomFeeMode = message.RoomFeeMode; - if (message.RoomCardCnt != null && message.hasOwnProperty("RoomCardCnt")) - object.RoomCardCnt = message.RoomCardCnt; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.GameTime != null && message.hasOwnProperty("GameTime")) - object.GameTime = message.GameTime; - return object; - }; - - /** - * Converts this GameRec to JSON. - * @function toJSON - * @memberof gamehall.GameRec - * @instance - * @returns {Object.} JSON object - */ - GameRec.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameRec - * @function getTypeUrl - * @memberof gamehall.GameRec - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameRec.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameRec"; - }; - - return GameRec; - })(); - - gamehall.SCGetGameRec = (function() { - - /** - * Properties of a SCGetGameRec. - * @memberof gamehall - * @interface ISCGetGameRec - * @property {Array.|null} [Recs] SCGetGameRec Recs - * @property {number|null} [Ver] SCGetGameRec Ver - * @property {number|null} [GameId] SCGetGameRec GameId - */ - - /** - * Constructs a new SCGetGameRec. - * @memberof gamehall - * @classdesc Represents a SCGetGameRec. - * @implements ISCGetGameRec - * @constructor - * @param {gamehall.ISCGetGameRec=} [properties] Properties to set - */ - function SCGetGameRec(properties) { - this.Recs = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetGameRec Recs. - * @member {Array.} Recs - * @memberof gamehall.SCGetGameRec - * @instance - */ - SCGetGameRec.prototype.Recs = $util.emptyArray; - - /** - * SCGetGameRec Ver. - * @member {number} Ver - * @memberof gamehall.SCGetGameRec - * @instance - */ - SCGetGameRec.prototype.Ver = 0; - - /** - * SCGetGameRec GameId. - * @member {number} GameId - * @memberof gamehall.SCGetGameRec - * @instance - */ - SCGetGameRec.prototype.GameId = 0; - - /** - * Creates a new SCGetGameRec instance using the specified properties. - * @function create - * @memberof gamehall.SCGetGameRec - * @static - * @param {gamehall.ISCGetGameRec=} [properties] Properties to set - * @returns {gamehall.SCGetGameRec} SCGetGameRec instance - */ - SCGetGameRec.create = function create(properties) { - return new SCGetGameRec(properties); - }; - - /** - * Encodes the specified SCGetGameRec message. Does not implicitly {@link gamehall.SCGetGameRec.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetGameRec - * @static - * @param {gamehall.ISCGetGameRec} message SCGetGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetGameRec.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Recs != null && message.Recs.length) - for (var i = 0; i < message.Recs.length; ++i) - $root.gamehall.GameRec.encode(message.Recs[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.Ver != null && Object.hasOwnProperty.call(message, "Ver")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Ver); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified SCGetGameRec message, length delimited. Does not implicitly {@link gamehall.SCGetGameRec.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetGameRec - * @static - * @param {gamehall.ISCGetGameRec} message SCGetGameRec message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetGameRec.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetGameRec message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetGameRec} SCGetGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetGameRec.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetGameRec(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Recs && message.Recs.length)) - message.Recs = []; - message.Recs.push($root.gamehall.GameRec.decode(reader, reader.uint32())); - break; - } - case 2: { - message.Ver = reader.int32(); - break; - } - case 3: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetGameRec message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetGameRec - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetGameRec} SCGetGameRec - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetGameRec.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetGameRec message. - * @function verify - * @memberof gamehall.SCGetGameRec - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetGameRec.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Recs != null && message.hasOwnProperty("Recs")) { - if (!Array.isArray(message.Recs)) - return "Recs: array expected"; - for (var i = 0; i < message.Recs.length; ++i) { - var error = $root.gamehall.GameRec.verify(message.Recs[i]); - if (error) - return "Recs." + error; - } - } - if (message.Ver != null && message.hasOwnProperty("Ver")) - if (!$util.isInteger(message.Ver)) - return "Ver: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a SCGetGameRec message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetGameRec - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetGameRec} SCGetGameRec - */ - SCGetGameRec.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetGameRec) - return object; - var message = new $root.gamehall.SCGetGameRec(); - if (object.Recs) { - if (!Array.isArray(object.Recs)) - throw TypeError(".gamehall.SCGetGameRec.Recs: array expected"); - message.Recs = []; - for (var i = 0; i < object.Recs.length; ++i) { - if (typeof object.Recs[i] !== "object") - throw TypeError(".gamehall.SCGetGameRec.Recs: object expected"); - message.Recs[i] = $root.gamehall.GameRec.fromObject(object.Recs[i]); - } - } - if (object.Ver != null) - message.Ver = object.Ver | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a SCGetGameRec message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetGameRec - * @static - * @param {gamehall.SCGetGameRec} message SCGetGameRec - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetGameRec.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Recs = []; - if (options.defaults) { - object.Ver = 0; - object.GameId = 0; - } - if (message.Recs && message.Recs.length) { - object.Recs = []; - for (var j = 0; j < message.Recs.length; ++j) - object.Recs[j] = $root.gamehall.GameRec.toObject(message.Recs[j], options); - } - if (message.Ver != null && message.hasOwnProperty("Ver")) - object.Ver = message.Ver; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this SCGetGameRec to JSON. - * @function toJSON - * @memberof gamehall.SCGetGameRec - * @instance - * @returns {Object.} JSON object - */ - SCGetGameRec.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetGameRec - * @function getTypeUrl - * @memberof gamehall.SCGetGameRec - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetGameRec.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetGameRec"; - }; - - return SCGetGameRec; - })(); - - gamehall.CSShareSuc = (function() { - - /** - * Properties of a CSShareSuc. - * @memberof gamehall - * @interface ICSShareSuc - * @property {number|null} [ShareType] CSShareSuc ShareType - */ - - /** - * Constructs a new CSShareSuc. - * @memberof gamehall - * @classdesc Represents a CSShareSuc. - * @implements ICSShareSuc - * @constructor - * @param {gamehall.ICSShareSuc=} [properties] Properties to set - */ - function CSShareSuc(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSShareSuc ShareType. - * @member {number} ShareType - * @memberof gamehall.CSShareSuc - * @instance - */ - CSShareSuc.prototype.ShareType = 0; - - /** - * Creates a new CSShareSuc instance using the specified properties. - * @function create - * @memberof gamehall.CSShareSuc - * @static - * @param {gamehall.ICSShareSuc=} [properties] Properties to set - * @returns {gamehall.CSShareSuc} CSShareSuc instance - */ - CSShareSuc.create = function create(properties) { - return new CSShareSuc(properties); - }; - - /** - * Encodes the specified CSShareSuc message. Does not implicitly {@link gamehall.CSShareSuc.verify|verify} messages. - * @function encode - * @memberof gamehall.CSShareSuc - * @static - * @param {gamehall.ICSShareSuc} message CSShareSuc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSShareSuc.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShareType != null && Object.hasOwnProperty.call(message, "ShareType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShareType); - return writer; - }; - - /** - * Encodes the specified CSShareSuc message, length delimited. Does not implicitly {@link gamehall.CSShareSuc.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSShareSuc - * @static - * @param {gamehall.ICSShareSuc} message CSShareSuc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSShareSuc.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSShareSuc message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSShareSuc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSShareSuc} CSShareSuc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSShareSuc.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSShareSuc(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShareType = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSShareSuc message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSShareSuc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSShareSuc} CSShareSuc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSShareSuc.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSShareSuc message. - * @function verify - * @memberof gamehall.CSShareSuc - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSShareSuc.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShareType != null && message.hasOwnProperty("ShareType")) - if (!$util.isInteger(message.ShareType)) - return "ShareType: integer expected"; - return null; - }; - - /** - * Creates a CSShareSuc message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSShareSuc - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSShareSuc} CSShareSuc - */ - CSShareSuc.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSShareSuc) - return object; - var message = new $root.gamehall.CSShareSuc(); - if (object.ShareType != null) - message.ShareType = object.ShareType | 0; - return message; - }; - - /** - * Creates a plain object from a CSShareSuc message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSShareSuc - * @static - * @param {gamehall.CSShareSuc} message CSShareSuc - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSShareSuc.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.ShareType = 0; - if (message.ShareType != null && message.hasOwnProperty("ShareType")) - object.ShareType = message.ShareType; - return object; - }; - - /** - * Converts this CSShareSuc to JSON. - * @function toJSON - * @memberof gamehall.CSShareSuc - * @instance - * @returns {Object.} JSON object - */ - CSShareSuc.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSShareSuc - * @function getTypeUrl - * @memberof gamehall.CSShareSuc - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSShareSuc.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSShareSuc"; - }; - - return CSShareSuc; - })(); - - gamehall.SCShareSuc = (function() { - - /** - * Properties of a SCShareSuc. - * @memberof gamehall - * @interface ISCShareSuc - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCShareSuc OpRetCode - */ - - /** - * Constructs a new SCShareSuc. - * @memberof gamehall - * @classdesc Represents a SCShareSuc. - * @implements ISCShareSuc - * @constructor - * @param {gamehall.ISCShareSuc=} [properties] Properties to set - */ - function SCShareSuc(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCShareSuc OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCShareSuc - * @instance - */ - SCShareSuc.prototype.OpRetCode = 0; - - /** - * Creates a new SCShareSuc instance using the specified properties. - * @function create - * @memberof gamehall.SCShareSuc - * @static - * @param {gamehall.ISCShareSuc=} [properties] Properties to set - * @returns {gamehall.SCShareSuc} SCShareSuc instance - */ - SCShareSuc.create = function create(properties) { - return new SCShareSuc(properties); - }; - - /** - * Encodes the specified SCShareSuc message. Does not implicitly {@link gamehall.SCShareSuc.verify|verify} messages. - * @function encode - * @memberof gamehall.SCShareSuc - * @static - * @param {gamehall.ISCShareSuc} message SCShareSuc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShareSuc.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCShareSuc message, length delimited. Does not implicitly {@link gamehall.SCShareSuc.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCShareSuc - * @static - * @param {gamehall.ISCShareSuc} message SCShareSuc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShareSuc.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCShareSuc message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCShareSuc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCShareSuc} SCShareSuc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShareSuc.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCShareSuc(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCShareSuc message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCShareSuc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCShareSuc} SCShareSuc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShareSuc.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCShareSuc message. - * @function verify - * @memberof gamehall.SCShareSuc - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCShareSuc.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCShareSuc message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCShareSuc - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCShareSuc} SCShareSuc - */ - SCShareSuc.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCShareSuc) - return object; - var message = new $root.gamehall.SCShareSuc(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCShareSuc message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCShareSuc - * @static - * @param {gamehall.SCShareSuc} message SCShareSuc - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCShareSuc.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCShareSuc to JSON. - * @function toJSON - * @memberof gamehall.SCShareSuc - * @instance - * @returns {Object.} JSON object - */ - SCShareSuc.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCShareSuc - * @function getTypeUrl - * @memberof gamehall.SCShareSuc - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCShareSuc.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCShareSuc"; - }; - - return SCShareSuc; - })(); - - gamehall.CSForceStart = (function() { - - /** - * Properties of a CSForceStart. - * @memberof gamehall - * @interface ICSForceStart - */ - - /** - * Constructs a new CSForceStart. - * @memberof gamehall - * @classdesc Represents a CSForceStart. - * @implements ICSForceStart - * @constructor - * @param {gamehall.ICSForceStart=} [properties] Properties to set - */ - function CSForceStart(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSForceStart instance using the specified properties. - * @function create - * @memberof gamehall.CSForceStart - * @static - * @param {gamehall.ICSForceStart=} [properties] Properties to set - * @returns {gamehall.CSForceStart} CSForceStart instance - */ - CSForceStart.create = function create(properties) { - return new CSForceStart(properties); - }; - - /** - * Encodes the specified CSForceStart message. Does not implicitly {@link gamehall.CSForceStart.verify|verify} messages. - * @function encode - * @memberof gamehall.CSForceStart - * @static - * @param {gamehall.ICSForceStart} message CSForceStart message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSForceStart.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSForceStart message, length delimited. Does not implicitly {@link gamehall.CSForceStart.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSForceStart - * @static - * @param {gamehall.ICSForceStart} message CSForceStart message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSForceStart.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSForceStart message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSForceStart - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSForceStart} CSForceStart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSForceStart.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSForceStart(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSForceStart message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSForceStart - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSForceStart} CSForceStart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSForceStart.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSForceStart message. - * @function verify - * @memberof gamehall.CSForceStart - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSForceStart.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSForceStart message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSForceStart - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSForceStart} CSForceStart - */ - CSForceStart.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSForceStart) - return object; - return new $root.gamehall.CSForceStart(); - }; - - /** - * Creates a plain object from a CSForceStart message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSForceStart - * @static - * @param {gamehall.CSForceStart} message CSForceStart - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSForceStart.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSForceStart to JSON. - * @function toJSON - * @memberof gamehall.CSForceStart - * @instance - * @returns {Object.} JSON object - */ - CSForceStart.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSForceStart - * @function getTypeUrl - * @memberof gamehall.CSForceStart - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSForceStart.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSForceStart"; - }; - - return CSForceStart; - })(); - - gamehall.SCForceStart = (function() { - - /** - * Properties of a SCForceStart. - * @memberof gamehall - * @interface ISCForceStart - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCForceStart OpRetCode - */ - - /** - * Constructs a new SCForceStart. - * @memberof gamehall - * @classdesc Represents a SCForceStart. - * @implements ISCForceStart - * @constructor - * @param {gamehall.ISCForceStart=} [properties] Properties to set - */ - function SCForceStart(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCForceStart OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCForceStart - * @instance - */ - SCForceStart.prototype.OpRetCode = 0; - - /** - * Creates a new SCForceStart instance using the specified properties. - * @function create - * @memberof gamehall.SCForceStart - * @static - * @param {gamehall.ISCForceStart=} [properties] Properties to set - * @returns {gamehall.SCForceStart} SCForceStart instance - */ - SCForceStart.create = function create(properties) { - return new SCForceStart(properties); - }; - - /** - * Encodes the specified SCForceStart message. Does not implicitly {@link gamehall.SCForceStart.verify|verify} messages. - * @function encode - * @memberof gamehall.SCForceStart - * @static - * @param {gamehall.ISCForceStart} message SCForceStart message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCForceStart.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCForceStart message, length delimited. Does not implicitly {@link gamehall.SCForceStart.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCForceStart - * @static - * @param {gamehall.ISCForceStart} message SCForceStart message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCForceStart.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCForceStart message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCForceStart - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCForceStart} SCForceStart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCForceStart.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCForceStart(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCForceStart message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCForceStart - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCForceStart} SCForceStart - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCForceStart.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCForceStart message. - * @function verify - * @memberof gamehall.SCForceStart - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCForceStart.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCForceStart message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCForceStart - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCForceStart} SCForceStart - */ - SCForceStart.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCForceStart) - return object; - var message = new $root.gamehall.SCForceStart(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCForceStart message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCForceStart - * @static - * @param {gamehall.SCForceStart} message SCForceStart - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCForceStart.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCForceStart to JSON. - * @function toJSON - * @memberof gamehall.SCForceStart - * @instance - * @returns {Object.} JSON object - */ - SCForceStart.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCForceStart - * @function getTypeUrl - * @memberof gamehall.SCForceStart - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCForceStart.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCForceStart"; - }; - - return SCForceStart; - })(); - - gamehall.CSInviteRobot = (function() { - - /** - * Properties of a CSInviteRobot. - * @memberof gamehall - * @interface ICSInviteRobot - * @property {number|null} [GameId] CSInviteRobot GameId - * @property {boolean|null} [IsAgent] CSInviteRobot IsAgent - */ - - /** - * Constructs a new CSInviteRobot. - * @memberof gamehall - * @classdesc Represents a CSInviteRobot. - * @implements ICSInviteRobot - * @constructor - * @param {gamehall.ICSInviteRobot=} [properties] Properties to set - */ - function CSInviteRobot(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSInviteRobot GameId. - * @member {number} GameId - * @memberof gamehall.CSInviteRobot - * @instance - */ - CSInviteRobot.prototype.GameId = 0; - - /** - * CSInviteRobot IsAgent. - * @member {boolean} IsAgent - * @memberof gamehall.CSInviteRobot - * @instance - */ - CSInviteRobot.prototype.IsAgent = false; - - /** - * Creates a new CSInviteRobot instance using the specified properties. - * @function create - * @memberof gamehall.CSInviteRobot - * @static - * @param {gamehall.ICSInviteRobot=} [properties] Properties to set - * @returns {gamehall.CSInviteRobot} CSInviteRobot instance - */ - CSInviteRobot.create = function create(properties) { - return new CSInviteRobot(properties); - }; - - /** - * Encodes the specified CSInviteRobot message. Does not implicitly {@link gamehall.CSInviteRobot.verify|verify} messages. - * @function encode - * @memberof gamehall.CSInviteRobot - * @static - * @param {gamehall.ICSInviteRobot} message CSInviteRobot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSInviteRobot.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.IsAgent != null && Object.hasOwnProperty.call(message, "IsAgent")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.IsAgent); - return writer; - }; - - /** - * Encodes the specified CSInviteRobot message, length delimited. Does not implicitly {@link gamehall.CSInviteRobot.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSInviteRobot - * @static - * @param {gamehall.ICSInviteRobot} message CSInviteRobot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSInviteRobot.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSInviteRobot message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSInviteRobot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSInviteRobot} CSInviteRobot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSInviteRobot.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSInviteRobot(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.IsAgent = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSInviteRobot message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSInviteRobot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSInviteRobot} CSInviteRobot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSInviteRobot.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSInviteRobot message. - * @function verify - * @memberof gamehall.CSInviteRobot - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSInviteRobot.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.IsAgent != null && message.hasOwnProperty("IsAgent")) - if (typeof message.IsAgent !== "boolean") - return "IsAgent: boolean expected"; - return null; - }; - - /** - * Creates a CSInviteRobot message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSInviteRobot - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSInviteRobot} CSInviteRobot - */ - CSInviteRobot.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSInviteRobot) - return object; - var message = new $root.gamehall.CSInviteRobot(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.IsAgent != null) - message.IsAgent = Boolean(object.IsAgent); - return message; - }; - - /** - * Creates a plain object from a CSInviteRobot message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSInviteRobot - * @static - * @param {gamehall.CSInviteRobot} message CSInviteRobot - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSInviteRobot.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.IsAgent = false; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.IsAgent != null && message.hasOwnProperty("IsAgent")) - object.IsAgent = message.IsAgent; - return object; - }; - - /** - * Converts this CSInviteRobot to JSON. - * @function toJSON - * @memberof gamehall.CSInviteRobot - * @instance - * @returns {Object.} JSON object - */ - CSInviteRobot.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSInviteRobot - * @function getTypeUrl - * @memberof gamehall.CSInviteRobot - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSInviteRobot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSInviteRobot"; - }; - - return CSInviteRobot; - })(); - - gamehall.CSPlayerSwithFlag = (function() { - - /** - * Properties of a CSPlayerSwithFlag. - * @memberof gamehall - * @interface ICSPlayerSwithFlag - * @property {number|null} [Flag] CSPlayerSwithFlag Flag - * @property {number|null} [Mark] CSPlayerSwithFlag Mark - */ - - /** - * Constructs a new CSPlayerSwithFlag. - * @memberof gamehall - * @classdesc Represents a CSPlayerSwithFlag. - * @implements ICSPlayerSwithFlag - * @constructor - * @param {gamehall.ICSPlayerSwithFlag=} [properties] Properties to set - */ - function CSPlayerSwithFlag(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSPlayerSwithFlag Flag. - * @member {number} Flag - * @memberof gamehall.CSPlayerSwithFlag - * @instance - */ - CSPlayerSwithFlag.prototype.Flag = 0; - - /** - * CSPlayerSwithFlag Mark. - * @member {number} Mark - * @memberof gamehall.CSPlayerSwithFlag - * @instance - */ - CSPlayerSwithFlag.prototype.Mark = 0; - - /** - * Creates a new CSPlayerSwithFlag instance using the specified properties. - * @function create - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {gamehall.ICSPlayerSwithFlag=} [properties] Properties to set - * @returns {gamehall.CSPlayerSwithFlag} CSPlayerSwithFlag instance - */ - CSPlayerSwithFlag.create = function create(properties) { - return new CSPlayerSwithFlag(properties); - }; - - /** - * Encodes the specified CSPlayerSwithFlag message. Does not implicitly {@link gamehall.CSPlayerSwithFlag.verify|verify} messages. - * @function encode - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {gamehall.ICSPlayerSwithFlag} message CSPlayerSwithFlag message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSPlayerSwithFlag.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Flag != null && Object.hasOwnProperty.call(message, "Flag")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Flag); - if (message.Mark != null && Object.hasOwnProperty.call(message, "Mark")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Mark); - return writer; - }; - - /** - * Encodes the specified CSPlayerSwithFlag message, length delimited. Does not implicitly {@link gamehall.CSPlayerSwithFlag.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {gamehall.ICSPlayerSwithFlag} message CSPlayerSwithFlag message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSPlayerSwithFlag.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSPlayerSwithFlag message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSPlayerSwithFlag} CSPlayerSwithFlag - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSPlayerSwithFlag.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSPlayerSwithFlag(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Flag = reader.int32(); - break; - } - case 2: { - message.Mark = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSPlayerSwithFlag message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSPlayerSwithFlag} CSPlayerSwithFlag - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSPlayerSwithFlag.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSPlayerSwithFlag message. - * @function verify - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSPlayerSwithFlag.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Flag != null && message.hasOwnProperty("Flag")) - if (!$util.isInteger(message.Flag)) - return "Flag: integer expected"; - if (message.Mark != null && message.hasOwnProperty("Mark")) - if (!$util.isInteger(message.Mark)) - return "Mark: integer expected"; - return null; - }; - - /** - * Creates a CSPlayerSwithFlag message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSPlayerSwithFlag} CSPlayerSwithFlag - */ - CSPlayerSwithFlag.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSPlayerSwithFlag) - return object; - var message = new $root.gamehall.CSPlayerSwithFlag(); - if (object.Flag != null) - message.Flag = object.Flag | 0; - if (object.Mark != null) - message.Mark = object.Mark | 0; - return message; - }; - - /** - * Creates a plain object from a CSPlayerSwithFlag message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {gamehall.CSPlayerSwithFlag} message CSPlayerSwithFlag - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSPlayerSwithFlag.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Flag = 0; - object.Mark = 0; - } - if (message.Flag != null && message.hasOwnProperty("Flag")) - object.Flag = message.Flag; - if (message.Mark != null && message.hasOwnProperty("Mark")) - object.Mark = message.Mark; - return object; - }; - - /** - * Converts this CSPlayerSwithFlag to JSON. - * @function toJSON - * @memberof gamehall.CSPlayerSwithFlag - * @instance - * @returns {Object.} JSON object - */ - CSPlayerSwithFlag.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSPlayerSwithFlag - * @function getTypeUrl - * @memberof gamehall.CSPlayerSwithFlag - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSPlayerSwithFlag.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSPlayerSwithFlag"; - }; - - return CSPlayerSwithFlag; - })(); - - gamehall.CSShopBuy = (function() { - - /** - * Properties of a CSShopBuy. - * @memberof gamehall - * @interface ICSShopBuy - * @property {number|null} [Id] CSShopBuy Id - * @property {number|null} [Count] CSShopBuy Count - */ - - /** - * Constructs a new CSShopBuy. - * @memberof gamehall - * @classdesc Represents a CSShopBuy. - * @implements ICSShopBuy - * @constructor - * @param {gamehall.ICSShopBuy=} [properties] Properties to set - */ - function CSShopBuy(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSShopBuy Id. - * @member {number} Id - * @memberof gamehall.CSShopBuy - * @instance - */ - CSShopBuy.prototype.Id = 0; - - /** - * CSShopBuy Count. - * @member {number} Count - * @memberof gamehall.CSShopBuy - * @instance - */ - CSShopBuy.prototype.Count = 0; - - /** - * Creates a new CSShopBuy instance using the specified properties. - * @function create - * @memberof gamehall.CSShopBuy - * @static - * @param {gamehall.ICSShopBuy=} [properties] Properties to set - * @returns {gamehall.CSShopBuy} CSShopBuy instance - */ - CSShopBuy.create = function create(properties) { - return new CSShopBuy(properties); - }; - - /** - * Encodes the specified CSShopBuy message. Does not implicitly {@link gamehall.CSShopBuy.verify|verify} messages. - * @function encode - * @memberof gamehall.CSShopBuy - * @static - * @param {gamehall.ICSShopBuy} message CSShopBuy message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSShopBuy.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.Count != null && Object.hasOwnProperty.call(message, "Count")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Count); - return writer; - }; - - /** - * Encodes the specified CSShopBuy message, length delimited. Does not implicitly {@link gamehall.CSShopBuy.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSShopBuy - * @static - * @param {gamehall.ICSShopBuy} message CSShopBuy message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSShopBuy.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSShopBuy message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSShopBuy - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSShopBuy} CSShopBuy - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSShopBuy.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSShopBuy(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.Count = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSShopBuy message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSShopBuy - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSShopBuy} CSShopBuy - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSShopBuy.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSShopBuy message. - * @function verify - * @memberof gamehall.CSShopBuy - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSShopBuy.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.Count != null && message.hasOwnProperty("Count")) - if (!$util.isInteger(message.Count)) - return "Count: integer expected"; - return null; - }; - - /** - * Creates a CSShopBuy message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSShopBuy - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSShopBuy} CSShopBuy - */ - CSShopBuy.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSShopBuy) - return object; - var message = new $root.gamehall.CSShopBuy(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.Count != null) - message.Count = object.Count | 0; - return message; - }; - - /** - * Creates a plain object from a CSShopBuy message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSShopBuy - * @static - * @param {gamehall.CSShopBuy} message CSShopBuy - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSShopBuy.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Id = 0; - object.Count = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.Count != null && message.hasOwnProperty("Count")) - object.Count = message.Count; - return object; - }; - - /** - * Converts this CSShopBuy to JSON. - * @function toJSON - * @memberof gamehall.CSShopBuy - * @instance - * @returns {Object.} JSON object - */ - CSShopBuy.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSShopBuy - * @function getTypeUrl - * @memberof gamehall.CSShopBuy - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSShopBuy.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSShopBuy"; - }; - - return CSShopBuy; - })(); - - gamehall.SCShopBuy = (function() { - - /** - * Properties of a SCShopBuy. - * @memberof gamehall - * @interface ISCShopBuy - * @property {number|null} [Id] SCShopBuy Id - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCShopBuy OpRetCode - * @property {number|null} [CostType] SCShopBuy CostType - * @property {number|null} [CostNum] SCShopBuy CostNum - * @property {number|null} [GainType] SCShopBuy GainType - * @property {number|null} [GainNum] SCShopBuy GainNum - */ - - /** - * Constructs a new SCShopBuy. - * @memberof gamehall - * @classdesc Represents a SCShopBuy. - * @implements ISCShopBuy - * @constructor - * @param {gamehall.ISCShopBuy=} [properties] Properties to set - */ - function SCShopBuy(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCShopBuy Id. - * @member {number} Id - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.Id = 0; - - /** - * SCShopBuy OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.OpRetCode = 0; - - /** - * SCShopBuy CostType. - * @member {number} CostType - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.CostType = 0; - - /** - * SCShopBuy CostNum. - * @member {number} CostNum - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.CostNum = 0; - - /** - * SCShopBuy GainType. - * @member {number} GainType - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.GainType = 0; - - /** - * SCShopBuy GainNum. - * @member {number} GainNum - * @memberof gamehall.SCShopBuy - * @instance - */ - SCShopBuy.prototype.GainNum = 0; - - /** - * Creates a new SCShopBuy instance using the specified properties. - * @function create - * @memberof gamehall.SCShopBuy - * @static - * @param {gamehall.ISCShopBuy=} [properties] Properties to set - * @returns {gamehall.SCShopBuy} SCShopBuy instance - */ - SCShopBuy.create = function create(properties) { - return new SCShopBuy(properties); - }; - - /** - * Encodes the specified SCShopBuy message. Does not implicitly {@link gamehall.SCShopBuy.verify|verify} messages. - * @function encode - * @memberof gamehall.SCShopBuy - * @static - * @param {gamehall.ISCShopBuy} message SCShopBuy message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShopBuy.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpRetCode); - if (message.CostType != null && Object.hasOwnProperty.call(message, "CostType")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.CostType); - if (message.CostNum != null && Object.hasOwnProperty.call(message, "CostNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.CostNum); - if (message.GainType != null && Object.hasOwnProperty.call(message, "GainType")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.GainType); - if (message.GainNum != null && Object.hasOwnProperty.call(message, "GainNum")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.GainNum); - return writer; - }; - - /** - * Encodes the specified SCShopBuy message, length delimited. Does not implicitly {@link gamehall.SCShopBuy.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCShopBuy - * @static - * @param {gamehall.ISCShopBuy} message SCShopBuy message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShopBuy.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCShopBuy message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCShopBuy - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCShopBuy} SCShopBuy - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShopBuy.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCShopBuy(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.OpRetCode = reader.int32(); - break; - } - case 3: { - message.CostType = reader.int32(); - break; - } - case 4: { - message.CostNum = reader.int32(); - break; - } - case 5: { - message.GainType = reader.int32(); - break; - } - case 6: { - message.GainNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCShopBuy message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCShopBuy - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCShopBuy} SCShopBuy - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShopBuy.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCShopBuy message. - * @function verify - * @memberof gamehall.SCShopBuy - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCShopBuy.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.CostType != null && message.hasOwnProperty("CostType")) - if (!$util.isInteger(message.CostType)) - return "CostType: integer expected"; - if (message.CostNum != null && message.hasOwnProperty("CostNum")) - if (!$util.isInteger(message.CostNum)) - return "CostNum: integer expected"; - if (message.GainType != null && message.hasOwnProperty("GainType")) - if (!$util.isInteger(message.GainType)) - return "GainType: integer expected"; - if (message.GainNum != null && message.hasOwnProperty("GainNum")) - if (!$util.isInteger(message.GainNum)) - return "GainNum: integer expected"; - return null; - }; - - /** - * Creates a SCShopBuy message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCShopBuy - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCShopBuy} SCShopBuy - */ - SCShopBuy.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCShopBuy) - return object; - var message = new $root.gamehall.SCShopBuy(); - if (object.Id != null) - message.Id = object.Id | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.CostType != null) - message.CostType = object.CostType | 0; - if (object.CostNum != null) - message.CostNum = object.CostNum | 0; - if (object.GainType != null) - message.GainType = object.GainType | 0; - if (object.GainNum != null) - message.GainNum = object.GainNum | 0; - return message; - }; - - /** - * Creates a plain object from a SCShopBuy message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCShopBuy - * @static - * @param {gamehall.SCShopBuy} message SCShopBuy - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCShopBuy.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Id = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.CostType = 0; - object.CostNum = 0; - object.GainType = 0; - object.GainNum = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.CostType != null && message.hasOwnProperty("CostType")) - object.CostType = message.CostType; - if (message.CostNum != null && message.hasOwnProperty("CostNum")) - object.CostNum = message.CostNum; - if (message.GainType != null && message.hasOwnProperty("GainType")) - object.GainType = message.GainType; - if (message.GainNum != null && message.hasOwnProperty("GainNum")) - object.GainNum = message.GainNum; - return object; - }; - - /** - * Converts this SCShopBuy to JSON. - * @function toJSON - * @memberof gamehall.SCShopBuy - * @instance - * @returns {Object.} JSON object - */ - SCShopBuy.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCShopBuy - * @function getTypeUrl - * @memberof gamehall.SCShopBuy - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCShopBuy.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCShopBuy"; - }; - - return SCShopBuy; - })(); - - gamehall.CSJoinGame = (function() { - - /** - * Properties of a CSJoinGame. - * @memberof gamehall - * @interface ICSJoinGame - * @property {number|null} [MsgType] CSJoinGame MsgType - * @property {number|null} [SnId] CSJoinGame SnId - * @property {number|null} [Pos] CSJoinGame Pos - * @property {boolean|null} [Agree] CSJoinGame Agree - */ - - /** - * Constructs a new CSJoinGame. - * @memberof gamehall - * @classdesc Represents a CSJoinGame. - * @implements ICSJoinGame - * @constructor - * @param {gamehall.ICSJoinGame=} [properties] Properties to set - */ - function CSJoinGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSJoinGame MsgType. - * @member {number} MsgType - * @memberof gamehall.CSJoinGame - * @instance - */ - CSJoinGame.prototype.MsgType = 0; - - /** - * CSJoinGame SnId. - * @member {number} SnId - * @memberof gamehall.CSJoinGame - * @instance - */ - CSJoinGame.prototype.SnId = 0; - - /** - * CSJoinGame Pos. - * @member {number} Pos - * @memberof gamehall.CSJoinGame - * @instance - */ - CSJoinGame.prototype.Pos = 0; - - /** - * CSJoinGame Agree. - * @member {boolean} Agree - * @memberof gamehall.CSJoinGame - * @instance - */ - CSJoinGame.prototype.Agree = false; - - /** - * Creates a new CSJoinGame instance using the specified properties. - * @function create - * @memberof gamehall.CSJoinGame - * @static - * @param {gamehall.ICSJoinGame=} [properties] Properties to set - * @returns {gamehall.CSJoinGame} CSJoinGame instance - */ - CSJoinGame.create = function create(properties) { - return new CSJoinGame(properties); - }; - - /** - * Encodes the specified CSJoinGame message. Does not implicitly {@link gamehall.CSJoinGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSJoinGame - * @static - * @param {gamehall.ICSJoinGame} message CSJoinGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSJoinGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.MsgType != null && Object.hasOwnProperty.call(message, "MsgType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.MsgType); - if (message.SnId != null && Object.hasOwnProperty.call(message, "SnId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.SnId); - if (message.Pos != null && Object.hasOwnProperty.call(message, "Pos")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Pos); - if (message.Agree != null && Object.hasOwnProperty.call(message, "Agree")) - writer.uint32(/* id 4, wireType 0 =*/32).bool(message.Agree); - return writer; - }; - - /** - * Encodes the specified CSJoinGame message, length delimited. Does not implicitly {@link gamehall.CSJoinGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSJoinGame - * @static - * @param {gamehall.ICSJoinGame} message CSJoinGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSJoinGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSJoinGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSJoinGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSJoinGame} CSJoinGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSJoinGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSJoinGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.MsgType = reader.int32(); - break; - } - case 2: { - message.SnId = reader.int32(); - break; - } - case 3: { - message.Pos = reader.int32(); - break; - } - case 4: { - message.Agree = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSJoinGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSJoinGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSJoinGame} CSJoinGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSJoinGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSJoinGame message. - * @function verify - * @memberof gamehall.CSJoinGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSJoinGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.MsgType != null && message.hasOwnProperty("MsgType")) - if (!$util.isInteger(message.MsgType)) - return "MsgType: integer expected"; - if (message.SnId != null && message.hasOwnProperty("SnId")) - if (!$util.isInteger(message.SnId)) - return "SnId: integer expected"; - if (message.Pos != null && message.hasOwnProperty("Pos")) - if (!$util.isInteger(message.Pos)) - return "Pos: integer expected"; - if (message.Agree != null && message.hasOwnProperty("Agree")) - if (typeof message.Agree !== "boolean") - return "Agree: boolean expected"; - return null; - }; - - /** - * Creates a CSJoinGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSJoinGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSJoinGame} CSJoinGame - */ - CSJoinGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSJoinGame) - return object; - var message = new $root.gamehall.CSJoinGame(); - if (object.MsgType != null) - message.MsgType = object.MsgType | 0; - if (object.SnId != null) - message.SnId = object.SnId | 0; - if (object.Pos != null) - message.Pos = object.Pos | 0; - if (object.Agree != null) - message.Agree = Boolean(object.Agree); - return message; - }; - - /** - * Creates a plain object from a CSJoinGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSJoinGame - * @static - * @param {gamehall.CSJoinGame} message CSJoinGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSJoinGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.MsgType = 0; - object.SnId = 0; - object.Pos = 0; - object.Agree = false; - } - if (message.MsgType != null && message.hasOwnProperty("MsgType")) - object.MsgType = message.MsgType; - if (message.SnId != null && message.hasOwnProperty("SnId")) - object.SnId = message.SnId; - if (message.Pos != null && message.hasOwnProperty("Pos")) - object.Pos = message.Pos; - if (message.Agree != null && message.hasOwnProperty("Agree")) - object.Agree = message.Agree; - return object; - }; - - /** - * Converts this CSJoinGame to JSON. - * @function toJSON - * @memberof gamehall.CSJoinGame - * @instance - * @returns {Object.} JSON object - */ - CSJoinGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSJoinGame - * @function getTypeUrl - * @memberof gamehall.CSJoinGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSJoinGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSJoinGame"; - }; - - return CSJoinGame; - })(); - - gamehall.SCJoinGame = (function() { - - /** - * Properties of a SCJoinGame. - * @memberof gamehall - * @interface ISCJoinGame - * @property {number|null} [MsgType] SCJoinGame MsgType - * @property {string|null} [Name] SCJoinGame Name - * @property {number|null} [SnId] SCJoinGame SnId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCJoinGame OpRetCode - */ - - /** - * Constructs a new SCJoinGame. - * @memberof gamehall - * @classdesc Represents a SCJoinGame. - * @implements ISCJoinGame - * @constructor - * @param {gamehall.ISCJoinGame=} [properties] Properties to set - */ - function SCJoinGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCJoinGame MsgType. - * @member {number} MsgType - * @memberof gamehall.SCJoinGame - * @instance - */ - SCJoinGame.prototype.MsgType = 0; - - /** - * SCJoinGame Name. - * @member {string} Name - * @memberof gamehall.SCJoinGame - * @instance - */ - SCJoinGame.prototype.Name = ""; - - /** - * SCJoinGame SnId. - * @member {number} SnId - * @memberof gamehall.SCJoinGame - * @instance - */ - SCJoinGame.prototype.SnId = 0; - - /** - * SCJoinGame OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCJoinGame - * @instance - */ - SCJoinGame.prototype.OpRetCode = 0; - - /** - * Creates a new SCJoinGame instance using the specified properties. - * @function create - * @memberof gamehall.SCJoinGame - * @static - * @param {gamehall.ISCJoinGame=} [properties] Properties to set - * @returns {gamehall.SCJoinGame} SCJoinGame instance - */ - SCJoinGame.create = function create(properties) { - return new SCJoinGame(properties); - }; - - /** - * Encodes the specified SCJoinGame message. Does not implicitly {@link gamehall.SCJoinGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCJoinGame - * @static - * @param {gamehall.ISCJoinGame} message SCJoinGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCJoinGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.MsgType != null && Object.hasOwnProperty.call(message, "MsgType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.MsgType); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Name); - if (message.SnId != null && Object.hasOwnProperty.call(message, "SnId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.SnId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCJoinGame message, length delimited. Does not implicitly {@link gamehall.SCJoinGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCJoinGame - * @static - * @param {gamehall.ISCJoinGame} message SCJoinGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCJoinGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCJoinGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCJoinGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCJoinGame} SCJoinGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCJoinGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCJoinGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.MsgType = reader.int32(); - break; - } - case 2: { - message.Name = reader.string(); - break; - } - case 3: { - message.SnId = reader.int32(); - break; - } - case 4: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCJoinGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCJoinGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCJoinGame} SCJoinGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCJoinGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCJoinGame message. - * @function verify - * @memberof gamehall.SCJoinGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCJoinGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.MsgType != null && message.hasOwnProperty("MsgType")) - if (!$util.isInteger(message.MsgType)) - return "MsgType: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.SnId != null && message.hasOwnProperty("SnId")) - if (!$util.isInteger(message.SnId)) - return "SnId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCJoinGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCJoinGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCJoinGame} SCJoinGame - */ - SCJoinGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCJoinGame) - return object; - var message = new $root.gamehall.SCJoinGame(); - if (object.MsgType != null) - message.MsgType = object.MsgType | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.SnId != null) - message.SnId = object.SnId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCJoinGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCJoinGame - * @static - * @param {gamehall.SCJoinGame} message SCJoinGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCJoinGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.MsgType = 0; - object.Name = ""; - object.SnId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.MsgType != null && message.hasOwnProperty("MsgType")) - object.MsgType = message.MsgType; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.SnId != null && message.hasOwnProperty("SnId")) - object.SnId = message.SnId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCJoinGame to JSON. - * @function toJSON - * @memberof gamehall.SCJoinGame - * @instance - * @returns {Object.} JSON object - */ - SCJoinGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCJoinGame - * @function getTypeUrl - * @memberof gamehall.SCJoinGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCJoinGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCJoinGame"; - }; - - return SCJoinGame; - })(); - - gamehall.CSEnterDgGame = (function() { - - /** - * Properties of a CSEnterDgGame. - * @memberof gamehall - * @interface ICSEnterDgGame - * @property {number|null} [LoginType] CSEnterDgGame LoginType - * @property {number|null} [DgGameId] CSEnterDgGame DgGameId - * @property {string|null} [Domains] CSEnterDgGame Domains - */ - - /** - * Constructs a new CSEnterDgGame. - * @memberof gamehall - * @classdesc Represents a CSEnterDgGame. - * @implements ICSEnterDgGame - * @constructor - * @param {gamehall.ICSEnterDgGame=} [properties] Properties to set - */ - function CSEnterDgGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSEnterDgGame LoginType. - * @member {number} LoginType - * @memberof gamehall.CSEnterDgGame - * @instance - */ - CSEnterDgGame.prototype.LoginType = 0; - - /** - * CSEnterDgGame DgGameId. - * @member {number} DgGameId - * @memberof gamehall.CSEnterDgGame - * @instance - */ - CSEnterDgGame.prototype.DgGameId = 0; - - /** - * CSEnterDgGame Domains. - * @member {string} Domains - * @memberof gamehall.CSEnterDgGame - * @instance - */ - CSEnterDgGame.prototype.Domains = ""; - - /** - * Creates a new CSEnterDgGame instance using the specified properties. - * @function create - * @memberof gamehall.CSEnterDgGame - * @static - * @param {gamehall.ICSEnterDgGame=} [properties] Properties to set - * @returns {gamehall.CSEnterDgGame} CSEnterDgGame instance - */ - CSEnterDgGame.create = function create(properties) { - return new CSEnterDgGame(properties); - }; - - /** - * Encodes the specified CSEnterDgGame message. Does not implicitly {@link gamehall.CSEnterDgGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSEnterDgGame - * @static - * @param {gamehall.ICSEnterDgGame} message CSEnterDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterDgGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.LoginType != null && Object.hasOwnProperty.call(message, "LoginType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.LoginType); - if (message.DgGameId != null && Object.hasOwnProperty.call(message, "DgGameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.DgGameId); - if (message.Domains != null && Object.hasOwnProperty.call(message, "Domains")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Domains); - return writer; - }; - - /** - * Encodes the specified CSEnterDgGame message, length delimited. Does not implicitly {@link gamehall.CSEnterDgGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSEnterDgGame - * @static - * @param {gamehall.ICSEnterDgGame} message CSEnterDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterDgGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSEnterDgGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSEnterDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSEnterDgGame} CSEnterDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterDgGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSEnterDgGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.LoginType = reader.int32(); - break; - } - case 2: { - message.DgGameId = reader.int32(); - break; - } - case 3: { - message.Domains = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSEnterDgGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSEnterDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSEnterDgGame} CSEnterDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterDgGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSEnterDgGame message. - * @function verify - * @memberof gamehall.CSEnterDgGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSEnterDgGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.LoginType != null && message.hasOwnProperty("LoginType")) - if (!$util.isInteger(message.LoginType)) - return "LoginType: integer expected"; - if (message.DgGameId != null && message.hasOwnProperty("DgGameId")) - if (!$util.isInteger(message.DgGameId)) - return "DgGameId: integer expected"; - if (message.Domains != null && message.hasOwnProperty("Domains")) - if (!$util.isString(message.Domains)) - return "Domains: string expected"; - return null; - }; - - /** - * Creates a CSEnterDgGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSEnterDgGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSEnterDgGame} CSEnterDgGame - */ - CSEnterDgGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSEnterDgGame) - return object; - var message = new $root.gamehall.CSEnterDgGame(); - if (object.LoginType != null) - message.LoginType = object.LoginType | 0; - if (object.DgGameId != null) - message.DgGameId = object.DgGameId | 0; - if (object.Domains != null) - message.Domains = String(object.Domains); - return message; - }; - - /** - * Creates a plain object from a CSEnterDgGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSEnterDgGame - * @static - * @param {gamehall.CSEnterDgGame} message CSEnterDgGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSEnterDgGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.LoginType = 0; - object.DgGameId = 0; - object.Domains = ""; - } - if (message.LoginType != null && message.hasOwnProperty("LoginType")) - object.LoginType = message.LoginType; - if (message.DgGameId != null && message.hasOwnProperty("DgGameId")) - object.DgGameId = message.DgGameId; - if (message.Domains != null && message.hasOwnProperty("Domains")) - object.Domains = message.Domains; - return object; - }; - - /** - * Converts this CSEnterDgGame to JSON. - * @function toJSON - * @memberof gamehall.CSEnterDgGame - * @instance - * @returns {Object.} JSON object - */ - CSEnterDgGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSEnterDgGame - * @function getTypeUrl - * @memberof gamehall.CSEnterDgGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSEnterDgGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSEnterDgGame"; - }; - - return CSEnterDgGame; - })(); - - gamehall.SCEnterDgGame = (function() { - - /** - * Properties of a SCEnterDgGame. - * @memberof gamehall - * @interface ISCEnterDgGame - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCEnterDgGame OpRetCode - * @property {string|null} [LoginUrl] SCEnterDgGame LoginUrl - * @property {string|null} [Token] SCEnterDgGame Token - * @property {number|null} [DgGameId] SCEnterDgGame DgGameId - * @property {number|null} [CodeId] SCEnterDgGame CodeId - * @property {string|null} [Domains] SCEnterDgGame Domains - * @property {Array.|null} [List] SCEnterDgGame List - */ - - /** - * Constructs a new SCEnterDgGame. - * @memberof gamehall - * @classdesc Represents a SCEnterDgGame. - * @implements ISCEnterDgGame - * @constructor - * @param {gamehall.ISCEnterDgGame=} [properties] Properties to set - */ - function SCEnterDgGame(properties) { - this.List = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCEnterDgGame OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.OpRetCode = 0; - - /** - * SCEnterDgGame LoginUrl. - * @member {string} LoginUrl - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.LoginUrl = ""; - - /** - * SCEnterDgGame Token. - * @member {string} Token - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.Token = ""; - - /** - * SCEnterDgGame DgGameId. - * @member {number} DgGameId - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.DgGameId = 0; - - /** - * SCEnterDgGame CodeId. - * @member {number} CodeId - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.CodeId = 0; - - /** - * SCEnterDgGame Domains. - * @member {string} Domains - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.Domains = ""; - - /** - * SCEnterDgGame List. - * @member {Array.} List - * @memberof gamehall.SCEnterDgGame - * @instance - */ - SCEnterDgGame.prototype.List = $util.emptyArray; - - /** - * Creates a new SCEnterDgGame instance using the specified properties. - * @function create - * @memberof gamehall.SCEnterDgGame - * @static - * @param {gamehall.ISCEnterDgGame=} [properties] Properties to set - * @returns {gamehall.SCEnterDgGame} SCEnterDgGame instance - */ - SCEnterDgGame.create = function create(properties) { - return new SCEnterDgGame(properties); - }; - - /** - * Encodes the specified SCEnterDgGame message. Does not implicitly {@link gamehall.SCEnterDgGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCEnterDgGame - * @static - * @param {gamehall.ISCEnterDgGame} message SCEnterDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterDgGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.LoginUrl != null && Object.hasOwnProperty.call(message, "LoginUrl")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.LoginUrl); - if (message.Token != null && Object.hasOwnProperty.call(message, "Token")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Token); - if (message.DgGameId != null && Object.hasOwnProperty.call(message, "DgGameId")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.DgGameId); - if (message.CodeId != null && Object.hasOwnProperty.call(message, "CodeId")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.CodeId); - if (message.Domains != null && Object.hasOwnProperty.call(message, "Domains")) - writer.uint32(/* id 6, wireType 2 =*/50).string(message.Domains); - if (message.List != null && message.List.length) - for (var i = 0; i < message.List.length; ++i) - writer.uint32(/* id 7, wireType 2 =*/58).string(message.List[i]); - return writer; - }; - - /** - * Encodes the specified SCEnterDgGame message, length delimited. Does not implicitly {@link gamehall.SCEnterDgGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCEnterDgGame - * @static - * @param {gamehall.ISCEnterDgGame} message SCEnterDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterDgGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCEnterDgGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCEnterDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCEnterDgGame} SCEnterDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterDgGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCEnterDgGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.LoginUrl = reader.string(); - break; - } - case 3: { - message.Token = reader.string(); - break; - } - case 4: { - message.DgGameId = reader.int32(); - break; - } - case 5: { - message.CodeId = reader.int32(); - break; - } - case 6: { - message.Domains = reader.string(); - break; - } - case 7: { - if (!(message.List && message.List.length)) - message.List = []; - message.List.push(reader.string()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCEnterDgGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCEnterDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCEnterDgGame} SCEnterDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterDgGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCEnterDgGame message. - * @function verify - * @memberof gamehall.SCEnterDgGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCEnterDgGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.LoginUrl != null && message.hasOwnProperty("LoginUrl")) - if (!$util.isString(message.LoginUrl)) - return "LoginUrl: string expected"; - if (message.Token != null && message.hasOwnProperty("Token")) - if (!$util.isString(message.Token)) - return "Token: string expected"; - if (message.DgGameId != null && message.hasOwnProperty("DgGameId")) - if (!$util.isInteger(message.DgGameId)) - return "DgGameId: integer expected"; - if (message.CodeId != null && message.hasOwnProperty("CodeId")) - if (!$util.isInteger(message.CodeId)) - return "CodeId: integer expected"; - if (message.Domains != null && message.hasOwnProperty("Domains")) - if (!$util.isString(message.Domains)) - return "Domains: string expected"; - if (message.List != null && message.hasOwnProperty("List")) { - if (!Array.isArray(message.List)) - return "List: array expected"; - for (var i = 0; i < message.List.length; ++i) - if (!$util.isString(message.List[i])) - return "List: string[] expected"; - } - return null; - }; - - /** - * Creates a SCEnterDgGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCEnterDgGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCEnterDgGame} SCEnterDgGame - */ - SCEnterDgGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCEnterDgGame) - return object; - var message = new $root.gamehall.SCEnterDgGame(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.LoginUrl != null) - message.LoginUrl = String(object.LoginUrl); - if (object.Token != null) - message.Token = String(object.Token); - if (object.DgGameId != null) - message.DgGameId = object.DgGameId | 0; - if (object.CodeId != null) - message.CodeId = object.CodeId | 0; - if (object.Domains != null) - message.Domains = String(object.Domains); - if (object.List) { - if (!Array.isArray(object.List)) - throw TypeError(".gamehall.SCEnterDgGame.List: array expected"); - message.List = []; - for (var i = 0; i < object.List.length; ++i) - message.List[i] = String(object.List[i]); - } - return message; - }; - - /** - * Creates a plain object from a SCEnterDgGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCEnterDgGame - * @static - * @param {gamehall.SCEnterDgGame} message SCEnterDgGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCEnterDgGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.List = []; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.LoginUrl = ""; - object.Token = ""; - object.DgGameId = 0; - object.CodeId = 0; - object.Domains = ""; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.LoginUrl != null && message.hasOwnProperty("LoginUrl")) - object.LoginUrl = message.LoginUrl; - if (message.Token != null && message.hasOwnProperty("Token")) - object.Token = message.Token; - if (message.DgGameId != null && message.hasOwnProperty("DgGameId")) - object.DgGameId = message.DgGameId; - if (message.CodeId != null && message.hasOwnProperty("CodeId")) - object.CodeId = message.CodeId; - if (message.Domains != null && message.hasOwnProperty("Domains")) - object.Domains = message.Domains; - if (message.List && message.List.length) { - object.List = []; - for (var j = 0; j < message.List.length; ++j) - object.List[j] = message.List[j]; - } - return object; - }; - - /** - * Converts this SCEnterDgGame to JSON. - * @function toJSON - * @memberof gamehall.SCEnterDgGame - * @instance - * @returns {Object.} JSON object - */ - SCEnterDgGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCEnterDgGame - * @function getTypeUrl - * @memberof gamehall.SCEnterDgGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCEnterDgGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCEnterDgGame"; - }; - - return SCEnterDgGame; - })(); - - gamehall.CSLeaveDgGame = (function() { - - /** - * Properties of a CSLeaveDgGame. - * @memberof gamehall - * @interface ICSLeaveDgGame - */ - - /** - * Constructs a new CSLeaveDgGame. - * @memberof gamehall - * @classdesc Represents a CSLeaveDgGame. - * @implements ICSLeaveDgGame - * @constructor - * @param {gamehall.ICSLeaveDgGame=} [properties] Properties to set - */ - function CSLeaveDgGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSLeaveDgGame instance using the specified properties. - * @function create - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {gamehall.ICSLeaveDgGame=} [properties] Properties to set - * @returns {gamehall.CSLeaveDgGame} CSLeaveDgGame instance - */ - CSLeaveDgGame.create = function create(properties) { - return new CSLeaveDgGame(properties); - }; - - /** - * Encodes the specified CSLeaveDgGame message. Does not implicitly {@link gamehall.CSLeaveDgGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {gamehall.ICSLeaveDgGame} message CSLeaveDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveDgGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSLeaveDgGame message, length delimited. Does not implicitly {@link gamehall.CSLeaveDgGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {gamehall.ICSLeaveDgGame} message CSLeaveDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveDgGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSLeaveDgGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSLeaveDgGame} CSLeaveDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveDgGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSLeaveDgGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSLeaveDgGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSLeaveDgGame} CSLeaveDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveDgGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSLeaveDgGame message. - * @function verify - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSLeaveDgGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSLeaveDgGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSLeaveDgGame} CSLeaveDgGame - */ - CSLeaveDgGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSLeaveDgGame) - return object; - return new $root.gamehall.CSLeaveDgGame(); - }; - - /** - * Creates a plain object from a CSLeaveDgGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {gamehall.CSLeaveDgGame} message CSLeaveDgGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSLeaveDgGame.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSLeaveDgGame to JSON. - * @function toJSON - * @memberof gamehall.CSLeaveDgGame - * @instance - * @returns {Object.} JSON object - */ - CSLeaveDgGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSLeaveDgGame - * @function getTypeUrl - * @memberof gamehall.CSLeaveDgGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSLeaveDgGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSLeaveDgGame"; - }; - - return CSLeaveDgGame; - })(); - - gamehall.SCLeaveDgGame = (function() { - - /** - * Properties of a SCLeaveDgGame. - * @memberof gamehall - * @interface ISCLeaveDgGame - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCLeaveDgGame OpRetCode - */ - - /** - * Constructs a new SCLeaveDgGame. - * @memberof gamehall - * @classdesc Represents a SCLeaveDgGame. - * @implements ISCLeaveDgGame - * @constructor - * @param {gamehall.ISCLeaveDgGame=} [properties] Properties to set - */ - function SCLeaveDgGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLeaveDgGame OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCLeaveDgGame - * @instance - */ - SCLeaveDgGame.prototype.OpRetCode = 0; - - /** - * Creates a new SCLeaveDgGame instance using the specified properties. - * @function create - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {gamehall.ISCLeaveDgGame=} [properties] Properties to set - * @returns {gamehall.SCLeaveDgGame} SCLeaveDgGame instance - */ - SCLeaveDgGame.create = function create(properties) { - return new SCLeaveDgGame(properties); - }; - - /** - * Encodes the specified SCLeaveDgGame message. Does not implicitly {@link gamehall.SCLeaveDgGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {gamehall.ISCLeaveDgGame} message SCLeaveDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveDgGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCLeaveDgGame message, length delimited. Does not implicitly {@link gamehall.SCLeaveDgGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {gamehall.ISCLeaveDgGame} message SCLeaveDgGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveDgGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLeaveDgGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLeaveDgGame} SCLeaveDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveDgGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLeaveDgGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLeaveDgGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLeaveDgGame} SCLeaveDgGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveDgGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLeaveDgGame message. - * @function verify - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLeaveDgGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCLeaveDgGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLeaveDgGame} SCLeaveDgGame - */ - SCLeaveDgGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLeaveDgGame) - return object; - var message = new $root.gamehall.SCLeaveDgGame(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCLeaveDgGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {gamehall.SCLeaveDgGame} message SCLeaveDgGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLeaveDgGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCLeaveDgGame to JSON. - * @function toJSON - * @memberof gamehall.SCLeaveDgGame - * @instance - * @returns {Object.} JSON object - */ - SCLeaveDgGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLeaveDgGame - * @function getTypeUrl - * @memberof gamehall.SCLeaveDgGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLeaveDgGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLeaveDgGame"; - }; - - return SCLeaveDgGame; - })(); - - gamehall.CSThridAccountStatistic = (function() { - - /** - * Properties of a CSThridAccountStatistic. - * @memberof gamehall - * @interface ICSThridAccountStatistic - * @property {number|null} [ReqId] CSThridAccountStatistic ReqId - */ - - /** - * Constructs a new CSThridAccountStatistic. - * @memberof gamehall - * @classdesc Represents a CSThridAccountStatistic. - * @implements ICSThridAccountStatistic - * @constructor - * @param {gamehall.ICSThridAccountStatistic=} [properties] Properties to set - */ - function CSThridAccountStatistic(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSThridAccountStatistic ReqId. - * @member {number} ReqId - * @memberof gamehall.CSThridAccountStatistic - * @instance - */ - CSThridAccountStatistic.prototype.ReqId = 0; - - /** - * Creates a new CSThridAccountStatistic instance using the specified properties. - * @function create - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {gamehall.ICSThridAccountStatistic=} [properties] Properties to set - * @returns {gamehall.CSThridAccountStatistic} CSThridAccountStatistic instance - */ - CSThridAccountStatistic.create = function create(properties) { - return new CSThridAccountStatistic(properties); - }; - - /** - * Encodes the specified CSThridAccountStatistic message. Does not implicitly {@link gamehall.CSThridAccountStatistic.verify|verify} messages. - * @function encode - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {gamehall.ICSThridAccountStatistic} message CSThridAccountStatistic message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridAccountStatistic.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ReqId != null && Object.hasOwnProperty.call(message, "ReqId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ReqId); - return writer; - }; - - /** - * Encodes the specified CSThridAccountStatistic message, length delimited. Does not implicitly {@link gamehall.CSThridAccountStatistic.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {gamehall.ICSThridAccountStatistic} message CSThridAccountStatistic message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridAccountStatistic.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSThridAccountStatistic message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSThridAccountStatistic} CSThridAccountStatistic - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridAccountStatistic.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSThridAccountStatistic(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ReqId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSThridAccountStatistic message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSThridAccountStatistic} CSThridAccountStatistic - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridAccountStatistic.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSThridAccountStatistic message. - * @function verify - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSThridAccountStatistic.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ReqId != null && message.hasOwnProperty("ReqId")) - if (!$util.isInteger(message.ReqId)) - return "ReqId: integer expected"; - return null; - }; - - /** - * Creates a CSThridAccountStatistic message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSThridAccountStatistic} CSThridAccountStatistic - */ - CSThridAccountStatistic.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSThridAccountStatistic) - return object; - var message = new $root.gamehall.CSThridAccountStatistic(); - if (object.ReqId != null) - message.ReqId = object.ReqId | 0; - return message; - }; - - /** - * Creates a plain object from a CSThridAccountStatistic message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {gamehall.CSThridAccountStatistic} message CSThridAccountStatistic - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSThridAccountStatistic.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.ReqId = 0; - if (message.ReqId != null && message.hasOwnProperty("ReqId")) - object.ReqId = message.ReqId; - return object; - }; - - /** - * Converts this CSThridAccountStatistic to JSON. - * @function toJSON - * @memberof gamehall.CSThridAccountStatistic - * @instance - * @returns {Object.} JSON object - */ - CSThridAccountStatistic.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSThridAccountStatistic - * @function getTypeUrl - * @memberof gamehall.CSThridAccountStatistic - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSThridAccountStatistic.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSThridAccountStatistic"; - }; - - return CSThridAccountStatistic; - })(); - - gamehall.ThridAccount = (function() { - - /** - * Properties of a ThridAccount. - * @memberof gamehall - * @interface IThridAccount - * @property {number|null} [ThridPlatformId] ThridAccount ThridPlatformId - * @property {string|null} [Name] ThridAccount Name - * @property {number|null} [Status] ThridAccount Status - * @property {number|Long|null} [Balance] ThridAccount Balance - */ - - /** - * Constructs a new ThridAccount. - * @memberof gamehall - * @classdesc Represents a ThridAccount. - * @implements IThridAccount - * @constructor - * @param {gamehall.IThridAccount=} [properties] Properties to set - */ - function ThridAccount(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * ThridAccount ThridPlatformId. - * @member {number} ThridPlatformId - * @memberof gamehall.ThridAccount - * @instance - */ - ThridAccount.prototype.ThridPlatformId = 0; - - /** - * ThridAccount Name. - * @member {string} Name - * @memberof gamehall.ThridAccount - * @instance - */ - ThridAccount.prototype.Name = ""; - - /** - * ThridAccount Status. - * @member {number} Status - * @memberof gamehall.ThridAccount - * @instance - */ - ThridAccount.prototype.Status = 0; - - /** - * ThridAccount Balance. - * @member {number|Long} Balance - * @memberof gamehall.ThridAccount - * @instance - */ - ThridAccount.prototype.Balance = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new ThridAccount instance using the specified properties. - * @function create - * @memberof gamehall.ThridAccount - * @static - * @param {gamehall.IThridAccount=} [properties] Properties to set - * @returns {gamehall.ThridAccount} ThridAccount instance - */ - ThridAccount.create = function create(properties) { - return new ThridAccount(properties); - }; - - /** - * Encodes the specified ThridAccount message. Does not implicitly {@link gamehall.ThridAccount.verify|verify} messages. - * @function encode - * @memberof gamehall.ThridAccount - * @static - * @param {gamehall.IThridAccount} message ThridAccount message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridAccount.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ThridPlatformId != null && Object.hasOwnProperty.call(message, "ThridPlatformId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ThridPlatformId); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Name); - if (message.Status != null && Object.hasOwnProperty.call(message, "Status")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Status); - if (message.Balance != null && Object.hasOwnProperty.call(message, "Balance")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.Balance); - return writer; - }; - - /** - * Encodes the specified ThridAccount message, length delimited. Does not implicitly {@link gamehall.ThridAccount.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.ThridAccount - * @static - * @param {gamehall.IThridAccount} message ThridAccount message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridAccount.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a ThridAccount message from the specified reader or buffer. - * @function decode - * @memberof gamehall.ThridAccount - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.ThridAccount} ThridAccount - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridAccount.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.ThridAccount(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ThridPlatformId = reader.int32(); - break; - } - case 2: { - message.Name = reader.string(); - break; - } - case 3: { - message.Status = reader.int32(); - break; - } - case 4: { - message.Balance = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a ThridAccount message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.ThridAccount - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.ThridAccount} ThridAccount - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridAccount.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a ThridAccount message. - * @function verify - * @memberof gamehall.ThridAccount - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ThridAccount.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ThridPlatformId != null && message.hasOwnProperty("ThridPlatformId")) - if (!$util.isInteger(message.ThridPlatformId)) - return "ThridPlatformId: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.Status != null && message.hasOwnProperty("Status")) - if (!$util.isInteger(message.Status)) - return "Status: integer expected"; - if (message.Balance != null && message.hasOwnProperty("Balance")) - if (!$util.isInteger(message.Balance) && !(message.Balance && $util.isInteger(message.Balance.low) && $util.isInteger(message.Balance.high))) - return "Balance: integer|Long expected"; - return null; - }; - - /** - * Creates a ThridAccount message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.ThridAccount - * @static - * @param {Object.} object Plain object - * @returns {gamehall.ThridAccount} ThridAccount - */ - ThridAccount.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.ThridAccount) - return object; - var message = new $root.gamehall.ThridAccount(); - if (object.ThridPlatformId != null) - message.ThridPlatformId = object.ThridPlatformId | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.Status != null) - message.Status = object.Status | 0; - if (object.Balance != null) - if ($util.Long) - (message.Balance = $util.Long.fromValue(object.Balance)).unsigned = false; - else if (typeof object.Balance === "string") - message.Balance = parseInt(object.Balance, 10); - else if (typeof object.Balance === "number") - message.Balance = object.Balance; - else if (typeof object.Balance === "object") - message.Balance = new $util.LongBits(object.Balance.low >>> 0, object.Balance.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a ThridAccount message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.ThridAccount - * @static - * @param {gamehall.ThridAccount} message ThridAccount - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ThridAccount.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ThridPlatformId = 0; - object.Name = ""; - object.Status = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Balance = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Balance = options.longs === String ? "0" : 0; - } - if (message.ThridPlatformId != null && message.hasOwnProperty("ThridPlatformId")) - object.ThridPlatformId = message.ThridPlatformId; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.Status != null && message.hasOwnProperty("Status")) - object.Status = message.Status; - if (message.Balance != null && message.hasOwnProperty("Balance")) - if (typeof message.Balance === "number") - object.Balance = options.longs === String ? String(message.Balance) : message.Balance; - else - object.Balance = options.longs === String ? $util.Long.prototype.toString.call(message.Balance) : options.longs === Number ? new $util.LongBits(message.Balance.low >>> 0, message.Balance.high >>> 0).toNumber() : message.Balance; - return object; - }; - - /** - * Converts this ThridAccount to JSON. - * @function toJSON - * @memberof gamehall.ThridAccount - * @instance - * @returns {Object.} JSON object - */ - ThridAccount.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for ThridAccount - * @function getTypeUrl - * @memberof gamehall.ThridAccount - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - ThridAccount.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.ThridAccount"; - }; - - return ThridAccount; - })(); - - gamehall.SCThridAccountStatistic = (function() { - - /** - * Properties of a SCThridAccountStatistic. - * @memberof gamehall - * @interface ISCThridAccountStatistic - * @property {number|null} [ReqId] SCThridAccountStatistic ReqId - * @property {Array.|null} [Accounts] SCThridAccountStatistic Accounts - */ - - /** - * Constructs a new SCThridAccountStatistic. - * @memberof gamehall - * @classdesc Represents a SCThridAccountStatistic. - * @implements ISCThridAccountStatistic - * @constructor - * @param {gamehall.ISCThridAccountStatistic=} [properties] Properties to set - */ - function SCThridAccountStatistic(properties) { - this.Accounts = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCThridAccountStatistic ReqId. - * @member {number} ReqId - * @memberof gamehall.SCThridAccountStatistic - * @instance - */ - SCThridAccountStatistic.prototype.ReqId = 0; - - /** - * SCThridAccountStatistic Accounts. - * @member {Array.} Accounts - * @memberof gamehall.SCThridAccountStatistic - * @instance - */ - SCThridAccountStatistic.prototype.Accounts = $util.emptyArray; - - /** - * Creates a new SCThridAccountStatistic instance using the specified properties. - * @function create - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {gamehall.ISCThridAccountStatistic=} [properties] Properties to set - * @returns {gamehall.SCThridAccountStatistic} SCThridAccountStatistic instance - */ - SCThridAccountStatistic.create = function create(properties) { - return new SCThridAccountStatistic(properties); - }; - - /** - * Encodes the specified SCThridAccountStatistic message. Does not implicitly {@link gamehall.SCThridAccountStatistic.verify|verify} messages. - * @function encode - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {gamehall.ISCThridAccountStatistic} message SCThridAccountStatistic message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridAccountStatistic.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ReqId != null && Object.hasOwnProperty.call(message, "ReqId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ReqId); - if (message.Accounts != null && message.Accounts.length) - for (var i = 0; i < message.Accounts.length; ++i) - $root.gamehall.ThridAccount.encode(message.Accounts[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCThridAccountStatistic message, length delimited. Does not implicitly {@link gamehall.SCThridAccountStatistic.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {gamehall.ISCThridAccountStatistic} message SCThridAccountStatistic message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridAccountStatistic.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCThridAccountStatistic message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCThridAccountStatistic} SCThridAccountStatistic - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridAccountStatistic.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCThridAccountStatistic(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ReqId = reader.int32(); - break; - } - case 2: { - if (!(message.Accounts && message.Accounts.length)) - message.Accounts = []; - message.Accounts.push($root.gamehall.ThridAccount.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCThridAccountStatistic message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCThridAccountStatistic} SCThridAccountStatistic - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridAccountStatistic.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCThridAccountStatistic message. - * @function verify - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCThridAccountStatistic.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ReqId != null && message.hasOwnProperty("ReqId")) - if (!$util.isInteger(message.ReqId)) - return "ReqId: integer expected"; - if (message.Accounts != null && message.hasOwnProperty("Accounts")) { - if (!Array.isArray(message.Accounts)) - return "Accounts: array expected"; - for (var i = 0; i < message.Accounts.length; ++i) { - var error = $root.gamehall.ThridAccount.verify(message.Accounts[i]); - if (error) - return "Accounts." + error; - } - } - return null; - }; - - /** - * Creates a SCThridAccountStatistic message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCThridAccountStatistic} SCThridAccountStatistic - */ - SCThridAccountStatistic.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCThridAccountStatistic) - return object; - var message = new $root.gamehall.SCThridAccountStatistic(); - if (object.ReqId != null) - message.ReqId = object.ReqId | 0; - if (object.Accounts) { - if (!Array.isArray(object.Accounts)) - throw TypeError(".gamehall.SCThridAccountStatistic.Accounts: array expected"); - message.Accounts = []; - for (var i = 0; i < object.Accounts.length; ++i) { - if (typeof object.Accounts[i] !== "object") - throw TypeError(".gamehall.SCThridAccountStatistic.Accounts: object expected"); - message.Accounts[i] = $root.gamehall.ThridAccount.fromObject(object.Accounts[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCThridAccountStatistic message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {gamehall.SCThridAccountStatistic} message SCThridAccountStatistic - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCThridAccountStatistic.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Accounts = []; - if (options.defaults) - object.ReqId = 0; - if (message.ReqId != null && message.hasOwnProperty("ReqId")) - object.ReqId = message.ReqId; - if (message.Accounts && message.Accounts.length) { - object.Accounts = []; - for (var j = 0; j < message.Accounts.length; ++j) - object.Accounts[j] = $root.gamehall.ThridAccount.toObject(message.Accounts[j], options); - } - return object; - }; - - /** - * Converts this SCThridAccountStatistic to JSON. - * @function toJSON - * @memberof gamehall.SCThridAccountStatistic - * @instance - * @returns {Object.} JSON object - */ - SCThridAccountStatistic.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCThridAccountStatistic - * @function getTypeUrl - * @memberof gamehall.SCThridAccountStatistic - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCThridAccountStatistic.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCThridAccountStatistic"; - }; - - return SCThridAccountStatistic; - })(); - - gamehall.CSThridAccountTransfer = (function() { - - /** - * Properties of a CSThridAccountTransfer. - * @memberof gamehall - * @interface ICSThridAccountTransfer - * @property {number|null} [FromId] CSThridAccountTransfer FromId - * @property {number|null} [ToId] CSThridAccountTransfer ToId - * @property {number|Long|null} [Amount] CSThridAccountTransfer Amount - */ - - /** - * Constructs a new CSThridAccountTransfer. - * @memberof gamehall - * @classdesc Represents a CSThridAccountTransfer. - * @implements ICSThridAccountTransfer - * @constructor - * @param {gamehall.ICSThridAccountTransfer=} [properties] Properties to set - */ - function CSThridAccountTransfer(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSThridAccountTransfer FromId. - * @member {number} FromId - * @memberof gamehall.CSThridAccountTransfer - * @instance - */ - CSThridAccountTransfer.prototype.FromId = 0; - - /** - * CSThridAccountTransfer ToId. - * @member {number} ToId - * @memberof gamehall.CSThridAccountTransfer - * @instance - */ - CSThridAccountTransfer.prototype.ToId = 0; - - /** - * CSThridAccountTransfer Amount. - * @member {number|Long} Amount - * @memberof gamehall.CSThridAccountTransfer - * @instance - */ - CSThridAccountTransfer.prototype.Amount = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new CSThridAccountTransfer instance using the specified properties. - * @function create - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {gamehall.ICSThridAccountTransfer=} [properties] Properties to set - * @returns {gamehall.CSThridAccountTransfer} CSThridAccountTransfer instance - */ - CSThridAccountTransfer.create = function create(properties) { - return new CSThridAccountTransfer(properties); - }; - - /** - * Encodes the specified CSThridAccountTransfer message. Does not implicitly {@link gamehall.CSThridAccountTransfer.verify|verify} messages. - * @function encode - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {gamehall.ICSThridAccountTransfer} message CSThridAccountTransfer message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridAccountTransfer.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.FromId != null && Object.hasOwnProperty.call(message, "FromId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.FromId); - if (message.ToId != null && Object.hasOwnProperty.call(message, "ToId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.ToId); - if (message.Amount != null && Object.hasOwnProperty.call(message, "Amount")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Amount); - return writer; - }; - - /** - * Encodes the specified CSThridAccountTransfer message, length delimited. Does not implicitly {@link gamehall.CSThridAccountTransfer.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {gamehall.ICSThridAccountTransfer} message CSThridAccountTransfer message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridAccountTransfer.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSThridAccountTransfer message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSThridAccountTransfer} CSThridAccountTransfer - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridAccountTransfer.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSThridAccountTransfer(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.FromId = reader.int32(); - break; - } - case 2: { - message.ToId = reader.int32(); - break; - } - case 3: { - message.Amount = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSThridAccountTransfer message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSThridAccountTransfer} CSThridAccountTransfer - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridAccountTransfer.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSThridAccountTransfer message. - * @function verify - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSThridAccountTransfer.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.FromId != null && message.hasOwnProperty("FromId")) - if (!$util.isInteger(message.FromId)) - return "FromId: integer expected"; - if (message.ToId != null && message.hasOwnProperty("ToId")) - if (!$util.isInteger(message.ToId)) - return "ToId: integer expected"; - if (message.Amount != null && message.hasOwnProperty("Amount")) - if (!$util.isInteger(message.Amount) && !(message.Amount && $util.isInteger(message.Amount.low) && $util.isInteger(message.Amount.high))) - return "Amount: integer|Long expected"; - return null; - }; - - /** - * Creates a CSThridAccountTransfer message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSThridAccountTransfer} CSThridAccountTransfer - */ - CSThridAccountTransfer.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSThridAccountTransfer) - return object; - var message = new $root.gamehall.CSThridAccountTransfer(); - if (object.FromId != null) - message.FromId = object.FromId | 0; - if (object.ToId != null) - message.ToId = object.ToId | 0; - if (object.Amount != null) - if ($util.Long) - (message.Amount = $util.Long.fromValue(object.Amount)).unsigned = false; - else if (typeof object.Amount === "string") - message.Amount = parseInt(object.Amount, 10); - else if (typeof object.Amount === "number") - message.Amount = object.Amount; - else if (typeof object.Amount === "object") - message.Amount = new $util.LongBits(object.Amount.low >>> 0, object.Amount.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a CSThridAccountTransfer message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {gamehall.CSThridAccountTransfer} message CSThridAccountTransfer - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSThridAccountTransfer.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.FromId = 0; - object.ToId = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Amount = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Amount = options.longs === String ? "0" : 0; - } - if (message.FromId != null && message.hasOwnProperty("FromId")) - object.FromId = message.FromId; - if (message.ToId != null && message.hasOwnProperty("ToId")) - object.ToId = message.ToId; - if (message.Amount != null && message.hasOwnProperty("Amount")) - if (typeof message.Amount === "number") - object.Amount = options.longs === String ? String(message.Amount) : message.Amount; - else - object.Amount = options.longs === String ? $util.Long.prototype.toString.call(message.Amount) : options.longs === Number ? new $util.LongBits(message.Amount.low >>> 0, message.Amount.high >>> 0).toNumber() : message.Amount; - return object; - }; - - /** - * Converts this CSThridAccountTransfer to JSON. - * @function toJSON - * @memberof gamehall.CSThridAccountTransfer - * @instance - * @returns {Object.} JSON object - */ - CSThridAccountTransfer.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSThridAccountTransfer - * @function getTypeUrl - * @memberof gamehall.CSThridAccountTransfer - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSThridAccountTransfer.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSThridAccountTransfer"; - }; - - return CSThridAccountTransfer; - })(); - - gamehall.SCThridAccountTransfer = (function() { - - /** - * Properties of a SCThridAccountTransfer. - * @memberof gamehall - * @interface ISCThridAccountTransfer - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCThridAccountTransfer OpRetCode - * @property {Array.|null} [Accounts] SCThridAccountTransfer Accounts - */ - - /** - * Constructs a new SCThridAccountTransfer. - * @memberof gamehall - * @classdesc Represents a SCThridAccountTransfer. - * @implements ISCThridAccountTransfer - * @constructor - * @param {gamehall.ISCThridAccountTransfer=} [properties] Properties to set - */ - function SCThridAccountTransfer(properties) { - this.Accounts = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCThridAccountTransfer OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCThridAccountTransfer - * @instance - */ - SCThridAccountTransfer.prototype.OpRetCode = 0; - - /** - * SCThridAccountTransfer Accounts. - * @member {Array.} Accounts - * @memberof gamehall.SCThridAccountTransfer - * @instance - */ - SCThridAccountTransfer.prototype.Accounts = $util.emptyArray; - - /** - * Creates a new SCThridAccountTransfer instance using the specified properties. - * @function create - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {gamehall.ISCThridAccountTransfer=} [properties] Properties to set - * @returns {gamehall.SCThridAccountTransfer} SCThridAccountTransfer instance - */ - SCThridAccountTransfer.create = function create(properties) { - return new SCThridAccountTransfer(properties); - }; - - /** - * Encodes the specified SCThridAccountTransfer message. Does not implicitly {@link gamehall.SCThridAccountTransfer.verify|verify} messages. - * @function encode - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {gamehall.ISCThridAccountTransfer} message SCThridAccountTransfer message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridAccountTransfer.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.Accounts != null && message.Accounts.length) - for (var i = 0; i < message.Accounts.length; ++i) - $root.gamehall.ThridAccount.encode(message.Accounts[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCThridAccountTransfer message, length delimited. Does not implicitly {@link gamehall.SCThridAccountTransfer.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {gamehall.ISCThridAccountTransfer} message SCThridAccountTransfer message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridAccountTransfer.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCThridAccountTransfer message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCThridAccountTransfer} SCThridAccountTransfer - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridAccountTransfer.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCThridAccountTransfer(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - if (!(message.Accounts && message.Accounts.length)) - message.Accounts = []; - message.Accounts.push($root.gamehall.ThridAccount.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCThridAccountTransfer message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCThridAccountTransfer} SCThridAccountTransfer - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridAccountTransfer.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCThridAccountTransfer message. - * @function verify - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCThridAccountTransfer.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.Accounts != null && message.hasOwnProperty("Accounts")) { - if (!Array.isArray(message.Accounts)) - return "Accounts: array expected"; - for (var i = 0; i < message.Accounts.length; ++i) { - var error = $root.gamehall.ThridAccount.verify(message.Accounts[i]); - if (error) - return "Accounts." + error; - } - } - return null; - }; - - /** - * Creates a SCThridAccountTransfer message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCThridAccountTransfer} SCThridAccountTransfer - */ - SCThridAccountTransfer.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCThridAccountTransfer) - return object; - var message = new $root.gamehall.SCThridAccountTransfer(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.Accounts) { - if (!Array.isArray(object.Accounts)) - throw TypeError(".gamehall.SCThridAccountTransfer.Accounts: array expected"); - message.Accounts = []; - for (var i = 0; i < object.Accounts.length; ++i) { - if (typeof object.Accounts[i] !== "object") - throw TypeError(".gamehall.SCThridAccountTransfer.Accounts: object expected"); - message.Accounts[i] = $root.gamehall.ThridAccount.fromObject(object.Accounts[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCThridAccountTransfer message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {gamehall.SCThridAccountTransfer} message SCThridAccountTransfer - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCThridAccountTransfer.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Accounts = []; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.Accounts && message.Accounts.length) { - object.Accounts = []; - for (var j = 0; j < message.Accounts.length; ++j) - object.Accounts[j] = $root.gamehall.ThridAccount.toObject(message.Accounts[j], options); - } - return object; - }; - - /** - * Converts this SCThridAccountTransfer to JSON. - * @function toJSON - * @memberof gamehall.SCThridAccountTransfer - * @instance - * @returns {Object.} JSON object - */ - SCThridAccountTransfer.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCThridAccountTransfer - * @function getTypeUrl - * @memberof gamehall.SCThridAccountTransfer - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCThridAccountTransfer.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCThridAccountTransfer"; - }; - - return SCThridAccountTransfer; - })(); - - gamehall.CSEnterThridGame = (function() { - - /** - * Properties of a CSEnterThridGame. - * @memberof gamehall - * @interface ICSEnterThridGame - * @property {number|null} [ThridGameId] CSEnterThridGame ThridGameId - */ - - /** - * Constructs a new CSEnterThridGame. - * @memberof gamehall - * @classdesc Represents a CSEnterThridGame. - * @implements ICSEnterThridGame - * @constructor - * @param {gamehall.ICSEnterThridGame=} [properties] Properties to set - */ - function CSEnterThridGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSEnterThridGame ThridGameId. - * @member {number} ThridGameId - * @memberof gamehall.CSEnterThridGame - * @instance - */ - CSEnterThridGame.prototype.ThridGameId = 0; - - /** - * Creates a new CSEnterThridGame instance using the specified properties. - * @function create - * @memberof gamehall.CSEnterThridGame - * @static - * @param {gamehall.ICSEnterThridGame=} [properties] Properties to set - * @returns {gamehall.CSEnterThridGame} CSEnterThridGame instance - */ - CSEnterThridGame.create = function create(properties) { - return new CSEnterThridGame(properties); - }; - - /** - * Encodes the specified CSEnterThridGame message. Does not implicitly {@link gamehall.CSEnterThridGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSEnterThridGame - * @static - * @param {gamehall.ICSEnterThridGame} message CSEnterThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterThridGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ThridGameId != null && Object.hasOwnProperty.call(message, "ThridGameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.ThridGameId); - return writer; - }; - - /** - * Encodes the specified CSEnterThridGame message, length delimited. Does not implicitly {@link gamehall.CSEnterThridGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSEnterThridGame - * @static - * @param {gamehall.ICSEnterThridGame} message CSEnterThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterThridGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSEnterThridGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSEnterThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSEnterThridGame} CSEnterThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterThridGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSEnterThridGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 2: { - message.ThridGameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSEnterThridGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSEnterThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSEnterThridGame} CSEnterThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterThridGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSEnterThridGame message. - * @function verify - * @memberof gamehall.CSEnterThridGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSEnterThridGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - if (!$util.isInteger(message.ThridGameId)) - return "ThridGameId: integer expected"; - return null; - }; - - /** - * Creates a CSEnterThridGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSEnterThridGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSEnterThridGame} CSEnterThridGame - */ - CSEnterThridGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSEnterThridGame) - return object; - var message = new $root.gamehall.CSEnterThridGame(); - if (object.ThridGameId != null) - message.ThridGameId = object.ThridGameId | 0; - return message; - }; - - /** - * Creates a plain object from a CSEnterThridGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSEnterThridGame - * @static - * @param {gamehall.CSEnterThridGame} message CSEnterThridGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSEnterThridGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.ThridGameId = 0; - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - object.ThridGameId = message.ThridGameId; - return object; - }; - - /** - * Converts this CSEnterThridGame to JSON. - * @function toJSON - * @memberof gamehall.CSEnterThridGame - * @instance - * @returns {Object.} JSON object - */ - CSEnterThridGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSEnterThridGame - * @function getTypeUrl - * @memberof gamehall.CSEnterThridGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSEnterThridGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSEnterThridGame"; - }; - - return CSEnterThridGame; - })(); - - gamehall.SCEnterThridGame = (function() { - - /** - * Properties of a SCEnterThridGame. - * @memberof gamehall - * @interface ISCEnterThridGame - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCEnterThridGame OpRetCode - * @property {string|null} [EnterUrl] SCEnterThridGame EnterUrl - * @property {number|null} [ScreenOrientationType] SCEnterThridGame ScreenOrientationType - * @property {number|null} [ThridGameId] SCEnterThridGame ThridGameId - */ - - /** - * Constructs a new SCEnterThridGame. - * @memberof gamehall - * @classdesc Represents a SCEnterThridGame. - * @implements ISCEnterThridGame - * @constructor - * @param {gamehall.ISCEnterThridGame=} [properties] Properties to set - */ - function SCEnterThridGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCEnterThridGame OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCEnterThridGame - * @instance - */ - SCEnterThridGame.prototype.OpRetCode = 0; - - /** - * SCEnterThridGame EnterUrl. - * @member {string} EnterUrl - * @memberof gamehall.SCEnterThridGame - * @instance - */ - SCEnterThridGame.prototype.EnterUrl = ""; - - /** - * SCEnterThridGame ScreenOrientationType. - * @member {number} ScreenOrientationType - * @memberof gamehall.SCEnterThridGame - * @instance - */ - SCEnterThridGame.prototype.ScreenOrientationType = 0; - - /** - * SCEnterThridGame ThridGameId. - * @member {number} ThridGameId - * @memberof gamehall.SCEnterThridGame - * @instance - */ - SCEnterThridGame.prototype.ThridGameId = 0; - - /** - * Creates a new SCEnterThridGame instance using the specified properties. - * @function create - * @memberof gamehall.SCEnterThridGame - * @static - * @param {gamehall.ISCEnterThridGame=} [properties] Properties to set - * @returns {gamehall.SCEnterThridGame} SCEnterThridGame instance - */ - SCEnterThridGame.create = function create(properties) { - return new SCEnterThridGame(properties); - }; - - /** - * Encodes the specified SCEnterThridGame message. Does not implicitly {@link gamehall.SCEnterThridGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCEnterThridGame - * @static - * @param {gamehall.ISCEnterThridGame} message SCEnterThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterThridGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.EnterUrl != null && Object.hasOwnProperty.call(message, "EnterUrl")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.EnterUrl); - if (message.ScreenOrientationType != null && Object.hasOwnProperty.call(message, "ScreenOrientationType")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.ScreenOrientationType); - if (message.ThridGameId != null && Object.hasOwnProperty.call(message, "ThridGameId")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.ThridGameId); - return writer; - }; - - /** - * Encodes the specified SCEnterThridGame message, length delimited. Does not implicitly {@link gamehall.SCEnterThridGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCEnterThridGame - * @static - * @param {gamehall.ISCEnterThridGame} message SCEnterThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterThridGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCEnterThridGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCEnterThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCEnterThridGame} SCEnterThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterThridGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCEnterThridGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.EnterUrl = reader.string(); - break; - } - case 3: { - message.ScreenOrientationType = reader.int32(); - break; - } - case 4: { - message.ThridGameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCEnterThridGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCEnterThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCEnterThridGame} SCEnterThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterThridGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCEnterThridGame message. - * @function verify - * @memberof gamehall.SCEnterThridGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCEnterThridGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.EnterUrl != null && message.hasOwnProperty("EnterUrl")) - if (!$util.isString(message.EnterUrl)) - return "EnterUrl: string expected"; - if (message.ScreenOrientationType != null && message.hasOwnProperty("ScreenOrientationType")) - if (!$util.isInteger(message.ScreenOrientationType)) - return "ScreenOrientationType: integer expected"; - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - if (!$util.isInteger(message.ThridGameId)) - return "ThridGameId: integer expected"; - return null; - }; - - /** - * Creates a SCEnterThridGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCEnterThridGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCEnterThridGame} SCEnterThridGame - */ - SCEnterThridGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCEnterThridGame) - return object; - var message = new $root.gamehall.SCEnterThridGame(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.EnterUrl != null) - message.EnterUrl = String(object.EnterUrl); - if (object.ScreenOrientationType != null) - message.ScreenOrientationType = object.ScreenOrientationType | 0; - if (object.ThridGameId != null) - message.ThridGameId = object.ThridGameId | 0; - return message; - }; - - /** - * Creates a plain object from a SCEnterThridGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCEnterThridGame - * @static - * @param {gamehall.SCEnterThridGame} message SCEnterThridGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCEnterThridGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.EnterUrl = ""; - object.ScreenOrientationType = 0; - object.ThridGameId = 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.EnterUrl != null && message.hasOwnProperty("EnterUrl")) - object.EnterUrl = message.EnterUrl; - if (message.ScreenOrientationType != null && message.hasOwnProperty("ScreenOrientationType")) - object.ScreenOrientationType = message.ScreenOrientationType; - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - object.ThridGameId = message.ThridGameId; - return object; - }; - - /** - * Converts this SCEnterThridGame to JSON. - * @function toJSON - * @memberof gamehall.SCEnterThridGame - * @instance - * @returns {Object.} JSON object - */ - SCEnterThridGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCEnterThridGame - * @function getTypeUrl - * @memberof gamehall.SCEnterThridGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCEnterThridGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCEnterThridGame"; - }; - - return SCEnterThridGame; - })(); - - gamehall.CSLeaveThridGame = (function() { - - /** - * Properties of a CSLeaveThridGame. - * @memberof gamehall - * @interface ICSLeaveThridGame - */ - - /** - * Constructs a new CSLeaveThridGame. - * @memberof gamehall - * @classdesc Represents a CSLeaveThridGame. - * @implements ICSLeaveThridGame - * @constructor - * @param {gamehall.ICSLeaveThridGame=} [properties] Properties to set - */ - function CSLeaveThridGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSLeaveThridGame instance using the specified properties. - * @function create - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {gamehall.ICSLeaveThridGame=} [properties] Properties to set - * @returns {gamehall.CSLeaveThridGame} CSLeaveThridGame instance - */ - CSLeaveThridGame.create = function create(properties) { - return new CSLeaveThridGame(properties); - }; - - /** - * Encodes the specified CSLeaveThridGame message. Does not implicitly {@link gamehall.CSLeaveThridGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {gamehall.ICSLeaveThridGame} message CSLeaveThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveThridGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSLeaveThridGame message, length delimited. Does not implicitly {@link gamehall.CSLeaveThridGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {gamehall.ICSLeaveThridGame} message CSLeaveThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLeaveThridGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSLeaveThridGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSLeaveThridGame} CSLeaveThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveThridGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSLeaveThridGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSLeaveThridGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSLeaveThridGame} CSLeaveThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLeaveThridGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSLeaveThridGame message. - * @function verify - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSLeaveThridGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSLeaveThridGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSLeaveThridGame} CSLeaveThridGame - */ - CSLeaveThridGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSLeaveThridGame) - return object; - return new $root.gamehall.CSLeaveThridGame(); - }; - - /** - * Creates a plain object from a CSLeaveThridGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {gamehall.CSLeaveThridGame} message CSLeaveThridGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSLeaveThridGame.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSLeaveThridGame to JSON. - * @function toJSON - * @memberof gamehall.CSLeaveThridGame - * @instance - * @returns {Object.} JSON object - */ - CSLeaveThridGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSLeaveThridGame - * @function getTypeUrl - * @memberof gamehall.CSLeaveThridGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSLeaveThridGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSLeaveThridGame"; - }; - - return CSLeaveThridGame; - })(); - - gamehall.SCLeaveThridGame = (function() { - - /** - * Properties of a SCLeaveThridGame. - * @memberof gamehall - * @interface ISCLeaveThridGame - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCLeaveThridGame OpRetCode - */ - - /** - * Constructs a new SCLeaveThridGame. - * @memberof gamehall - * @classdesc Represents a SCLeaveThridGame. - * @implements ISCLeaveThridGame - * @constructor - * @param {gamehall.ISCLeaveThridGame=} [properties] Properties to set - */ - function SCLeaveThridGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLeaveThridGame OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCLeaveThridGame - * @instance - */ - SCLeaveThridGame.prototype.OpRetCode = 0; - - /** - * Creates a new SCLeaveThridGame instance using the specified properties. - * @function create - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {gamehall.ISCLeaveThridGame=} [properties] Properties to set - * @returns {gamehall.SCLeaveThridGame} SCLeaveThridGame instance - */ - SCLeaveThridGame.create = function create(properties) { - return new SCLeaveThridGame(properties); - }; - - /** - * Encodes the specified SCLeaveThridGame message. Does not implicitly {@link gamehall.SCLeaveThridGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {gamehall.ISCLeaveThridGame} message SCLeaveThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveThridGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCLeaveThridGame message, length delimited. Does not implicitly {@link gamehall.SCLeaveThridGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {gamehall.ISCLeaveThridGame} message SCLeaveThridGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLeaveThridGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLeaveThridGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLeaveThridGame} SCLeaveThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveThridGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLeaveThridGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLeaveThridGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLeaveThridGame} SCLeaveThridGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLeaveThridGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLeaveThridGame message. - * @function verify - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLeaveThridGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCLeaveThridGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLeaveThridGame} SCLeaveThridGame - */ - SCLeaveThridGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLeaveThridGame) - return object; - var message = new $root.gamehall.SCLeaveThridGame(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCLeaveThridGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {gamehall.SCLeaveThridGame} message SCLeaveThridGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLeaveThridGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCLeaveThridGame to JSON. - * @function toJSON - * @memberof gamehall.SCLeaveThridGame - * @instance - * @returns {Object.} JSON object - */ - SCLeaveThridGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLeaveThridGame - * @function getTypeUrl - * @memberof gamehall.SCLeaveThridGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLeaveThridGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLeaveThridGame"; - }; - - return SCLeaveThridGame; - })(); - - gamehall.CSThridGameList = (function() { - - /** - * Properties of a CSThridGameList. - * @memberof gamehall - * @interface ICSThridGameList - */ - - /** - * Constructs a new CSThridGameList. - * @memberof gamehall - * @classdesc Represents a CSThridGameList. - * @implements ICSThridGameList - * @constructor - * @param {gamehall.ICSThridGameList=} [properties] Properties to set - */ - function CSThridGameList(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSThridGameList instance using the specified properties. - * @function create - * @memberof gamehall.CSThridGameList - * @static - * @param {gamehall.ICSThridGameList=} [properties] Properties to set - * @returns {gamehall.CSThridGameList} CSThridGameList instance - */ - CSThridGameList.create = function create(properties) { - return new CSThridGameList(properties); - }; - - /** - * Encodes the specified CSThridGameList message. Does not implicitly {@link gamehall.CSThridGameList.verify|verify} messages. - * @function encode - * @memberof gamehall.CSThridGameList - * @static - * @param {gamehall.ICSThridGameList} message CSThridGameList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridGameList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSThridGameList message, length delimited. Does not implicitly {@link gamehall.CSThridGameList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSThridGameList - * @static - * @param {gamehall.ICSThridGameList} message CSThridGameList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridGameList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSThridGameList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSThridGameList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSThridGameList} CSThridGameList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridGameList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSThridGameList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSThridGameList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSThridGameList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSThridGameList} CSThridGameList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridGameList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSThridGameList message. - * @function verify - * @memberof gamehall.CSThridGameList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSThridGameList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSThridGameList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSThridGameList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSThridGameList} CSThridGameList - */ - CSThridGameList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSThridGameList) - return object; - return new $root.gamehall.CSThridGameList(); - }; - - /** - * Creates a plain object from a CSThridGameList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSThridGameList - * @static - * @param {gamehall.CSThridGameList} message CSThridGameList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSThridGameList.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSThridGameList to JSON. - * @function toJSON - * @memberof gamehall.CSThridGameList - * @instance - * @returns {Object.} JSON object - */ - CSThridGameList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSThridGameList - * @function getTypeUrl - * @memberof gamehall.CSThridGameList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSThridGameList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSThridGameList"; - }; - - return CSThridGameList; - })(); - - gamehall.ThridGameDatas = (function() { - - /** - * Properties of a ThridGameDatas. - * @memberof gamehall - * @interface IThridGameDatas - * @property {string|null} [ThridGameId] ThridGameDatas ThridGameId - * @property {string|null} [ThridGameName] ThridGameDatas ThridGameName - */ - - /** - * Constructs a new ThridGameDatas. - * @memberof gamehall - * @classdesc Represents a ThridGameDatas. - * @implements IThridGameDatas - * @constructor - * @param {gamehall.IThridGameDatas=} [properties] Properties to set - */ - function ThridGameDatas(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * ThridGameDatas ThridGameId. - * @member {string} ThridGameId - * @memberof gamehall.ThridGameDatas - * @instance - */ - ThridGameDatas.prototype.ThridGameId = ""; - - /** - * ThridGameDatas ThridGameName. - * @member {string} ThridGameName - * @memberof gamehall.ThridGameDatas - * @instance - */ - ThridGameDatas.prototype.ThridGameName = ""; - - /** - * Creates a new ThridGameDatas instance using the specified properties. - * @function create - * @memberof gamehall.ThridGameDatas - * @static - * @param {gamehall.IThridGameDatas=} [properties] Properties to set - * @returns {gamehall.ThridGameDatas} ThridGameDatas instance - */ - ThridGameDatas.create = function create(properties) { - return new ThridGameDatas(properties); - }; - - /** - * Encodes the specified ThridGameDatas message. Does not implicitly {@link gamehall.ThridGameDatas.verify|verify} messages. - * @function encode - * @memberof gamehall.ThridGameDatas - * @static - * @param {gamehall.IThridGameDatas} message ThridGameDatas message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridGameDatas.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ThridGameId != null && Object.hasOwnProperty.call(message, "ThridGameId")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.ThridGameId); - if (message.ThridGameName != null && Object.hasOwnProperty.call(message, "ThridGameName")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.ThridGameName); - return writer; - }; - - /** - * Encodes the specified ThridGameDatas message, length delimited. Does not implicitly {@link gamehall.ThridGameDatas.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.ThridGameDatas - * @static - * @param {gamehall.IThridGameDatas} message ThridGameDatas message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridGameDatas.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a ThridGameDatas message from the specified reader or buffer. - * @function decode - * @memberof gamehall.ThridGameDatas - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.ThridGameDatas} ThridGameDatas - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridGameDatas.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.ThridGameDatas(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ThridGameId = reader.string(); - break; - } - case 2: { - message.ThridGameName = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a ThridGameDatas message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.ThridGameDatas - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.ThridGameDatas} ThridGameDatas - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridGameDatas.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a ThridGameDatas message. - * @function verify - * @memberof gamehall.ThridGameDatas - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ThridGameDatas.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - if (!$util.isString(message.ThridGameId)) - return "ThridGameId: string expected"; - if (message.ThridGameName != null && message.hasOwnProperty("ThridGameName")) - if (!$util.isString(message.ThridGameName)) - return "ThridGameName: string expected"; - return null; - }; - - /** - * Creates a ThridGameDatas message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.ThridGameDatas - * @static - * @param {Object.} object Plain object - * @returns {gamehall.ThridGameDatas} ThridGameDatas - */ - ThridGameDatas.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.ThridGameDatas) - return object; - var message = new $root.gamehall.ThridGameDatas(); - if (object.ThridGameId != null) - message.ThridGameId = String(object.ThridGameId); - if (object.ThridGameName != null) - message.ThridGameName = String(object.ThridGameName); - return message; - }; - - /** - * Creates a plain object from a ThridGameDatas message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.ThridGameDatas - * @static - * @param {gamehall.ThridGameDatas} message ThridGameDatas - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ThridGameDatas.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ThridGameId = ""; - object.ThridGameName = ""; - } - if (message.ThridGameId != null && message.hasOwnProperty("ThridGameId")) - object.ThridGameId = message.ThridGameId; - if (message.ThridGameName != null && message.hasOwnProperty("ThridGameName")) - object.ThridGameName = message.ThridGameName; - return object; - }; - - /** - * Converts this ThridGameDatas to JSON. - * @function toJSON - * @memberof gamehall.ThridGameDatas - * @instance - * @returns {Object.} JSON object - */ - ThridGameDatas.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for ThridGameDatas - * @function getTypeUrl - * @memberof gamehall.ThridGameDatas - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - ThridGameDatas.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.ThridGameDatas"; - }; - - return ThridGameDatas; - })(); - - gamehall.ThridGamePlatforms = (function() { - - /** - * Properties of a ThridGamePlatforms. - * @memberof gamehall - * @interface IThridGamePlatforms - * @property {number|null} [ThridPlatformId] ThridGamePlatforms ThridPlatformId - * @property {string|null} [ThridPlatformName] ThridGamePlatforms ThridPlatformName - * @property {Array.|null} [GameDatas] ThridGamePlatforms GameDatas - */ - - /** - * Constructs a new ThridGamePlatforms. - * @memberof gamehall - * @classdesc Represents a ThridGamePlatforms. - * @implements IThridGamePlatforms - * @constructor - * @param {gamehall.IThridGamePlatforms=} [properties] Properties to set - */ - function ThridGamePlatforms(properties) { - this.GameDatas = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * ThridGamePlatforms ThridPlatformId. - * @member {number} ThridPlatformId - * @memberof gamehall.ThridGamePlatforms - * @instance - */ - ThridGamePlatforms.prototype.ThridPlatformId = 0; - - /** - * ThridGamePlatforms ThridPlatformName. - * @member {string} ThridPlatformName - * @memberof gamehall.ThridGamePlatforms - * @instance - */ - ThridGamePlatforms.prototype.ThridPlatformName = ""; - - /** - * ThridGamePlatforms GameDatas. - * @member {Array.} GameDatas - * @memberof gamehall.ThridGamePlatforms - * @instance - */ - ThridGamePlatforms.prototype.GameDatas = $util.emptyArray; - - /** - * Creates a new ThridGamePlatforms instance using the specified properties. - * @function create - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {gamehall.IThridGamePlatforms=} [properties] Properties to set - * @returns {gamehall.ThridGamePlatforms} ThridGamePlatforms instance - */ - ThridGamePlatforms.create = function create(properties) { - return new ThridGamePlatforms(properties); - }; - - /** - * Encodes the specified ThridGamePlatforms message. Does not implicitly {@link gamehall.ThridGamePlatforms.verify|verify} messages. - * @function encode - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {gamehall.IThridGamePlatforms} message ThridGamePlatforms message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridGamePlatforms.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ThridPlatformId != null && Object.hasOwnProperty.call(message, "ThridPlatformId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ThridPlatformId); - if (message.ThridPlatformName != null && Object.hasOwnProperty.call(message, "ThridPlatformName")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.ThridPlatformName); - if (message.GameDatas != null && message.GameDatas.length) - for (var i = 0; i < message.GameDatas.length; ++i) - $root.gamehall.ThridGameDatas.encode(message.GameDatas[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified ThridGamePlatforms message, length delimited. Does not implicitly {@link gamehall.ThridGamePlatforms.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {gamehall.IThridGamePlatforms} message ThridGamePlatforms message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ThridGamePlatforms.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a ThridGamePlatforms message from the specified reader or buffer. - * @function decode - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.ThridGamePlatforms} ThridGamePlatforms - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridGamePlatforms.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.ThridGamePlatforms(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ThridPlatformId = reader.int32(); - break; - } - case 2: { - message.ThridPlatformName = reader.string(); - break; - } - case 3: { - if (!(message.GameDatas && message.GameDatas.length)) - message.GameDatas = []; - message.GameDatas.push($root.gamehall.ThridGameDatas.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a ThridGamePlatforms message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.ThridGamePlatforms} ThridGamePlatforms - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ThridGamePlatforms.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a ThridGamePlatforms message. - * @function verify - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ThridGamePlatforms.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ThridPlatformId != null && message.hasOwnProperty("ThridPlatformId")) - if (!$util.isInteger(message.ThridPlatformId)) - return "ThridPlatformId: integer expected"; - if (message.ThridPlatformName != null && message.hasOwnProperty("ThridPlatformName")) - if (!$util.isString(message.ThridPlatformName)) - return "ThridPlatformName: string expected"; - if (message.GameDatas != null && message.hasOwnProperty("GameDatas")) { - if (!Array.isArray(message.GameDatas)) - return "GameDatas: array expected"; - for (var i = 0; i < message.GameDatas.length; ++i) { - var error = $root.gamehall.ThridGameDatas.verify(message.GameDatas[i]); - if (error) - return "GameDatas." + error; - } - } - return null; - }; - - /** - * Creates a ThridGamePlatforms message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {Object.} object Plain object - * @returns {gamehall.ThridGamePlatforms} ThridGamePlatforms - */ - ThridGamePlatforms.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.ThridGamePlatforms) - return object; - var message = new $root.gamehall.ThridGamePlatforms(); - if (object.ThridPlatformId != null) - message.ThridPlatformId = object.ThridPlatformId | 0; - if (object.ThridPlatformName != null) - message.ThridPlatformName = String(object.ThridPlatformName); - if (object.GameDatas) { - if (!Array.isArray(object.GameDatas)) - throw TypeError(".gamehall.ThridGamePlatforms.GameDatas: array expected"); - message.GameDatas = []; - for (var i = 0; i < object.GameDatas.length; ++i) { - if (typeof object.GameDatas[i] !== "object") - throw TypeError(".gamehall.ThridGamePlatforms.GameDatas: object expected"); - message.GameDatas[i] = $root.gamehall.ThridGameDatas.fromObject(object.GameDatas[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a ThridGamePlatforms message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {gamehall.ThridGamePlatforms} message ThridGamePlatforms - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ThridGamePlatforms.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameDatas = []; - if (options.defaults) { - object.ThridPlatformId = 0; - object.ThridPlatformName = ""; - } - if (message.ThridPlatformId != null && message.hasOwnProperty("ThridPlatformId")) - object.ThridPlatformId = message.ThridPlatformId; - if (message.ThridPlatformName != null && message.hasOwnProperty("ThridPlatformName")) - object.ThridPlatformName = message.ThridPlatformName; - if (message.GameDatas && message.GameDatas.length) { - object.GameDatas = []; - for (var j = 0; j < message.GameDatas.length; ++j) - object.GameDatas[j] = $root.gamehall.ThridGameDatas.toObject(message.GameDatas[j], options); - } - return object; - }; - - /** - * Converts this ThridGamePlatforms to JSON. - * @function toJSON - * @memberof gamehall.ThridGamePlatforms - * @instance - * @returns {Object.} JSON object - */ - ThridGamePlatforms.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for ThridGamePlatforms - * @function getTypeUrl - * @memberof gamehall.ThridGamePlatforms - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - ThridGamePlatforms.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.ThridGamePlatforms"; - }; - - return ThridGamePlatforms; - })(); - - gamehall.SCThridGameList = (function() { - - /** - * Properties of a SCThridGameList. - * @memberof gamehall - * @interface ISCThridGameList - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCThridGameList OpRetCode - * @property {Array.|null} [GamePlatforms] SCThridGameList GamePlatforms - */ - - /** - * Constructs a new SCThridGameList. - * @memberof gamehall - * @classdesc Represents a SCThridGameList. - * @implements ISCThridGameList - * @constructor - * @param {gamehall.ISCThridGameList=} [properties] Properties to set - */ - function SCThridGameList(properties) { - this.GamePlatforms = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCThridGameList OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCThridGameList - * @instance - */ - SCThridGameList.prototype.OpRetCode = 0; - - /** - * SCThridGameList GamePlatforms. - * @member {Array.} GamePlatforms - * @memberof gamehall.SCThridGameList - * @instance - */ - SCThridGameList.prototype.GamePlatforms = $util.emptyArray; - - /** - * Creates a new SCThridGameList instance using the specified properties. - * @function create - * @memberof gamehall.SCThridGameList - * @static - * @param {gamehall.ISCThridGameList=} [properties] Properties to set - * @returns {gamehall.SCThridGameList} SCThridGameList instance - */ - SCThridGameList.create = function create(properties) { - return new SCThridGameList(properties); - }; - - /** - * Encodes the specified SCThridGameList message. Does not implicitly {@link gamehall.SCThridGameList.verify|verify} messages. - * @function encode - * @memberof gamehall.SCThridGameList - * @static - * @param {gamehall.ISCThridGameList} message SCThridGameList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.GamePlatforms != null && message.GamePlatforms.length) - for (var i = 0; i < message.GamePlatforms.length; ++i) - $root.gamehall.ThridGamePlatforms.encode(message.GamePlatforms[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCThridGameList message, length delimited. Does not implicitly {@link gamehall.SCThridGameList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCThridGameList - * @static - * @param {gamehall.ISCThridGameList} message SCThridGameList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCThridGameList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCThridGameList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCThridGameList} SCThridGameList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCThridGameList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - if (!(message.GamePlatforms && message.GamePlatforms.length)) - message.GamePlatforms = []; - message.GamePlatforms.push($root.gamehall.ThridGamePlatforms.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCThridGameList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCThridGameList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCThridGameList} SCThridGameList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCThridGameList message. - * @function verify - * @memberof gamehall.SCThridGameList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCThridGameList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.GamePlatforms != null && message.hasOwnProperty("GamePlatforms")) { - if (!Array.isArray(message.GamePlatforms)) - return "GamePlatforms: array expected"; - for (var i = 0; i < message.GamePlatforms.length; ++i) { - var error = $root.gamehall.ThridGamePlatforms.verify(message.GamePlatforms[i]); - if (error) - return "GamePlatforms." + error; - } - } - return null; - }; - - /** - * Creates a SCThridGameList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCThridGameList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCThridGameList} SCThridGameList - */ - SCThridGameList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCThridGameList) - return object; - var message = new $root.gamehall.SCThridGameList(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.GamePlatforms) { - if (!Array.isArray(object.GamePlatforms)) - throw TypeError(".gamehall.SCThridGameList.GamePlatforms: array expected"); - message.GamePlatforms = []; - for (var i = 0; i < object.GamePlatforms.length; ++i) { - if (typeof object.GamePlatforms[i] !== "object") - throw TypeError(".gamehall.SCThridGameList.GamePlatforms: object expected"); - message.GamePlatforms[i] = $root.gamehall.ThridGamePlatforms.fromObject(object.GamePlatforms[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCThridGameList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCThridGameList - * @static - * @param {gamehall.SCThridGameList} message SCThridGameList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCThridGameList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GamePlatforms = []; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.GamePlatforms && message.GamePlatforms.length) { - object.GamePlatforms = []; - for (var j = 0; j < message.GamePlatforms.length; ++j) - object.GamePlatforms[j] = $root.gamehall.ThridGamePlatforms.toObject(message.GamePlatforms[j], options); - } - return object; - }; - - /** - * Converts this SCThridGameList to JSON. - * @function toJSON - * @memberof gamehall.SCThridGameList - * @instance - * @returns {Object.} JSON object - */ - SCThridGameList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCThridGameList - * @function getTypeUrl - * @memberof gamehall.SCThridGameList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCThridGameList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCThridGameList"; - }; - - return SCThridGameList; - })(); - - gamehall.CSThridGameBalanceUpdate = (function() { - - /** - * Properties of a CSThridGameBalanceUpdate. - * @memberof gamehall - * @interface ICSThridGameBalanceUpdate - */ - - /** - * Constructs a new CSThridGameBalanceUpdate. - * @memberof gamehall - * @classdesc Represents a CSThridGameBalanceUpdate. - * @implements ICSThridGameBalanceUpdate - * @constructor - * @param {gamehall.ICSThridGameBalanceUpdate=} [properties] Properties to set - */ - function CSThridGameBalanceUpdate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSThridGameBalanceUpdate instance using the specified properties. - * @function create - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {gamehall.ICSThridGameBalanceUpdate=} [properties] Properties to set - * @returns {gamehall.CSThridGameBalanceUpdate} CSThridGameBalanceUpdate instance - */ - CSThridGameBalanceUpdate.create = function create(properties) { - return new CSThridGameBalanceUpdate(properties); - }; - - /** - * Encodes the specified CSThridGameBalanceUpdate message. Does not implicitly {@link gamehall.CSThridGameBalanceUpdate.verify|verify} messages. - * @function encode - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {gamehall.ICSThridGameBalanceUpdate} message CSThridGameBalanceUpdate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridGameBalanceUpdate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSThridGameBalanceUpdate message, length delimited. Does not implicitly {@link gamehall.CSThridGameBalanceUpdate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {gamehall.ICSThridGameBalanceUpdate} message CSThridGameBalanceUpdate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSThridGameBalanceUpdate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSThridGameBalanceUpdate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSThridGameBalanceUpdate} CSThridGameBalanceUpdate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridGameBalanceUpdate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSThridGameBalanceUpdate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSThridGameBalanceUpdate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSThridGameBalanceUpdate} CSThridGameBalanceUpdate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSThridGameBalanceUpdate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSThridGameBalanceUpdate message. - * @function verify - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSThridGameBalanceUpdate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSThridGameBalanceUpdate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSThridGameBalanceUpdate} CSThridGameBalanceUpdate - */ - CSThridGameBalanceUpdate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSThridGameBalanceUpdate) - return object; - return new $root.gamehall.CSThridGameBalanceUpdate(); - }; - - /** - * Creates a plain object from a CSThridGameBalanceUpdate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {gamehall.CSThridGameBalanceUpdate} message CSThridGameBalanceUpdate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSThridGameBalanceUpdate.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSThridGameBalanceUpdate to JSON. - * @function toJSON - * @memberof gamehall.CSThridGameBalanceUpdate - * @instance - * @returns {Object.} JSON object - */ - CSThridGameBalanceUpdate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSThridGameBalanceUpdate - * @function getTypeUrl - * @memberof gamehall.CSThridGameBalanceUpdate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSThridGameBalanceUpdate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSThridGameBalanceUpdate"; - }; - - return CSThridGameBalanceUpdate; - })(); - - gamehall.SCThridGameBalanceUpdate = (function() { - - /** - * Properties of a SCThridGameBalanceUpdate. - * @memberof gamehall - * @interface ISCThridGameBalanceUpdate - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCThridGameBalanceUpdate OpRetCode - * @property {number|Long|null} [Coin] SCThridGameBalanceUpdate Coin - */ - - /** - * Constructs a new SCThridGameBalanceUpdate. - * @memberof gamehall - * @classdesc Represents a SCThridGameBalanceUpdate. - * @implements ISCThridGameBalanceUpdate - * @constructor - * @param {gamehall.ISCThridGameBalanceUpdate=} [properties] Properties to set - */ - function SCThridGameBalanceUpdate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCThridGameBalanceUpdate OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCThridGameBalanceUpdate - * @instance - */ - SCThridGameBalanceUpdate.prototype.OpRetCode = 0; - - /** - * SCThridGameBalanceUpdate Coin. - * @member {number|Long} Coin - * @memberof gamehall.SCThridGameBalanceUpdate - * @instance - */ - SCThridGameBalanceUpdate.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCThridGameBalanceUpdate instance using the specified properties. - * @function create - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {gamehall.ISCThridGameBalanceUpdate=} [properties] Properties to set - * @returns {gamehall.SCThridGameBalanceUpdate} SCThridGameBalanceUpdate instance - */ - SCThridGameBalanceUpdate.create = function create(properties) { - return new SCThridGameBalanceUpdate(properties); - }; - - /** - * Encodes the specified SCThridGameBalanceUpdate message. Does not implicitly {@link gamehall.SCThridGameBalanceUpdate.verify|verify} messages. - * @function encode - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {gamehall.ISCThridGameBalanceUpdate} message SCThridGameBalanceUpdate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameBalanceUpdate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Coin); - return writer; - }; - - /** - * Encodes the specified SCThridGameBalanceUpdate message, length delimited. Does not implicitly {@link gamehall.SCThridGameBalanceUpdate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {gamehall.ISCThridGameBalanceUpdate} message SCThridGameBalanceUpdate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameBalanceUpdate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCThridGameBalanceUpdate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCThridGameBalanceUpdate} SCThridGameBalanceUpdate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameBalanceUpdate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCThridGameBalanceUpdate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.Coin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCThridGameBalanceUpdate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCThridGameBalanceUpdate} SCThridGameBalanceUpdate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameBalanceUpdate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCThridGameBalanceUpdate message. - * @function verify - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCThridGameBalanceUpdate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - return null; - }; - - /** - * Creates a SCThridGameBalanceUpdate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCThridGameBalanceUpdate} SCThridGameBalanceUpdate - */ - SCThridGameBalanceUpdate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCThridGameBalanceUpdate) - return object; - var message = new $root.gamehall.SCThridGameBalanceUpdate(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCThridGameBalanceUpdate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {gamehall.SCThridGameBalanceUpdate} message SCThridGameBalanceUpdate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCThridGameBalanceUpdate.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - return object; - }; - - /** - * Converts this SCThridGameBalanceUpdate to JSON. - * @function toJSON - * @memberof gamehall.SCThridGameBalanceUpdate - * @instance - * @returns {Object.} JSON object - */ - SCThridGameBalanceUpdate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCThridGameBalanceUpdate - * @function getTypeUrl - * @memberof gamehall.SCThridGameBalanceUpdate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCThridGameBalanceUpdate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCThridGameBalanceUpdate"; - }; - - return SCThridGameBalanceUpdate; - })(); - - gamehall.SCThridGameBalanceUpdateState = (function() { - - /** - * Properties of a SCThridGameBalanceUpdateState. - * @memberof gamehall - * @interface ISCThridGameBalanceUpdateState - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCThridGameBalanceUpdateState OpRetCode - */ - - /** - * Constructs a new SCThridGameBalanceUpdateState. - * @memberof gamehall - * @classdesc Represents a SCThridGameBalanceUpdateState. - * @implements ISCThridGameBalanceUpdateState - * @constructor - * @param {gamehall.ISCThridGameBalanceUpdateState=} [properties] Properties to set - */ - function SCThridGameBalanceUpdateState(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCThridGameBalanceUpdateState OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCThridGameBalanceUpdateState - * @instance - */ - SCThridGameBalanceUpdateState.prototype.OpRetCode = 0; - - /** - * Creates a new SCThridGameBalanceUpdateState instance using the specified properties. - * @function create - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {gamehall.ISCThridGameBalanceUpdateState=} [properties] Properties to set - * @returns {gamehall.SCThridGameBalanceUpdateState} SCThridGameBalanceUpdateState instance - */ - SCThridGameBalanceUpdateState.create = function create(properties) { - return new SCThridGameBalanceUpdateState(properties); - }; - - /** - * Encodes the specified SCThridGameBalanceUpdateState message. Does not implicitly {@link gamehall.SCThridGameBalanceUpdateState.verify|verify} messages. - * @function encode - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {gamehall.ISCThridGameBalanceUpdateState} message SCThridGameBalanceUpdateState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameBalanceUpdateState.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCThridGameBalanceUpdateState message, length delimited. Does not implicitly {@link gamehall.SCThridGameBalanceUpdateState.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {gamehall.ISCThridGameBalanceUpdateState} message SCThridGameBalanceUpdateState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCThridGameBalanceUpdateState.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCThridGameBalanceUpdateState message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCThridGameBalanceUpdateState} SCThridGameBalanceUpdateState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameBalanceUpdateState.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCThridGameBalanceUpdateState(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCThridGameBalanceUpdateState message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCThridGameBalanceUpdateState} SCThridGameBalanceUpdateState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCThridGameBalanceUpdateState.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCThridGameBalanceUpdateState message. - * @function verify - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCThridGameBalanceUpdateState.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCThridGameBalanceUpdateState message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCThridGameBalanceUpdateState} SCThridGameBalanceUpdateState - */ - SCThridGameBalanceUpdateState.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCThridGameBalanceUpdateState) - return object; - var message = new $root.gamehall.SCThridGameBalanceUpdateState(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCThridGameBalanceUpdateState message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {gamehall.SCThridGameBalanceUpdateState} message SCThridGameBalanceUpdateState - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCThridGameBalanceUpdateState.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCThridGameBalanceUpdateState to JSON. - * @function toJSON - * @memberof gamehall.SCThridGameBalanceUpdateState - * @instance - * @returns {Object.} JSON object - */ - SCThridGameBalanceUpdateState.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCThridGameBalanceUpdateState - * @function getTypeUrl - * @memberof gamehall.SCThridGameBalanceUpdateState - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCThridGameBalanceUpdateState.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCThridGameBalanceUpdateState"; - }; - - return SCThridGameBalanceUpdateState; - })(); - - gamehall.CSCreatePrivateRoom = (function() { - - /** - * Properties of a CSCreatePrivateRoom. - * @memberof gamehall - * @interface ICSCreatePrivateRoom - * @property {number|null} [GameFreeId] CSCreatePrivateRoom GameFreeId - * @property {Array.|null} [Params] CSCreatePrivateRoom Params - */ - - /** - * Constructs a new CSCreatePrivateRoom. - * @memberof gamehall - * @classdesc Represents a CSCreatePrivateRoom. - * @implements ICSCreatePrivateRoom - * @constructor - * @param {gamehall.ICSCreatePrivateRoom=} [properties] Properties to set - */ - function CSCreatePrivateRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCreatePrivateRoom GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.CSCreatePrivateRoom - * @instance - */ - CSCreatePrivateRoom.prototype.GameFreeId = 0; - - /** - * CSCreatePrivateRoom Params. - * @member {Array.} Params - * @memberof gamehall.CSCreatePrivateRoom - * @instance - */ - CSCreatePrivateRoom.prototype.Params = $util.emptyArray; - - /** - * Creates a new CSCreatePrivateRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {gamehall.ICSCreatePrivateRoom=} [properties] Properties to set - * @returns {gamehall.CSCreatePrivateRoom} CSCreatePrivateRoom instance - */ - CSCreatePrivateRoom.create = function create(properties) { - return new CSCreatePrivateRoom(properties); - }; - - /** - * Encodes the specified CSCreatePrivateRoom message. Does not implicitly {@link gamehall.CSCreatePrivateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {gamehall.ICSCreatePrivateRoom} message CSCreatePrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCreatePrivateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 2, wireType 2 =*/18).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified CSCreatePrivateRoom message, length delimited. Does not implicitly {@link gamehall.CSCreatePrivateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {gamehall.ICSCreatePrivateRoom} message CSCreatePrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCreatePrivateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCreatePrivateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCreatePrivateRoom} CSCreatePrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCreatePrivateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCreatePrivateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCreatePrivateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCreatePrivateRoom} CSCreatePrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCreatePrivateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCreatePrivateRoom message. - * @function verify - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCreatePrivateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - return null; - }; - - /** - * Creates a CSCreatePrivateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCreatePrivateRoom} CSCreatePrivateRoom - */ - CSCreatePrivateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCreatePrivateRoom) - return object; - var message = new $root.gamehall.CSCreatePrivateRoom(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.CSCreatePrivateRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a CSCreatePrivateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {gamehall.CSCreatePrivateRoom} message CSCreatePrivateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCreatePrivateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) - object.GameFreeId = 0; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - return object; - }; - - /** - * Converts this CSCreatePrivateRoom to JSON. - * @function toJSON - * @memberof gamehall.CSCreatePrivateRoom - * @instance - * @returns {Object.} JSON object - */ - CSCreatePrivateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCreatePrivateRoom - * @function getTypeUrl - * @memberof gamehall.CSCreatePrivateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCreatePrivateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCreatePrivateRoom"; - }; - - return CSCreatePrivateRoom; - })(); - - gamehall.SCCreatePrivateRoom = (function() { - - /** - * Properties of a SCCreatePrivateRoom. - * @memberof gamehall - * @interface ISCCreatePrivateRoom - * @property {number|null} [GameFreeId] SCCreatePrivateRoom GameFreeId - * @property {Array.|null} [Params] SCCreatePrivateRoom Params - * @property {number|null} [RoomId] SCCreatePrivateRoom RoomId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCCreatePrivateRoom OpRetCode - */ - - /** - * Constructs a new SCCreatePrivateRoom. - * @memberof gamehall - * @classdesc Represents a SCCreatePrivateRoom. - * @implements ISCCreatePrivateRoom - * @constructor - * @param {gamehall.ISCCreatePrivateRoom=} [properties] Properties to set - */ - function SCCreatePrivateRoom(properties) { - this.Params = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCreatePrivateRoom GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.SCCreatePrivateRoom - * @instance - */ - SCCreatePrivateRoom.prototype.GameFreeId = 0; - - /** - * SCCreatePrivateRoom Params. - * @member {Array.} Params - * @memberof gamehall.SCCreatePrivateRoom - * @instance - */ - SCCreatePrivateRoom.prototype.Params = $util.emptyArray; - - /** - * SCCreatePrivateRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCCreatePrivateRoom - * @instance - */ - SCCreatePrivateRoom.prototype.RoomId = 0; - - /** - * SCCreatePrivateRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCCreatePrivateRoom - * @instance - */ - SCCreatePrivateRoom.prototype.OpRetCode = 0; - - /** - * Creates a new SCCreatePrivateRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {gamehall.ISCCreatePrivateRoom=} [properties] Properties to set - * @returns {gamehall.SCCreatePrivateRoom} SCCreatePrivateRoom instance - */ - SCCreatePrivateRoom.create = function create(properties) { - return new SCCreatePrivateRoom(properties); - }; - - /** - * Encodes the specified SCCreatePrivateRoom message. Does not implicitly {@link gamehall.SCCreatePrivateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {gamehall.ISCCreatePrivateRoom} message SCCreatePrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCreatePrivateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Params != null && message.Params.length) { - writer.uint32(/* id 2, wireType 2 =*/18).fork(); - for (var i = 0; i < message.Params.length; ++i) - writer.int32(message.Params[i]); - writer.ldelim(); - } - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.RoomId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCCreatePrivateRoom message, length delimited. Does not implicitly {@link gamehall.SCCreatePrivateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {gamehall.ISCCreatePrivateRoom} message SCCreatePrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCreatePrivateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCreatePrivateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCreatePrivateRoom} SCCreatePrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCreatePrivateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCreatePrivateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - if (!(message.Params && message.Params.length)) - message.Params = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Params.push(reader.int32()); - } else - message.Params.push(reader.int32()); - break; - } - case 3: { - message.RoomId = reader.int32(); - break; - } - case 4: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCreatePrivateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCreatePrivateRoom} SCCreatePrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCreatePrivateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCreatePrivateRoom message. - * @function verify - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCreatePrivateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Params != null && message.hasOwnProperty("Params")) { - if (!Array.isArray(message.Params)) - return "Params: array expected"; - for (var i = 0; i < message.Params.length; ++i) - if (!$util.isInteger(message.Params[i])) - return "Params: integer[] expected"; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCCreatePrivateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCreatePrivateRoom} SCCreatePrivateRoom - */ - SCCreatePrivateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCreatePrivateRoom) - return object; - var message = new $root.gamehall.SCCreatePrivateRoom(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Params) { - if (!Array.isArray(object.Params)) - throw TypeError(".gamehall.SCCreatePrivateRoom.Params: array expected"); - message.Params = []; - for (var i = 0; i < object.Params.length; ++i) - message.Params[i] = object.Params[i] | 0; - } - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCCreatePrivateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {gamehall.SCCreatePrivateRoom} message SCCreatePrivateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCreatePrivateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Params = []; - if (options.defaults) { - object.GameFreeId = 0; - object.RoomId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Params && message.Params.length) { - object.Params = []; - for (var j = 0; j < message.Params.length; ++j) - object.Params[j] = message.Params[j]; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCCreatePrivateRoom to JSON. - * @function toJSON - * @memberof gamehall.SCCreatePrivateRoom - * @instance - * @returns {Object.} JSON object - */ - SCCreatePrivateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCreatePrivateRoom - * @function getTypeUrl - * @memberof gamehall.SCCreatePrivateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCreatePrivateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCreatePrivateRoom"; - }; - - return SCCreatePrivateRoom; - })(); - - gamehall.PrivateRoomInfo = (function() { - - /** - * Properties of a PrivateRoomInfo. - * @memberof gamehall - * @interface IPrivateRoomInfo - * @property {number|null} [GameFreeId] PrivateRoomInfo GameFreeId - * @property {number|null} [RoomId] PrivateRoomInfo RoomId - * @property {number|null} [CurrRound] PrivateRoomInfo CurrRound - * @property {number|null} [MaxRound] PrivateRoomInfo MaxRound - * @property {number|null} [CurrNum] PrivateRoomInfo CurrNum - * @property {number|null} [MaxPlayer] PrivateRoomInfo MaxPlayer - * @property {number|null} [CreateTs] PrivateRoomInfo CreateTs - */ - - /** - * Constructs a new PrivateRoomInfo. - * @memberof gamehall - * @classdesc Represents a PrivateRoomInfo. - * @implements IPrivateRoomInfo - * @constructor - * @param {gamehall.IPrivateRoomInfo=} [properties] Properties to set - */ - function PrivateRoomInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PrivateRoomInfo GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.GameFreeId = 0; - - /** - * PrivateRoomInfo RoomId. - * @member {number} RoomId - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.RoomId = 0; - - /** - * PrivateRoomInfo CurrRound. - * @member {number} CurrRound - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.CurrRound = 0; - - /** - * PrivateRoomInfo MaxRound. - * @member {number} MaxRound - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.MaxRound = 0; - - /** - * PrivateRoomInfo CurrNum. - * @member {number} CurrNum - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.CurrNum = 0; - - /** - * PrivateRoomInfo MaxPlayer. - * @member {number} MaxPlayer - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.MaxPlayer = 0; - - /** - * PrivateRoomInfo CreateTs. - * @member {number} CreateTs - * @memberof gamehall.PrivateRoomInfo - * @instance - */ - PrivateRoomInfo.prototype.CreateTs = 0; - - /** - * Creates a new PrivateRoomInfo instance using the specified properties. - * @function create - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {gamehall.IPrivateRoomInfo=} [properties] Properties to set - * @returns {gamehall.PrivateRoomInfo} PrivateRoomInfo instance - */ - PrivateRoomInfo.create = function create(properties) { - return new PrivateRoomInfo(properties); - }; - - /** - * Encodes the specified PrivateRoomInfo message. Does not implicitly {@link gamehall.PrivateRoomInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {gamehall.IPrivateRoomInfo} message PrivateRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PrivateRoomInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.RoomId); - if (message.CurrRound != null && Object.hasOwnProperty.call(message, "CurrRound")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.CurrRound); - if (message.MaxRound != null && Object.hasOwnProperty.call(message, "MaxRound")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.MaxRound); - if (message.CurrNum != null && Object.hasOwnProperty.call(message, "CurrNum")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.CurrNum); - if (message.MaxPlayer != null && Object.hasOwnProperty.call(message, "MaxPlayer")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.MaxPlayer); - if (message.CreateTs != null && Object.hasOwnProperty.call(message, "CreateTs")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.CreateTs); - return writer; - }; - - /** - * Encodes the specified PrivateRoomInfo message, length delimited. Does not implicitly {@link gamehall.PrivateRoomInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {gamehall.IPrivateRoomInfo} message PrivateRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PrivateRoomInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a PrivateRoomInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.PrivateRoomInfo} PrivateRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PrivateRoomInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.PrivateRoomInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.RoomId = reader.int32(); - break; - } - case 3: { - message.CurrRound = reader.int32(); - break; - } - case 4: { - message.MaxRound = reader.int32(); - break; - } - case 5: { - message.CurrNum = reader.int32(); - break; - } - case 6: { - message.MaxPlayer = reader.int32(); - break; - } - case 7: { - message.CreateTs = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a PrivateRoomInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.PrivateRoomInfo} PrivateRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PrivateRoomInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a PrivateRoomInfo message. - * @function verify - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PrivateRoomInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.CurrRound != null && message.hasOwnProperty("CurrRound")) - if (!$util.isInteger(message.CurrRound)) - return "CurrRound: integer expected"; - if (message.MaxRound != null && message.hasOwnProperty("MaxRound")) - if (!$util.isInteger(message.MaxRound)) - return "MaxRound: integer expected"; - if (message.CurrNum != null && message.hasOwnProperty("CurrNum")) - if (!$util.isInteger(message.CurrNum)) - return "CurrNum: integer expected"; - if (message.MaxPlayer != null && message.hasOwnProperty("MaxPlayer")) - if (!$util.isInteger(message.MaxPlayer)) - return "MaxPlayer: integer expected"; - if (message.CreateTs != null && message.hasOwnProperty("CreateTs")) - if (!$util.isInteger(message.CreateTs)) - return "CreateTs: integer expected"; - return null; - }; - - /** - * Creates a PrivateRoomInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.PrivateRoomInfo} PrivateRoomInfo - */ - PrivateRoomInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.PrivateRoomInfo) - return object; - var message = new $root.gamehall.PrivateRoomInfo(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.CurrRound != null) - message.CurrRound = object.CurrRound | 0; - if (object.MaxRound != null) - message.MaxRound = object.MaxRound | 0; - if (object.CurrNum != null) - message.CurrNum = object.CurrNum | 0; - if (object.MaxPlayer != null) - message.MaxPlayer = object.MaxPlayer | 0; - if (object.CreateTs != null) - message.CreateTs = object.CreateTs | 0; - return message; - }; - - /** - * Creates a plain object from a PrivateRoomInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {gamehall.PrivateRoomInfo} message PrivateRoomInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - PrivateRoomInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - object.RoomId = 0; - object.CurrRound = 0; - object.MaxRound = 0; - object.CurrNum = 0; - object.MaxPlayer = 0; - object.CreateTs = 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.CurrRound != null && message.hasOwnProperty("CurrRound")) - object.CurrRound = message.CurrRound; - if (message.MaxRound != null && message.hasOwnProperty("MaxRound")) - object.MaxRound = message.MaxRound; - if (message.CurrNum != null && message.hasOwnProperty("CurrNum")) - object.CurrNum = message.CurrNum; - if (message.MaxPlayer != null && message.hasOwnProperty("MaxPlayer")) - object.MaxPlayer = message.MaxPlayer; - if (message.CreateTs != null && message.hasOwnProperty("CreateTs")) - object.CreateTs = message.CreateTs; - return object; - }; - - /** - * Converts this PrivateRoomInfo to JSON. - * @function toJSON - * @memberof gamehall.PrivateRoomInfo - * @instance - * @returns {Object.} JSON object - */ - PrivateRoomInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for PrivateRoomInfo - * @function getTypeUrl - * @memberof gamehall.PrivateRoomInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - PrivateRoomInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.PrivateRoomInfo"; - }; - - return PrivateRoomInfo; - })(); - - gamehall.CSGetPrivateRoomList = (function() { - - /** - * Properties of a CSGetPrivateRoomList. - * @memberof gamehall - * @interface ICSGetPrivateRoomList - */ - - /** - * Constructs a new CSGetPrivateRoomList. - * @memberof gamehall - * @classdesc Represents a CSGetPrivateRoomList. - * @implements ICSGetPrivateRoomList - * @constructor - * @param {gamehall.ICSGetPrivateRoomList=} [properties] Properties to set - */ - function CSGetPrivateRoomList(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSGetPrivateRoomList instance using the specified properties. - * @function create - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {gamehall.ICSGetPrivateRoomList=} [properties] Properties to set - * @returns {gamehall.CSGetPrivateRoomList} CSGetPrivateRoomList instance - */ - CSGetPrivateRoomList.create = function create(properties) { - return new CSGetPrivateRoomList(properties); - }; - - /** - * Encodes the specified CSGetPrivateRoomList message. Does not implicitly {@link gamehall.CSGetPrivateRoomList.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {gamehall.ICSGetPrivateRoomList} message CSGetPrivateRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetPrivateRoomList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSGetPrivateRoomList message, length delimited. Does not implicitly {@link gamehall.CSGetPrivateRoomList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {gamehall.ICSGetPrivateRoomList} message CSGetPrivateRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetPrivateRoomList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetPrivateRoomList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetPrivateRoomList} CSGetPrivateRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetPrivateRoomList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetPrivateRoomList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetPrivateRoomList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetPrivateRoomList} CSGetPrivateRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetPrivateRoomList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetPrivateRoomList message. - * @function verify - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetPrivateRoomList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSGetPrivateRoomList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetPrivateRoomList} CSGetPrivateRoomList - */ - CSGetPrivateRoomList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetPrivateRoomList) - return object; - return new $root.gamehall.CSGetPrivateRoomList(); - }; - - /** - * Creates a plain object from a CSGetPrivateRoomList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {gamehall.CSGetPrivateRoomList} message CSGetPrivateRoomList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetPrivateRoomList.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSGetPrivateRoomList to JSON. - * @function toJSON - * @memberof gamehall.CSGetPrivateRoomList - * @instance - * @returns {Object.} JSON object - */ - CSGetPrivateRoomList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetPrivateRoomList - * @function getTypeUrl - * @memberof gamehall.CSGetPrivateRoomList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetPrivateRoomList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetPrivateRoomList"; - }; - - return CSGetPrivateRoomList; - })(); - - gamehall.SCGetPrivateRoomList = (function() { - - /** - * Properties of a SCGetPrivateRoomList. - * @memberof gamehall - * @interface ISCGetPrivateRoomList - * @property {Array.|null} [Datas] SCGetPrivateRoomList Datas - */ - - /** - * Constructs a new SCGetPrivateRoomList. - * @memberof gamehall - * @classdesc Represents a SCGetPrivateRoomList. - * @implements ISCGetPrivateRoomList - * @constructor - * @param {gamehall.ISCGetPrivateRoomList=} [properties] Properties to set - */ - function SCGetPrivateRoomList(properties) { - this.Datas = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetPrivateRoomList Datas. - * @member {Array.} Datas - * @memberof gamehall.SCGetPrivateRoomList - * @instance - */ - SCGetPrivateRoomList.prototype.Datas = $util.emptyArray; - - /** - * Creates a new SCGetPrivateRoomList instance using the specified properties. - * @function create - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {gamehall.ISCGetPrivateRoomList=} [properties] Properties to set - * @returns {gamehall.SCGetPrivateRoomList} SCGetPrivateRoomList instance - */ - SCGetPrivateRoomList.create = function create(properties) { - return new SCGetPrivateRoomList(properties); - }; - - /** - * Encodes the specified SCGetPrivateRoomList message. Does not implicitly {@link gamehall.SCGetPrivateRoomList.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {gamehall.ISCGetPrivateRoomList} message SCGetPrivateRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetPrivateRoomList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Datas != null && message.Datas.length) - for (var i = 0; i < message.Datas.length; ++i) - $root.gamehall.PrivateRoomInfo.encode(message.Datas[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCGetPrivateRoomList message, length delimited. Does not implicitly {@link gamehall.SCGetPrivateRoomList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {gamehall.ISCGetPrivateRoomList} message SCGetPrivateRoomList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetPrivateRoomList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetPrivateRoomList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetPrivateRoomList} SCGetPrivateRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetPrivateRoomList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetPrivateRoomList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Datas && message.Datas.length)) - message.Datas = []; - message.Datas.push($root.gamehall.PrivateRoomInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetPrivateRoomList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetPrivateRoomList} SCGetPrivateRoomList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetPrivateRoomList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetPrivateRoomList message. - * @function verify - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetPrivateRoomList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Datas != null && message.hasOwnProperty("Datas")) { - if (!Array.isArray(message.Datas)) - return "Datas: array expected"; - for (var i = 0; i < message.Datas.length; ++i) { - var error = $root.gamehall.PrivateRoomInfo.verify(message.Datas[i]); - if (error) - return "Datas." + error; - } - } - return null; - }; - - /** - * Creates a SCGetPrivateRoomList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetPrivateRoomList} SCGetPrivateRoomList - */ - SCGetPrivateRoomList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetPrivateRoomList) - return object; - var message = new $root.gamehall.SCGetPrivateRoomList(); - if (object.Datas) { - if (!Array.isArray(object.Datas)) - throw TypeError(".gamehall.SCGetPrivateRoomList.Datas: array expected"); - message.Datas = []; - for (var i = 0; i < object.Datas.length; ++i) { - if (typeof object.Datas[i] !== "object") - throw TypeError(".gamehall.SCGetPrivateRoomList.Datas: object expected"); - message.Datas[i] = $root.gamehall.PrivateRoomInfo.fromObject(object.Datas[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCGetPrivateRoomList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {gamehall.SCGetPrivateRoomList} message SCGetPrivateRoomList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetPrivateRoomList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Datas = []; - if (message.Datas && message.Datas.length) { - object.Datas = []; - for (var j = 0; j < message.Datas.length; ++j) - object.Datas[j] = $root.gamehall.PrivateRoomInfo.toObject(message.Datas[j], options); - } - return object; - }; - - /** - * Converts this SCGetPrivateRoomList to JSON. - * @function toJSON - * @memberof gamehall.SCGetPrivateRoomList - * @instance - * @returns {Object.} JSON object - */ - SCGetPrivateRoomList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetPrivateRoomList - * @function getTypeUrl - * @memberof gamehall.SCGetPrivateRoomList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetPrivateRoomList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetPrivateRoomList"; - }; - - return SCGetPrivateRoomList; - })(); - - gamehall.CSGetPrivateRoomHistory = (function() { - - /** - * Properties of a CSGetPrivateRoomHistory. - * @memberof gamehall - * @interface ICSGetPrivateRoomHistory - * @property {number|null} [QueryTime] CSGetPrivateRoomHistory QueryTime - */ - - /** - * Constructs a new CSGetPrivateRoomHistory. - * @memberof gamehall - * @classdesc Represents a CSGetPrivateRoomHistory. - * @implements ICSGetPrivateRoomHistory - * @constructor - * @param {gamehall.ICSGetPrivateRoomHistory=} [properties] Properties to set - */ - function CSGetPrivateRoomHistory(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSGetPrivateRoomHistory QueryTime. - * @member {number} QueryTime - * @memberof gamehall.CSGetPrivateRoomHistory - * @instance - */ - CSGetPrivateRoomHistory.prototype.QueryTime = 0; - - /** - * Creates a new CSGetPrivateRoomHistory instance using the specified properties. - * @function create - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {gamehall.ICSGetPrivateRoomHistory=} [properties] Properties to set - * @returns {gamehall.CSGetPrivateRoomHistory} CSGetPrivateRoomHistory instance - */ - CSGetPrivateRoomHistory.create = function create(properties) { - return new CSGetPrivateRoomHistory(properties); - }; - - /** - * Encodes the specified CSGetPrivateRoomHistory message. Does not implicitly {@link gamehall.CSGetPrivateRoomHistory.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {gamehall.ICSGetPrivateRoomHistory} message CSGetPrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetPrivateRoomHistory.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.QueryTime != null && Object.hasOwnProperty.call(message, "QueryTime")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.QueryTime); - return writer; - }; - - /** - * Encodes the specified CSGetPrivateRoomHistory message, length delimited. Does not implicitly {@link gamehall.CSGetPrivateRoomHistory.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {gamehall.ICSGetPrivateRoomHistory} message CSGetPrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetPrivateRoomHistory.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetPrivateRoomHistory message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetPrivateRoomHistory} CSGetPrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetPrivateRoomHistory.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetPrivateRoomHistory(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.QueryTime = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetPrivateRoomHistory message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetPrivateRoomHistory} CSGetPrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetPrivateRoomHistory.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetPrivateRoomHistory message. - * @function verify - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetPrivateRoomHistory.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.QueryTime != null && message.hasOwnProperty("QueryTime")) - if (!$util.isInteger(message.QueryTime)) - return "QueryTime: integer expected"; - return null; - }; - - /** - * Creates a CSGetPrivateRoomHistory message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetPrivateRoomHistory} CSGetPrivateRoomHistory - */ - CSGetPrivateRoomHistory.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetPrivateRoomHistory) - return object; - var message = new $root.gamehall.CSGetPrivateRoomHistory(); - if (object.QueryTime != null) - message.QueryTime = object.QueryTime | 0; - return message; - }; - - /** - * Creates a plain object from a CSGetPrivateRoomHistory message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {gamehall.CSGetPrivateRoomHistory} message CSGetPrivateRoomHistory - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetPrivateRoomHistory.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.QueryTime = 0; - if (message.QueryTime != null && message.hasOwnProperty("QueryTime")) - object.QueryTime = message.QueryTime; - return object; - }; - - /** - * Converts this CSGetPrivateRoomHistory to JSON. - * @function toJSON - * @memberof gamehall.CSGetPrivateRoomHistory - * @instance - * @returns {Object.} JSON object - */ - CSGetPrivateRoomHistory.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetPrivateRoomHistory - * @function getTypeUrl - * @memberof gamehall.CSGetPrivateRoomHistory - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetPrivateRoomHistory.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetPrivateRoomHistory"; - }; - - return CSGetPrivateRoomHistory; - })(); - - gamehall.PrivateRoomHistory = (function() { - - /** - * Properties of a PrivateRoomHistory. - * @memberof gamehall - * @interface IPrivateRoomHistory - * @property {number|null} [GameFreeId] PrivateRoomHistory GameFreeId - * @property {number|null} [RoomId] PrivateRoomHistory RoomId - * @property {number|null} [CreateTime] PrivateRoomHistory CreateTime - * @property {number|null} [DestroyTime] PrivateRoomHistory DestroyTime - * @property {number|null} [CreateFee] PrivateRoomHistory CreateFee - */ - - /** - * Constructs a new PrivateRoomHistory. - * @memberof gamehall - * @classdesc Represents a PrivateRoomHistory. - * @implements IPrivateRoomHistory - * @constructor - * @param {gamehall.IPrivateRoomHistory=} [properties] Properties to set - */ - function PrivateRoomHistory(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PrivateRoomHistory GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.PrivateRoomHistory - * @instance - */ - PrivateRoomHistory.prototype.GameFreeId = 0; - - /** - * PrivateRoomHistory RoomId. - * @member {number} RoomId - * @memberof gamehall.PrivateRoomHistory - * @instance - */ - PrivateRoomHistory.prototype.RoomId = 0; - - /** - * PrivateRoomHistory CreateTime. - * @member {number} CreateTime - * @memberof gamehall.PrivateRoomHistory - * @instance - */ - PrivateRoomHistory.prototype.CreateTime = 0; - - /** - * PrivateRoomHistory DestroyTime. - * @member {number} DestroyTime - * @memberof gamehall.PrivateRoomHistory - * @instance - */ - PrivateRoomHistory.prototype.DestroyTime = 0; - - /** - * PrivateRoomHistory CreateFee. - * @member {number} CreateFee - * @memberof gamehall.PrivateRoomHistory - * @instance - */ - PrivateRoomHistory.prototype.CreateFee = 0; - - /** - * Creates a new PrivateRoomHistory instance using the specified properties. - * @function create - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {gamehall.IPrivateRoomHistory=} [properties] Properties to set - * @returns {gamehall.PrivateRoomHistory} PrivateRoomHistory instance - */ - PrivateRoomHistory.create = function create(properties) { - return new PrivateRoomHistory(properties); - }; - - /** - * Encodes the specified PrivateRoomHistory message. Does not implicitly {@link gamehall.PrivateRoomHistory.verify|verify} messages. - * @function encode - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {gamehall.IPrivateRoomHistory} message PrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PrivateRoomHistory.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.RoomId); - if (message.CreateTime != null && Object.hasOwnProperty.call(message, "CreateTime")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.CreateTime); - if (message.DestroyTime != null && Object.hasOwnProperty.call(message, "DestroyTime")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.DestroyTime); - if (message.CreateFee != null && Object.hasOwnProperty.call(message, "CreateFee")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.CreateFee); - return writer; - }; - - /** - * Encodes the specified PrivateRoomHistory message, length delimited. Does not implicitly {@link gamehall.PrivateRoomHistory.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {gamehall.IPrivateRoomHistory} message PrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PrivateRoomHistory.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a PrivateRoomHistory message from the specified reader or buffer. - * @function decode - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.PrivateRoomHistory} PrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PrivateRoomHistory.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.PrivateRoomHistory(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.RoomId = reader.int32(); - break; - } - case 3: { - message.CreateTime = reader.int32(); - break; - } - case 4: { - message.DestroyTime = reader.int32(); - break; - } - case 5: { - message.CreateFee = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a PrivateRoomHistory message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.PrivateRoomHistory} PrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PrivateRoomHistory.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a PrivateRoomHistory message. - * @function verify - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PrivateRoomHistory.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.CreateTime != null && message.hasOwnProperty("CreateTime")) - if (!$util.isInteger(message.CreateTime)) - return "CreateTime: integer expected"; - if (message.DestroyTime != null && message.hasOwnProperty("DestroyTime")) - if (!$util.isInteger(message.DestroyTime)) - return "DestroyTime: integer expected"; - if (message.CreateFee != null && message.hasOwnProperty("CreateFee")) - if (!$util.isInteger(message.CreateFee)) - return "CreateFee: integer expected"; - return null; - }; - - /** - * Creates a PrivateRoomHistory message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {Object.} object Plain object - * @returns {gamehall.PrivateRoomHistory} PrivateRoomHistory - */ - PrivateRoomHistory.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.PrivateRoomHistory) - return object; - var message = new $root.gamehall.PrivateRoomHistory(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.CreateTime != null) - message.CreateTime = object.CreateTime | 0; - if (object.DestroyTime != null) - message.DestroyTime = object.DestroyTime | 0; - if (object.CreateFee != null) - message.CreateFee = object.CreateFee | 0; - return message; - }; - - /** - * Creates a plain object from a PrivateRoomHistory message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {gamehall.PrivateRoomHistory} message PrivateRoomHistory - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - PrivateRoomHistory.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - object.RoomId = 0; - object.CreateTime = 0; - object.DestroyTime = 0; - object.CreateFee = 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.CreateTime != null && message.hasOwnProperty("CreateTime")) - object.CreateTime = message.CreateTime; - if (message.DestroyTime != null && message.hasOwnProperty("DestroyTime")) - object.DestroyTime = message.DestroyTime; - if (message.CreateFee != null && message.hasOwnProperty("CreateFee")) - object.CreateFee = message.CreateFee; - return object; - }; - - /** - * Converts this PrivateRoomHistory to JSON. - * @function toJSON - * @memberof gamehall.PrivateRoomHistory - * @instance - * @returns {Object.} JSON object - */ - PrivateRoomHistory.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for PrivateRoomHistory - * @function getTypeUrl - * @memberof gamehall.PrivateRoomHistory - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - PrivateRoomHistory.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.PrivateRoomHistory"; - }; - - return PrivateRoomHistory; - })(); - - gamehall.SCGetPrivateRoomHistory = (function() { - - /** - * Properties of a SCGetPrivateRoomHistory. - * @memberof gamehall - * @interface ISCGetPrivateRoomHistory - * @property {number|null} [QueryTime] SCGetPrivateRoomHistory QueryTime - * @property {Array.|null} [Datas] SCGetPrivateRoomHistory Datas - */ - - /** - * Constructs a new SCGetPrivateRoomHistory. - * @memberof gamehall - * @classdesc Represents a SCGetPrivateRoomHistory. - * @implements ISCGetPrivateRoomHistory - * @constructor - * @param {gamehall.ISCGetPrivateRoomHistory=} [properties] Properties to set - */ - function SCGetPrivateRoomHistory(properties) { - this.Datas = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetPrivateRoomHistory QueryTime. - * @member {number} QueryTime - * @memberof gamehall.SCGetPrivateRoomHistory - * @instance - */ - SCGetPrivateRoomHistory.prototype.QueryTime = 0; - - /** - * SCGetPrivateRoomHistory Datas. - * @member {Array.} Datas - * @memberof gamehall.SCGetPrivateRoomHistory - * @instance - */ - SCGetPrivateRoomHistory.prototype.Datas = $util.emptyArray; - - /** - * Creates a new SCGetPrivateRoomHistory instance using the specified properties. - * @function create - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {gamehall.ISCGetPrivateRoomHistory=} [properties] Properties to set - * @returns {gamehall.SCGetPrivateRoomHistory} SCGetPrivateRoomHistory instance - */ - SCGetPrivateRoomHistory.create = function create(properties) { - return new SCGetPrivateRoomHistory(properties); - }; - - /** - * Encodes the specified SCGetPrivateRoomHistory message. Does not implicitly {@link gamehall.SCGetPrivateRoomHistory.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {gamehall.ISCGetPrivateRoomHistory} message SCGetPrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetPrivateRoomHistory.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.QueryTime != null && Object.hasOwnProperty.call(message, "QueryTime")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.QueryTime); - if (message.Datas != null && message.Datas.length) - for (var i = 0; i < message.Datas.length; ++i) - $root.gamehall.PrivateRoomHistory.encode(message.Datas[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCGetPrivateRoomHistory message, length delimited. Does not implicitly {@link gamehall.SCGetPrivateRoomHistory.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {gamehall.ISCGetPrivateRoomHistory} message SCGetPrivateRoomHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetPrivateRoomHistory.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetPrivateRoomHistory message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetPrivateRoomHistory} SCGetPrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetPrivateRoomHistory.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetPrivateRoomHistory(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.QueryTime = reader.int32(); - break; - } - case 2: { - if (!(message.Datas && message.Datas.length)) - message.Datas = []; - message.Datas.push($root.gamehall.PrivateRoomHistory.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetPrivateRoomHistory message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetPrivateRoomHistory} SCGetPrivateRoomHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetPrivateRoomHistory.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetPrivateRoomHistory message. - * @function verify - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetPrivateRoomHistory.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.QueryTime != null && message.hasOwnProperty("QueryTime")) - if (!$util.isInteger(message.QueryTime)) - return "QueryTime: integer expected"; - if (message.Datas != null && message.hasOwnProperty("Datas")) { - if (!Array.isArray(message.Datas)) - return "Datas: array expected"; - for (var i = 0; i < message.Datas.length; ++i) { - var error = $root.gamehall.PrivateRoomHistory.verify(message.Datas[i]); - if (error) - return "Datas." + error; - } - } - return null; - }; - - /** - * Creates a SCGetPrivateRoomHistory message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetPrivateRoomHistory} SCGetPrivateRoomHistory - */ - SCGetPrivateRoomHistory.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetPrivateRoomHistory) - return object; - var message = new $root.gamehall.SCGetPrivateRoomHistory(); - if (object.QueryTime != null) - message.QueryTime = object.QueryTime | 0; - if (object.Datas) { - if (!Array.isArray(object.Datas)) - throw TypeError(".gamehall.SCGetPrivateRoomHistory.Datas: array expected"); - message.Datas = []; - for (var i = 0; i < object.Datas.length; ++i) { - if (typeof object.Datas[i] !== "object") - throw TypeError(".gamehall.SCGetPrivateRoomHistory.Datas: object expected"); - message.Datas[i] = $root.gamehall.PrivateRoomHistory.fromObject(object.Datas[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCGetPrivateRoomHistory message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {gamehall.SCGetPrivateRoomHistory} message SCGetPrivateRoomHistory - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetPrivateRoomHistory.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Datas = []; - if (options.defaults) - object.QueryTime = 0; - if (message.QueryTime != null && message.hasOwnProperty("QueryTime")) - object.QueryTime = message.QueryTime; - if (message.Datas && message.Datas.length) { - object.Datas = []; - for (var j = 0; j < message.Datas.length; ++j) - object.Datas[j] = $root.gamehall.PrivateRoomHistory.toObject(message.Datas[j], options); - } - return object; - }; - - /** - * Converts this SCGetPrivateRoomHistory to JSON. - * @function toJSON - * @memberof gamehall.SCGetPrivateRoomHistory - * @instance - * @returns {Object.} JSON object - */ - SCGetPrivateRoomHistory.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetPrivateRoomHistory - * @function getTypeUrl - * @memberof gamehall.SCGetPrivateRoomHistory - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetPrivateRoomHistory.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetPrivateRoomHistory"; - }; - - return SCGetPrivateRoomHistory; - })(); - - gamehall.CSDestroyPrivateRoom = (function() { - - /** - * Properties of a CSDestroyPrivateRoom. - * @memberof gamehall - * @interface ICSDestroyPrivateRoom - * @property {number|null} [RoomId] CSDestroyPrivateRoom RoomId - */ - - /** - * Constructs a new CSDestroyPrivateRoom. - * @memberof gamehall - * @classdesc Represents a CSDestroyPrivateRoom. - * @implements ICSDestroyPrivateRoom - * @constructor - * @param {gamehall.ICSDestroyPrivateRoom=} [properties] Properties to set - */ - function CSDestroyPrivateRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSDestroyPrivateRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.CSDestroyPrivateRoom - * @instance - */ - CSDestroyPrivateRoom.prototype.RoomId = 0; - - /** - * Creates a new CSDestroyPrivateRoom instance using the specified properties. - * @function create - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {gamehall.ICSDestroyPrivateRoom=} [properties] Properties to set - * @returns {gamehall.CSDestroyPrivateRoom} CSDestroyPrivateRoom instance - */ - CSDestroyPrivateRoom.create = function create(properties) { - return new CSDestroyPrivateRoom(properties); - }; - - /** - * Encodes the specified CSDestroyPrivateRoom message. Does not implicitly {@link gamehall.CSDestroyPrivateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {gamehall.ICSDestroyPrivateRoom} message CSDestroyPrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSDestroyPrivateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - return writer; - }; - - /** - * Encodes the specified CSDestroyPrivateRoom message, length delimited. Does not implicitly {@link gamehall.CSDestroyPrivateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {gamehall.ICSDestroyPrivateRoom} message CSDestroyPrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSDestroyPrivateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSDestroyPrivateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSDestroyPrivateRoom} CSDestroyPrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSDestroyPrivateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSDestroyPrivateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSDestroyPrivateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSDestroyPrivateRoom} CSDestroyPrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSDestroyPrivateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSDestroyPrivateRoom message. - * @function verify - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSDestroyPrivateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - return null; - }; - - /** - * Creates a CSDestroyPrivateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSDestroyPrivateRoom} CSDestroyPrivateRoom - */ - CSDestroyPrivateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSDestroyPrivateRoom) - return object; - var message = new $root.gamehall.CSDestroyPrivateRoom(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - return message; - }; - - /** - * Creates a plain object from a CSDestroyPrivateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {gamehall.CSDestroyPrivateRoom} message CSDestroyPrivateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSDestroyPrivateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.RoomId = 0; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - return object; - }; - - /** - * Converts this CSDestroyPrivateRoom to JSON. - * @function toJSON - * @memberof gamehall.CSDestroyPrivateRoom - * @instance - * @returns {Object.} JSON object - */ - CSDestroyPrivateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSDestroyPrivateRoom - * @function getTypeUrl - * @memberof gamehall.CSDestroyPrivateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSDestroyPrivateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSDestroyPrivateRoom"; - }; - - return CSDestroyPrivateRoom; - })(); - - gamehall.SCDestroyPrivateRoom = (function() { - - /** - * Properties of a SCDestroyPrivateRoom. - * @memberof gamehall - * @interface ISCDestroyPrivateRoom - * @property {number|null} [RoomId] SCDestroyPrivateRoom RoomId - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCDestroyPrivateRoom OpRetCode - * @property {number|null} [State] SCDestroyPrivateRoom State - */ - - /** - * Constructs a new SCDestroyPrivateRoom. - * @memberof gamehall - * @classdesc Represents a SCDestroyPrivateRoom. - * @implements ISCDestroyPrivateRoom - * @constructor - * @param {gamehall.ISCDestroyPrivateRoom=} [properties] Properties to set - */ - function SCDestroyPrivateRoom(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCDestroyPrivateRoom RoomId. - * @member {number} RoomId - * @memberof gamehall.SCDestroyPrivateRoom - * @instance - */ - SCDestroyPrivateRoom.prototype.RoomId = 0; - - /** - * SCDestroyPrivateRoom OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCDestroyPrivateRoom - * @instance - */ - SCDestroyPrivateRoom.prototype.OpRetCode = 0; - - /** - * SCDestroyPrivateRoom State. - * @member {number} State - * @memberof gamehall.SCDestroyPrivateRoom - * @instance - */ - SCDestroyPrivateRoom.prototype.State = 0; - - /** - * Creates a new SCDestroyPrivateRoom instance using the specified properties. - * @function create - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {gamehall.ISCDestroyPrivateRoom=} [properties] Properties to set - * @returns {gamehall.SCDestroyPrivateRoom} SCDestroyPrivateRoom instance - */ - SCDestroyPrivateRoom.create = function create(properties) { - return new SCDestroyPrivateRoom(properties); - }; - - /** - * Encodes the specified SCDestroyPrivateRoom message. Does not implicitly {@link gamehall.SCDestroyPrivateRoom.verify|verify} messages. - * @function encode - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {gamehall.ISCDestroyPrivateRoom} message SCDestroyPrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCDestroyPrivateRoom.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpRetCode); - if (message.State != null && Object.hasOwnProperty.call(message, "State")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.State); - return writer; - }; - - /** - * Encodes the specified SCDestroyPrivateRoom message, length delimited. Does not implicitly {@link gamehall.SCDestroyPrivateRoom.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {gamehall.ISCDestroyPrivateRoom} message SCDestroyPrivateRoom message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCDestroyPrivateRoom.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCDestroyPrivateRoom message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCDestroyPrivateRoom} SCDestroyPrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCDestroyPrivateRoom.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCDestroyPrivateRoom(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.OpRetCode = reader.int32(); - break; - } - case 3: { - message.State = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCDestroyPrivateRoom message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCDestroyPrivateRoom} SCDestroyPrivateRoom - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCDestroyPrivateRoom.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCDestroyPrivateRoom message. - * @function verify - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCDestroyPrivateRoom.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.State != null && message.hasOwnProperty("State")) - if (!$util.isInteger(message.State)) - return "State: integer expected"; - return null; - }; - - /** - * Creates a SCDestroyPrivateRoom message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCDestroyPrivateRoom} SCDestroyPrivateRoom - */ - SCDestroyPrivateRoom.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCDestroyPrivateRoom) - return object; - var message = new $root.gamehall.SCDestroyPrivateRoom(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - if (object.State != null) - message.State = object.State | 0; - return message; - }; - - /** - * Creates a plain object from a SCDestroyPrivateRoom message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {gamehall.SCDestroyPrivateRoom} message SCDestroyPrivateRoom - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCDestroyPrivateRoom.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.State = 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - if (message.State != null && message.hasOwnProperty("State")) - object.State = message.State; - return object; - }; - - /** - * Converts this SCDestroyPrivateRoom to JSON. - * @function toJSON - * @memberof gamehall.SCDestroyPrivateRoom - * @instance - * @returns {Object.} JSON object - */ - SCDestroyPrivateRoom.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCDestroyPrivateRoom - * @function getTypeUrl - * @memberof gamehall.SCDestroyPrivateRoom - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCDestroyPrivateRoom.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCDestroyPrivateRoom"; - }; - - return SCDestroyPrivateRoom; - })(); - - gamehall.CSQueryRoomInfo = (function() { - - /** - * Properties of a CSQueryRoomInfo. - * @memberof gamehall - * @interface ICSQueryRoomInfo - * @property {Array.|null} [GameIds] CSQueryRoomInfo GameIds - * @property {number|null} [GameSite] CSQueryRoomInfo GameSite - */ - - /** - * Constructs a new CSQueryRoomInfo. - * @memberof gamehall - * @classdesc Represents a CSQueryRoomInfo. - * @implements ICSQueryRoomInfo - * @constructor - * @param {gamehall.ICSQueryRoomInfo=} [properties] Properties to set - */ - function CSQueryRoomInfo(properties) { - this.GameIds = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSQueryRoomInfo GameIds. - * @member {Array.} GameIds - * @memberof gamehall.CSQueryRoomInfo - * @instance - */ - CSQueryRoomInfo.prototype.GameIds = $util.emptyArray; - - /** - * CSQueryRoomInfo GameSite. - * @member {number} GameSite - * @memberof gamehall.CSQueryRoomInfo - * @instance - */ - CSQueryRoomInfo.prototype.GameSite = 0; - - /** - * Creates a new CSQueryRoomInfo instance using the specified properties. - * @function create - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {gamehall.ICSQueryRoomInfo=} [properties] Properties to set - * @returns {gamehall.CSQueryRoomInfo} CSQueryRoomInfo instance - */ - CSQueryRoomInfo.create = function create(properties) { - return new CSQueryRoomInfo(properties); - }; - - /** - * Encodes the specified CSQueryRoomInfo message. Does not implicitly {@link gamehall.CSQueryRoomInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {gamehall.ICSQueryRoomInfo} message CSQueryRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSQueryRoomInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameIds != null && message.GameIds.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.GameIds.length; ++i) - writer.int32(message.GameIds[i]); - writer.ldelim(); - } - if (message.GameSite != null && Object.hasOwnProperty.call(message, "GameSite")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameSite); - return writer; - }; - - /** - * Encodes the specified CSQueryRoomInfo message, length delimited. Does not implicitly {@link gamehall.CSQueryRoomInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {gamehall.ICSQueryRoomInfo} message CSQueryRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSQueryRoomInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSQueryRoomInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSQueryRoomInfo} CSQueryRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSQueryRoomInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSQueryRoomInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameIds && message.GameIds.length)) - message.GameIds = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.GameIds.push(reader.int32()); - } else - message.GameIds.push(reader.int32()); - break; - } - case 2: { - message.GameSite = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSQueryRoomInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSQueryRoomInfo} CSQueryRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSQueryRoomInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSQueryRoomInfo message. - * @function verify - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSQueryRoomInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameIds != null && message.hasOwnProperty("GameIds")) { - if (!Array.isArray(message.GameIds)) - return "GameIds: array expected"; - for (var i = 0; i < message.GameIds.length; ++i) - if (!$util.isInteger(message.GameIds[i])) - return "GameIds: integer[] expected"; - } - if (message.GameSite != null && message.hasOwnProperty("GameSite")) - if (!$util.isInteger(message.GameSite)) - return "GameSite: integer expected"; - return null; - }; - - /** - * Creates a CSQueryRoomInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSQueryRoomInfo} CSQueryRoomInfo - */ - CSQueryRoomInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSQueryRoomInfo) - return object; - var message = new $root.gamehall.CSQueryRoomInfo(); - if (object.GameIds) { - if (!Array.isArray(object.GameIds)) - throw TypeError(".gamehall.CSQueryRoomInfo.GameIds: array expected"); - message.GameIds = []; - for (var i = 0; i < object.GameIds.length; ++i) - message.GameIds[i] = object.GameIds[i] | 0; - } - if (object.GameSite != null) - message.GameSite = object.GameSite | 0; - return message; - }; - - /** - * Creates a plain object from a CSQueryRoomInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {gamehall.CSQueryRoomInfo} message CSQueryRoomInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSQueryRoomInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameIds = []; - if (options.defaults) - object.GameSite = 0; - if (message.GameIds && message.GameIds.length) { - object.GameIds = []; - for (var j = 0; j < message.GameIds.length; ++j) - object.GameIds[j] = message.GameIds[j]; - } - if (message.GameSite != null && message.hasOwnProperty("GameSite")) - object.GameSite = message.GameSite; - return object; - }; - - /** - * Converts this CSQueryRoomInfo to JSON. - * @function toJSON - * @memberof gamehall.CSQueryRoomInfo - * @instance - * @returns {Object.} JSON object - */ - CSQueryRoomInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSQueryRoomInfo - * @function getTypeUrl - * @memberof gamehall.CSQueryRoomInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSQueryRoomInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSQueryRoomInfo"; - }; - - return CSQueryRoomInfo; - })(); - - gamehall.QRoomInfo = (function() { - - /** - * Properties of a QRoomInfo. - * @memberof gamehall - * @interface IQRoomInfo - * @property {number|null} [GameFreeId] QRoomInfo GameFreeId - * @property {number|null} [GameId] QRoomInfo GameId - * @property {number|null} [RoomId] QRoomInfo RoomId - * @property {number|null} [BaseCoin] QRoomInfo BaseCoin - * @property {number|null} [LimitCoin] QRoomInfo LimitCoin - * @property {number|null} [CurrNum] QRoomInfo CurrNum - * @property {number|null} [MaxPlayer] QRoomInfo MaxPlayer - * @property {number|null} [Creator] QRoomInfo Creator - * @property {number|null} [CreateTs] QRoomInfo CreateTs - */ - - /** - * Constructs a new QRoomInfo. - * @memberof gamehall - * @classdesc Represents a QRoomInfo. - * @implements IQRoomInfo - * @constructor - * @param {gamehall.IQRoomInfo=} [properties] Properties to set - */ - function QRoomInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * QRoomInfo GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.GameFreeId = 0; - - /** - * QRoomInfo GameId. - * @member {number} GameId - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.GameId = 0; - - /** - * QRoomInfo RoomId. - * @member {number} RoomId - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.RoomId = 0; - - /** - * QRoomInfo BaseCoin. - * @member {number} BaseCoin - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.BaseCoin = 0; - - /** - * QRoomInfo LimitCoin. - * @member {number} LimitCoin - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.LimitCoin = 0; - - /** - * QRoomInfo CurrNum. - * @member {number} CurrNum - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.CurrNum = 0; - - /** - * QRoomInfo MaxPlayer. - * @member {number} MaxPlayer - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.MaxPlayer = 0; - - /** - * QRoomInfo Creator. - * @member {number} Creator - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.Creator = 0; - - /** - * QRoomInfo CreateTs. - * @member {number} CreateTs - * @memberof gamehall.QRoomInfo - * @instance - */ - QRoomInfo.prototype.CreateTs = 0; - - /** - * Creates a new QRoomInfo instance using the specified properties. - * @function create - * @memberof gamehall.QRoomInfo - * @static - * @param {gamehall.IQRoomInfo=} [properties] Properties to set - * @returns {gamehall.QRoomInfo} QRoomInfo instance - */ - QRoomInfo.create = function create(properties) { - return new QRoomInfo(properties); - }; - - /** - * Encodes the specified QRoomInfo message. Does not implicitly {@link gamehall.QRoomInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.QRoomInfo - * @static - * @param {gamehall.IQRoomInfo} message QRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - QRoomInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.RoomId); - if (message.BaseCoin != null && Object.hasOwnProperty.call(message, "BaseCoin")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.BaseCoin); - if (message.LimitCoin != null && Object.hasOwnProperty.call(message, "LimitCoin")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.LimitCoin); - if (message.CurrNum != null && Object.hasOwnProperty.call(message, "CurrNum")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.CurrNum); - if (message.MaxPlayer != null && Object.hasOwnProperty.call(message, "MaxPlayer")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.MaxPlayer); - if (message.Creator != null && Object.hasOwnProperty.call(message, "Creator")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.Creator); - if (message.CreateTs != null && Object.hasOwnProperty.call(message, "CreateTs")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.CreateTs); - return writer; - }; - - /** - * Encodes the specified QRoomInfo message, length delimited. Does not implicitly {@link gamehall.QRoomInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.QRoomInfo - * @static - * @param {gamehall.IQRoomInfo} message QRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - QRoomInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a QRoomInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.QRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.QRoomInfo} QRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - QRoomInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.QRoomInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - case 3: { - message.RoomId = reader.int32(); - break; - } - case 4: { - message.BaseCoin = reader.int32(); - break; - } - case 5: { - message.LimitCoin = reader.int32(); - break; - } - case 6: { - message.CurrNum = reader.int32(); - break; - } - case 7: { - message.MaxPlayer = reader.int32(); - break; - } - case 8: { - message.Creator = reader.int32(); - break; - } - case 9: { - message.CreateTs = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a QRoomInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.QRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.QRoomInfo} QRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - QRoomInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a QRoomInfo message. - * @function verify - * @memberof gamehall.QRoomInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - QRoomInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - if (!$util.isInteger(message.BaseCoin)) - return "BaseCoin: integer expected"; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - if (!$util.isInteger(message.LimitCoin)) - return "LimitCoin: integer expected"; - if (message.CurrNum != null && message.hasOwnProperty("CurrNum")) - if (!$util.isInteger(message.CurrNum)) - return "CurrNum: integer expected"; - if (message.MaxPlayer != null && message.hasOwnProperty("MaxPlayer")) - if (!$util.isInteger(message.MaxPlayer)) - return "MaxPlayer: integer expected"; - if (message.Creator != null && message.hasOwnProperty("Creator")) - if (!$util.isInteger(message.Creator)) - return "Creator: integer expected"; - if (message.CreateTs != null && message.hasOwnProperty("CreateTs")) - if (!$util.isInteger(message.CreateTs)) - return "CreateTs: integer expected"; - return null; - }; - - /** - * Creates a QRoomInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.QRoomInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.QRoomInfo} QRoomInfo - */ - QRoomInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.QRoomInfo) - return object; - var message = new $root.gamehall.QRoomInfo(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - if (object.BaseCoin != null) - message.BaseCoin = object.BaseCoin | 0; - if (object.LimitCoin != null) - message.LimitCoin = object.LimitCoin | 0; - if (object.CurrNum != null) - message.CurrNum = object.CurrNum | 0; - if (object.MaxPlayer != null) - message.MaxPlayer = object.MaxPlayer | 0; - if (object.Creator != null) - message.Creator = object.Creator | 0; - if (object.CreateTs != null) - message.CreateTs = object.CreateTs | 0; - return message; - }; - - /** - * Creates a plain object from a QRoomInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.QRoomInfo - * @static - * @param {gamehall.QRoomInfo} message QRoomInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - QRoomInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - object.GameId = 0; - object.RoomId = 0; - object.BaseCoin = 0; - object.LimitCoin = 0; - object.CurrNum = 0; - object.MaxPlayer = 0; - object.Creator = 0; - object.CreateTs = 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.BaseCoin != null && message.hasOwnProperty("BaseCoin")) - object.BaseCoin = message.BaseCoin; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - object.LimitCoin = message.LimitCoin; - if (message.CurrNum != null && message.hasOwnProperty("CurrNum")) - object.CurrNum = message.CurrNum; - if (message.MaxPlayer != null && message.hasOwnProperty("MaxPlayer")) - object.MaxPlayer = message.MaxPlayer; - if (message.Creator != null && message.hasOwnProperty("Creator")) - object.Creator = message.Creator; - if (message.CreateTs != null && message.hasOwnProperty("CreateTs")) - object.CreateTs = message.CreateTs; - return object; - }; - - /** - * Converts this QRoomInfo to JSON. - * @function toJSON - * @memberof gamehall.QRoomInfo - * @instance - * @returns {Object.} JSON object - */ - QRoomInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for QRoomInfo - * @function getTypeUrl - * @memberof gamehall.QRoomInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - QRoomInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.QRoomInfo"; - }; - - return QRoomInfo; - })(); - - gamehall.SCQueryRoomInfo = (function() { - - /** - * Properties of a SCQueryRoomInfo. - * @memberof gamehall - * @interface ISCQueryRoomInfo - * @property {Array.|null} [GameIds] SCQueryRoomInfo GameIds - * @property {number|null} [GameSite] SCQueryRoomInfo GameSite - * @property {Array.|null} [RoomInfo] SCQueryRoomInfo RoomInfo - * @property {gamehall.OpResultCode_Game|null} [OpRetCode] SCQueryRoomInfo OpRetCode - */ - - /** - * Constructs a new SCQueryRoomInfo. - * @memberof gamehall - * @classdesc Represents a SCQueryRoomInfo. - * @implements ISCQueryRoomInfo - * @constructor - * @param {gamehall.ISCQueryRoomInfo=} [properties] Properties to set - */ - function SCQueryRoomInfo(properties) { - this.GameIds = []; - this.RoomInfo = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCQueryRoomInfo GameIds. - * @member {Array.} GameIds - * @memberof gamehall.SCQueryRoomInfo - * @instance - */ - SCQueryRoomInfo.prototype.GameIds = $util.emptyArray; - - /** - * SCQueryRoomInfo GameSite. - * @member {number} GameSite - * @memberof gamehall.SCQueryRoomInfo - * @instance - */ - SCQueryRoomInfo.prototype.GameSite = 0; - - /** - * SCQueryRoomInfo RoomInfo. - * @member {Array.} RoomInfo - * @memberof gamehall.SCQueryRoomInfo - * @instance - */ - SCQueryRoomInfo.prototype.RoomInfo = $util.emptyArray; - - /** - * SCQueryRoomInfo OpRetCode. - * @member {gamehall.OpResultCode_Game} OpRetCode - * @memberof gamehall.SCQueryRoomInfo - * @instance - */ - SCQueryRoomInfo.prototype.OpRetCode = 0; - - /** - * Creates a new SCQueryRoomInfo instance using the specified properties. - * @function create - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {gamehall.ISCQueryRoomInfo=} [properties] Properties to set - * @returns {gamehall.SCQueryRoomInfo} SCQueryRoomInfo instance - */ - SCQueryRoomInfo.create = function create(properties) { - return new SCQueryRoomInfo(properties); - }; - - /** - * Encodes the specified SCQueryRoomInfo message. Does not implicitly {@link gamehall.SCQueryRoomInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {gamehall.ISCQueryRoomInfo} message SCQueryRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCQueryRoomInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameIds != null && message.GameIds.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.GameIds.length; ++i) - writer.int32(message.GameIds[i]); - writer.ldelim(); - } - if (message.GameSite != null && Object.hasOwnProperty.call(message, "GameSite")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameSite); - if (message.RoomInfo != null && message.RoomInfo.length) - for (var i = 0; i < message.RoomInfo.length; ++i) - $root.gamehall.QRoomInfo.encode(message.RoomInfo[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.OpRetCode); - return writer; - }; - - /** - * Encodes the specified SCQueryRoomInfo message, length delimited. Does not implicitly {@link gamehall.SCQueryRoomInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {gamehall.ISCQueryRoomInfo} message SCQueryRoomInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCQueryRoomInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCQueryRoomInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCQueryRoomInfo} SCQueryRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCQueryRoomInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCQueryRoomInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameIds && message.GameIds.length)) - message.GameIds = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.GameIds.push(reader.int32()); - } else - message.GameIds.push(reader.int32()); - break; - } - case 2: { - message.GameSite = reader.int32(); - break; - } - case 3: { - if (!(message.RoomInfo && message.RoomInfo.length)) - message.RoomInfo = []; - message.RoomInfo.push($root.gamehall.QRoomInfo.decode(reader, reader.uint32())); - break; - } - case 4: { - message.OpRetCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCQueryRoomInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCQueryRoomInfo} SCQueryRoomInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCQueryRoomInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCQueryRoomInfo message. - * @function verify - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCQueryRoomInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameIds != null && message.hasOwnProperty("GameIds")) { - if (!Array.isArray(message.GameIds)) - return "GameIds: array expected"; - for (var i = 0; i < message.GameIds.length; ++i) - if (!$util.isInteger(message.GameIds[i])) - return "GameIds: integer[] expected"; - } - if (message.GameSite != null && message.hasOwnProperty("GameSite")) - if (!$util.isInteger(message.GameSite)) - return "GameSite: integer expected"; - if (message.RoomInfo != null && message.hasOwnProperty("RoomInfo")) { - if (!Array.isArray(message.RoomInfo)) - return "RoomInfo: array expected"; - for (var i = 0; i < message.RoomInfo.length; ++i) { - var error = $root.gamehall.QRoomInfo.verify(message.RoomInfo[i]); - if (error) - return "RoomInfo." + error; - } - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCQueryRoomInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCQueryRoomInfo} SCQueryRoomInfo - */ - SCQueryRoomInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCQueryRoomInfo) - return object; - var message = new $root.gamehall.SCQueryRoomInfo(); - if (object.GameIds) { - if (!Array.isArray(object.GameIds)) - throw TypeError(".gamehall.SCQueryRoomInfo.GameIds: array expected"); - message.GameIds = []; - for (var i = 0; i < object.GameIds.length; ++i) - message.GameIds[i] = object.GameIds[i] | 0; - } - if (object.GameSite != null) - message.GameSite = object.GameSite | 0; - if (object.RoomInfo) { - if (!Array.isArray(object.RoomInfo)) - throw TypeError(".gamehall.SCQueryRoomInfo.RoomInfo: array expected"); - message.RoomInfo = []; - for (var i = 0; i < object.RoomInfo.length; ++i) { - if (typeof object.RoomInfo[i] !== "object") - throw TypeError(".gamehall.SCQueryRoomInfo.RoomInfo: object expected"); - message.RoomInfo[i] = $root.gamehall.QRoomInfo.fromObject(object.RoomInfo[i]); - } - } - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpRetCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpRetCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpRetCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpRetCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpRetCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpRetCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpRetCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpRetCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpRetCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpRetCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpRetCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpRetCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpRetCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpRetCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpRetCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpRetCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpRetCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpRetCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpRetCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpRetCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpRetCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpRetCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpRetCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpRetCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpRetCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpRetCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpRetCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpRetCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpRetCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpRetCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpRetCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpRetCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpRetCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpRetCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpRetCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpRetCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCQueryRoomInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {gamehall.SCQueryRoomInfo} message SCQueryRoomInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCQueryRoomInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.GameIds = []; - object.RoomInfo = []; - } - if (options.defaults) { - object.GameSite = 0; - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.GameIds && message.GameIds.length) { - object.GameIds = []; - for (var j = 0; j < message.GameIds.length; ++j) - object.GameIds[j] = message.GameIds[j]; - } - if (message.GameSite != null && message.hasOwnProperty("GameSite")) - object.GameSite = message.GameSite; - if (message.RoomInfo && message.RoomInfo.length) { - object.RoomInfo = []; - for (var j = 0; j < message.RoomInfo.length; ++j) - object.RoomInfo[j] = $root.gamehall.QRoomInfo.toObject(message.RoomInfo[j], options); - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Game[message.OpRetCode] : message.OpRetCode; - return object; - }; - - /** - * Converts this SCQueryRoomInfo to JSON. - * @function toJSON - * @memberof gamehall.SCQueryRoomInfo - * @instance - * @returns {Object.} JSON object - */ - SCQueryRoomInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCQueryRoomInfo - * @function getTypeUrl - * @memberof gamehall.SCQueryRoomInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCQueryRoomInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCQueryRoomInfo"; - }; - - return SCQueryRoomInfo; - })(); - - gamehall.CSGameObserve = (function() { - - /** - * Properties of a CSGameObserve. - * @memberof gamehall - * @interface ICSGameObserve - * @property {number|null} [GameId] CSGameObserve GameId - * @property {boolean|null} [StartOrEnd] CSGameObserve StartOrEnd - */ - - /** - * Constructs a new CSGameObserve. - * @memberof gamehall - * @classdesc Represents a CSGameObserve. - * @implements ICSGameObserve - * @constructor - * @param {gamehall.ICSGameObserve=} [properties] Properties to set - */ - function CSGameObserve(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSGameObserve GameId. - * @member {number} GameId - * @memberof gamehall.CSGameObserve - * @instance - */ - CSGameObserve.prototype.GameId = 0; - - /** - * CSGameObserve StartOrEnd. - * @member {boolean} StartOrEnd - * @memberof gamehall.CSGameObserve - * @instance - */ - CSGameObserve.prototype.StartOrEnd = false; - - /** - * Creates a new CSGameObserve instance using the specified properties. - * @function create - * @memberof gamehall.CSGameObserve - * @static - * @param {gamehall.ICSGameObserve=} [properties] Properties to set - * @returns {gamehall.CSGameObserve} CSGameObserve instance - */ - CSGameObserve.create = function create(properties) { - return new CSGameObserve(properties); - }; - - /** - * Encodes the specified CSGameObserve message. Does not implicitly {@link gamehall.CSGameObserve.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGameObserve - * @static - * @param {gamehall.ICSGameObserve} message CSGameObserve message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGameObserve.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.StartOrEnd != null && Object.hasOwnProperty.call(message, "StartOrEnd")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.StartOrEnd); - return writer; - }; - - /** - * Encodes the specified CSGameObserve message, length delimited. Does not implicitly {@link gamehall.CSGameObserve.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGameObserve - * @static - * @param {gamehall.ICSGameObserve} message CSGameObserve message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGameObserve.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGameObserve message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGameObserve - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGameObserve} CSGameObserve - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGameObserve.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGameObserve(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.StartOrEnd = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGameObserve message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGameObserve - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGameObserve} CSGameObserve - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGameObserve.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGameObserve message. - * @function verify - * @memberof gamehall.CSGameObserve - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGameObserve.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.StartOrEnd != null && message.hasOwnProperty("StartOrEnd")) - if (typeof message.StartOrEnd !== "boolean") - return "StartOrEnd: boolean expected"; - return null; - }; - - /** - * Creates a CSGameObserve message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGameObserve - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGameObserve} CSGameObserve - */ - CSGameObserve.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGameObserve) - return object; - var message = new $root.gamehall.CSGameObserve(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.StartOrEnd != null) - message.StartOrEnd = Boolean(object.StartOrEnd); - return message; - }; - - /** - * Creates a plain object from a CSGameObserve message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGameObserve - * @static - * @param {gamehall.CSGameObserve} message CSGameObserve - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGameObserve.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.StartOrEnd = false; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.StartOrEnd != null && message.hasOwnProperty("StartOrEnd")) - object.StartOrEnd = message.StartOrEnd; - return object; - }; - - /** - * Converts this CSGameObserve to JSON. - * @function toJSON - * @memberof gamehall.CSGameObserve - * @instance - * @returns {Object.} JSON object - */ - CSGameObserve.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGameObserve - * @function getTypeUrl - * @memberof gamehall.CSGameObserve - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGameObserve.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGameObserve"; - }; - - return CSGameObserve; - })(); - - gamehall.GameSubRecord = (function() { - - /** - * Properties of a GameSubRecord. - * @memberof gamehall - * @interface IGameSubRecord - * @property {number|null} [GameFreeId] GameSubRecord GameFreeId - * @property {number|null} [LogCnt] GameSubRecord LogCnt - * @property {number|null} [NewLog] GameSubRecord NewLog - * @property {Array.|null} [TotleLog] GameSubRecord TotleLog - */ - - /** - * Constructs a new GameSubRecord. - * @memberof gamehall - * @classdesc Represents a GameSubRecord. - * @implements IGameSubRecord - * @constructor - * @param {gamehall.IGameSubRecord=} [properties] Properties to set - */ - function GameSubRecord(properties) { - this.TotleLog = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameSubRecord GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.GameSubRecord - * @instance - */ - GameSubRecord.prototype.GameFreeId = 0; - - /** - * GameSubRecord LogCnt. - * @member {number} LogCnt - * @memberof gamehall.GameSubRecord - * @instance - */ - GameSubRecord.prototype.LogCnt = 0; - - /** - * GameSubRecord NewLog. - * @member {number} NewLog - * @memberof gamehall.GameSubRecord - * @instance - */ - GameSubRecord.prototype.NewLog = 0; - - /** - * GameSubRecord TotleLog. - * @member {Array.} TotleLog - * @memberof gamehall.GameSubRecord - * @instance - */ - GameSubRecord.prototype.TotleLog = $util.emptyArray; - - /** - * Creates a new GameSubRecord instance using the specified properties. - * @function create - * @memberof gamehall.GameSubRecord - * @static - * @param {gamehall.IGameSubRecord=} [properties] Properties to set - * @returns {gamehall.GameSubRecord} GameSubRecord instance - */ - GameSubRecord.create = function create(properties) { - return new GameSubRecord(properties); - }; - - /** - * Encodes the specified GameSubRecord message. Does not implicitly {@link gamehall.GameSubRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.GameSubRecord - * @static - * @param {gamehall.IGameSubRecord} message GameSubRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameSubRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.LogCnt != null && Object.hasOwnProperty.call(message, "LogCnt")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.LogCnt); - if (message.NewLog != null && Object.hasOwnProperty.call(message, "NewLog")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.NewLog); - if (message.TotleLog != null && message.TotleLog.length) { - writer.uint32(/* id 4, wireType 2 =*/34).fork(); - for (var i = 0; i < message.TotleLog.length; ++i) - writer.int32(message.TotleLog[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified GameSubRecord message, length delimited. Does not implicitly {@link gamehall.GameSubRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameSubRecord - * @static - * @param {gamehall.IGameSubRecord} message GameSubRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameSubRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameSubRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameSubRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameSubRecord} GameSubRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameSubRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameSubRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.LogCnt = reader.int32(); - break; - } - case 3: { - message.NewLog = reader.int32(); - break; - } - case 4: { - if (!(message.TotleLog && message.TotleLog.length)) - message.TotleLog = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.TotleLog.push(reader.int32()); - } else - message.TotleLog.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameSubRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameSubRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameSubRecord} GameSubRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameSubRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameSubRecord message. - * @function verify - * @memberof gamehall.GameSubRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameSubRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.LogCnt != null && message.hasOwnProperty("LogCnt")) - if (!$util.isInteger(message.LogCnt)) - return "LogCnt: integer expected"; - if (message.NewLog != null && message.hasOwnProperty("NewLog")) - if (!$util.isInteger(message.NewLog)) - return "NewLog: integer expected"; - if (message.TotleLog != null && message.hasOwnProperty("TotleLog")) { - if (!Array.isArray(message.TotleLog)) - return "TotleLog: array expected"; - for (var i = 0; i < message.TotleLog.length; ++i) - if (!$util.isInteger(message.TotleLog[i])) - return "TotleLog: integer[] expected"; - } - return null; - }; - - /** - * Creates a GameSubRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameSubRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameSubRecord} GameSubRecord - */ - GameSubRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameSubRecord) - return object; - var message = new $root.gamehall.GameSubRecord(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.LogCnt != null) - message.LogCnt = object.LogCnt | 0; - if (object.NewLog != null) - message.NewLog = object.NewLog | 0; - if (object.TotleLog) { - if (!Array.isArray(object.TotleLog)) - throw TypeError(".gamehall.GameSubRecord.TotleLog: array expected"); - message.TotleLog = []; - for (var i = 0; i < object.TotleLog.length; ++i) - message.TotleLog[i] = object.TotleLog[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a GameSubRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameSubRecord - * @static - * @param {gamehall.GameSubRecord} message GameSubRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameSubRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.TotleLog = []; - if (options.defaults) { - object.GameFreeId = 0; - object.LogCnt = 0; - object.NewLog = 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.LogCnt != null && message.hasOwnProperty("LogCnt")) - object.LogCnt = message.LogCnt; - if (message.NewLog != null && message.hasOwnProperty("NewLog")) - object.NewLog = message.NewLog; - if (message.TotleLog && message.TotleLog.length) { - object.TotleLog = []; - for (var j = 0; j < message.TotleLog.length; ++j) - object.TotleLog[j] = message.TotleLog[j]; - } - return object; - }; - - /** - * Converts this GameSubRecord to JSON. - * @function toJSON - * @memberof gamehall.GameSubRecord - * @instance - * @returns {Object.} JSON object - */ - GameSubRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameSubRecord - * @function getTypeUrl - * @memberof gamehall.GameSubRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameSubRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameSubRecord"; - }; - - return GameSubRecord; - })(); - - gamehall.SCGameSubList = (function() { - - /** - * Properties of a SCGameSubList. - * @memberof gamehall - * @interface ISCGameSubList - * @property {Array.|null} [List] SCGameSubList List - */ - - /** - * Constructs a new SCGameSubList. - * @memberof gamehall - * @classdesc Represents a SCGameSubList. - * @implements ISCGameSubList - * @constructor - * @param {gamehall.ISCGameSubList=} [properties] Properties to set - */ - function SCGameSubList(properties) { - this.List = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGameSubList List. - * @member {Array.} List - * @memberof gamehall.SCGameSubList - * @instance - */ - SCGameSubList.prototype.List = $util.emptyArray; - - /** - * Creates a new SCGameSubList instance using the specified properties. - * @function create - * @memberof gamehall.SCGameSubList - * @static - * @param {gamehall.ISCGameSubList=} [properties] Properties to set - * @returns {gamehall.SCGameSubList} SCGameSubList instance - */ - SCGameSubList.create = function create(properties) { - return new SCGameSubList(properties); - }; - - /** - * Encodes the specified SCGameSubList message. Does not implicitly {@link gamehall.SCGameSubList.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGameSubList - * @static - * @param {gamehall.ISCGameSubList} message SCGameSubList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGameSubList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.List != null && message.List.length) - for (var i = 0; i < message.List.length; ++i) - $root.gamehall.GameSubRecord.encode(message.List[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCGameSubList message, length delimited. Does not implicitly {@link gamehall.SCGameSubList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGameSubList - * @static - * @param {gamehall.ISCGameSubList} message SCGameSubList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGameSubList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGameSubList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGameSubList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGameSubList} SCGameSubList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGameSubList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGameSubList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.List && message.List.length)) - message.List = []; - message.List.push($root.gamehall.GameSubRecord.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGameSubList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGameSubList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGameSubList} SCGameSubList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGameSubList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGameSubList message. - * @function verify - * @memberof gamehall.SCGameSubList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGameSubList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.List != null && message.hasOwnProperty("List")) { - if (!Array.isArray(message.List)) - return "List: array expected"; - for (var i = 0; i < message.List.length; ++i) { - var error = $root.gamehall.GameSubRecord.verify(message.List[i]); - if (error) - return "List." + error; - } - } - return null; - }; - - /** - * Creates a SCGameSubList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGameSubList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGameSubList} SCGameSubList - */ - SCGameSubList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGameSubList) - return object; - var message = new $root.gamehall.SCGameSubList(); - if (object.List) { - if (!Array.isArray(object.List)) - throw TypeError(".gamehall.SCGameSubList.List: array expected"); - message.List = []; - for (var i = 0; i < object.List.length; ++i) { - if (typeof object.List[i] !== "object") - throw TypeError(".gamehall.SCGameSubList.List: object expected"); - message.List[i] = $root.gamehall.GameSubRecord.fromObject(object.List[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCGameSubList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGameSubList - * @static - * @param {gamehall.SCGameSubList} message SCGameSubList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGameSubList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.List = []; - if (message.List && message.List.length) { - object.List = []; - for (var j = 0; j < message.List.length; ++j) - object.List[j] = $root.gamehall.GameSubRecord.toObject(message.List[j], options); - } - return object; - }; - - /** - * Converts this SCGameSubList to JSON. - * @function toJSON - * @memberof gamehall.SCGameSubList - * @instance - * @returns {Object.} JSON object - */ - SCGameSubList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGameSubList - * @function getTypeUrl - * @memberof gamehall.SCGameSubList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGameSubList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGameSubList"; - }; - - return SCGameSubList; - })(); - - gamehall.GameState = (function() { - - /** - * Properties of a GameState. - * @memberof gamehall - * @interface IGameState - * @property {number|null} [GameFreeId] GameState GameFreeId - * @property {number|Long|null} [Ts] GameState Ts - * @property {number|null} [Sec] GameState Sec - */ - - /** - * Constructs a new GameState. - * @memberof gamehall - * @classdesc Represents a GameState. - * @implements IGameState - * @constructor - * @param {gamehall.IGameState=} [properties] Properties to set - */ - function GameState(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameState GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.GameState - * @instance - */ - GameState.prototype.GameFreeId = 0; - - /** - * GameState Ts. - * @member {number|Long} Ts - * @memberof gamehall.GameState - * @instance - */ - GameState.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * GameState Sec. - * @member {number} Sec - * @memberof gamehall.GameState - * @instance - */ - GameState.prototype.Sec = 0; - - /** - * Creates a new GameState instance using the specified properties. - * @function create - * @memberof gamehall.GameState - * @static - * @param {gamehall.IGameState=} [properties] Properties to set - * @returns {gamehall.GameState} GameState instance - */ - GameState.create = function create(properties) { - return new GameState(properties); - }; - - /** - * Encodes the specified GameState message. Does not implicitly {@link gamehall.GameState.verify|verify} messages. - * @function encode - * @memberof gamehall.GameState - * @static - * @param {gamehall.IGameState} message GameState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameState.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Ts); - if (message.Sec != null && Object.hasOwnProperty.call(message, "Sec")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Sec); - return writer; - }; - - /** - * Encodes the specified GameState message, length delimited. Does not implicitly {@link gamehall.GameState.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameState - * @static - * @param {gamehall.IGameState} message GameState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameState.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameState message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameState} GameState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameState.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameState(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.Ts = reader.int64(); - break; - } - case 3: { - message.Sec = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameState message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameState} GameState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameState.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameState message. - * @function verify - * @memberof gamehall.GameState - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameState.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - if (message.Sec != null && message.hasOwnProperty("Sec")) - if (!$util.isInteger(message.Sec)) - return "Sec: integer expected"; - return null; - }; - - /** - * Creates a GameState message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameState - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameState} GameState - */ - GameState.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameState) - return object; - var message = new $root.gamehall.GameState(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - if (object.Sec != null) - message.Sec = object.Sec | 0; - return message; - }; - - /** - * Creates a plain object from a GameState message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameState - * @static - * @param {gamehall.GameState} message GameState - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameState.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - object.Sec = 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - if (message.Sec != null && message.hasOwnProperty("Sec")) - object.Sec = message.Sec; - return object; - }; - - /** - * Converts this GameState to JSON. - * @function toJSON - * @memberof gamehall.GameState - * @instance - * @returns {Object.} JSON object - */ - GameState.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameState - * @function getTypeUrl - * @memberof gamehall.GameState - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameState.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameState"; - }; - - return GameState; - })(); - - gamehall.SCGameState = (function() { - - /** - * Properties of a SCGameState. - * @memberof gamehall - * @interface ISCGameState - * @property {Array.|null} [List] SCGameState List - */ - - /** - * Constructs a new SCGameState. - * @memberof gamehall - * @classdesc Represents a SCGameState. - * @implements ISCGameState - * @constructor - * @param {gamehall.ISCGameState=} [properties] Properties to set - */ - function SCGameState(properties) { - this.List = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGameState List. - * @member {Array.} List - * @memberof gamehall.SCGameState - * @instance - */ - SCGameState.prototype.List = $util.emptyArray; - - /** - * Creates a new SCGameState instance using the specified properties. - * @function create - * @memberof gamehall.SCGameState - * @static - * @param {gamehall.ISCGameState=} [properties] Properties to set - * @returns {gamehall.SCGameState} SCGameState instance - */ - SCGameState.create = function create(properties) { - return new SCGameState(properties); - }; - - /** - * Encodes the specified SCGameState message. Does not implicitly {@link gamehall.SCGameState.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGameState - * @static - * @param {gamehall.ISCGameState} message SCGameState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGameState.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.List != null && message.List.length) - for (var i = 0; i < message.List.length; ++i) - $root.gamehall.GameState.encode(message.List[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCGameState message, length delimited. Does not implicitly {@link gamehall.SCGameState.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGameState - * @static - * @param {gamehall.ISCGameState} message SCGameState message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGameState.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGameState message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGameState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGameState} SCGameState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGameState.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGameState(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.List && message.List.length)) - message.List = []; - message.List.push($root.gamehall.GameState.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGameState message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGameState - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGameState} SCGameState - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGameState.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGameState message. - * @function verify - * @memberof gamehall.SCGameState - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGameState.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.List != null && message.hasOwnProperty("List")) { - if (!Array.isArray(message.List)) - return "List: array expected"; - for (var i = 0; i < message.List.length; ++i) { - var error = $root.gamehall.GameState.verify(message.List[i]); - if (error) - return "List." + error; - } - } - return null; - }; - - /** - * Creates a SCGameState message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGameState - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGameState} SCGameState - */ - SCGameState.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGameState) - return object; - var message = new $root.gamehall.SCGameState(); - if (object.List) { - if (!Array.isArray(object.List)) - throw TypeError(".gamehall.SCGameState.List: array expected"); - message.List = []; - for (var i = 0; i < object.List.length; ++i) { - if (typeof object.List[i] !== "object") - throw TypeError(".gamehall.SCGameState.List: object expected"); - message.List[i] = $root.gamehall.GameState.fromObject(object.List[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCGameState message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGameState - * @static - * @param {gamehall.SCGameState} message SCGameState - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGameState.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.List = []; - if (message.List && message.List.length) { - object.List = []; - for (var j = 0; j < message.List.length; ++j) - object.List[j] = $root.gamehall.GameState.toObject(message.List[j], options); - } - return object; - }; - - /** - * Converts this SCGameState to JSON. - * @function toJSON - * @memberof gamehall.SCGameState - * @instance - * @returns {Object.} JSON object - */ - SCGameState.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGameState - * @function getTypeUrl - * @memberof gamehall.SCGameState - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGameState.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGameState"; - }; - - return SCGameState; - })(); - - gamehall.LotteryData = (function() { - - /** - * Properties of a LotteryData. - * @memberof gamehall - * @interface ILotteryData - * @property {number|null} [GameFreeId] LotteryData GameFreeId - * @property {number|Long|null} [Value] LotteryData Value - */ - - /** - * Constructs a new LotteryData. - * @memberof gamehall - * @classdesc Represents a LotteryData. - * @implements ILotteryData - * @constructor - * @param {gamehall.ILotteryData=} [properties] Properties to set - */ - function LotteryData(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * LotteryData GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.LotteryData - * @instance - */ - LotteryData.prototype.GameFreeId = 0; - - /** - * LotteryData Value. - * @member {number|Long} Value - * @memberof gamehall.LotteryData - * @instance - */ - LotteryData.prototype.Value = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new LotteryData instance using the specified properties. - * @function create - * @memberof gamehall.LotteryData - * @static - * @param {gamehall.ILotteryData=} [properties] Properties to set - * @returns {gamehall.LotteryData} LotteryData instance - */ - LotteryData.create = function create(properties) { - return new LotteryData(properties); - }; - - /** - * Encodes the specified LotteryData message. Does not implicitly {@link gamehall.LotteryData.verify|verify} messages. - * @function encode - * @memberof gamehall.LotteryData - * @static - * @param {gamehall.ILotteryData} message LotteryData message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - LotteryData.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Value != null && Object.hasOwnProperty.call(message, "Value")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Value); - return writer; - }; - - /** - * Encodes the specified LotteryData message, length delimited. Does not implicitly {@link gamehall.LotteryData.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.LotteryData - * @static - * @param {gamehall.ILotteryData} message LotteryData message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - LotteryData.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a LotteryData message from the specified reader or buffer. - * @function decode - * @memberof gamehall.LotteryData - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.LotteryData} LotteryData - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - LotteryData.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.LotteryData(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.Value = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a LotteryData message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.LotteryData - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.LotteryData} LotteryData - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - LotteryData.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a LotteryData message. - * @function verify - * @memberof gamehall.LotteryData - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - LotteryData.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Value != null && message.hasOwnProperty("Value")) - if (!$util.isInteger(message.Value) && !(message.Value && $util.isInteger(message.Value.low) && $util.isInteger(message.Value.high))) - return "Value: integer|Long expected"; - return null; - }; - - /** - * Creates a LotteryData message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.LotteryData - * @static - * @param {Object.} object Plain object - * @returns {gamehall.LotteryData} LotteryData - */ - LotteryData.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.LotteryData) - return object; - var message = new $root.gamehall.LotteryData(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Value != null) - if ($util.Long) - (message.Value = $util.Long.fromValue(object.Value)).unsigned = false; - else if (typeof object.Value === "string") - message.Value = parseInt(object.Value, 10); - else if (typeof object.Value === "number") - message.Value = object.Value; - else if (typeof object.Value === "object") - message.Value = new $util.LongBits(object.Value.low >>> 0, object.Value.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a LotteryData message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.LotteryData - * @static - * @param {gamehall.LotteryData} message LotteryData - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - LotteryData.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Value = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Value = options.longs === String ? "0" : 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Value != null && message.hasOwnProperty("Value")) - if (typeof message.Value === "number") - object.Value = options.longs === String ? String(message.Value) : message.Value; - else - object.Value = options.longs === String ? $util.Long.prototype.toString.call(message.Value) : options.longs === Number ? new $util.LongBits(message.Value.low >>> 0, message.Value.high >>> 0).toNumber() : message.Value; - return object; - }; - - /** - * Converts this LotteryData to JSON. - * @function toJSON - * @memberof gamehall.LotteryData - * @instance - * @returns {Object.} JSON object - */ - LotteryData.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for LotteryData - * @function getTypeUrl - * @memberof gamehall.LotteryData - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - LotteryData.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.LotteryData"; - }; - - return LotteryData; - })(); - - gamehall.SCLotterySync = (function() { - - /** - * Properties of a SCLotterySync. - * @memberof gamehall - * @interface ISCLotterySync - * @property {Array.|null} [Datas] SCLotterySync Datas - */ - - /** - * Constructs a new SCLotterySync. - * @memberof gamehall - * @classdesc Represents a SCLotterySync. - * @implements ISCLotterySync - * @constructor - * @param {gamehall.ISCLotterySync=} [properties] Properties to set - */ - function SCLotterySync(properties) { - this.Datas = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLotterySync Datas. - * @member {Array.} Datas - * @memberof gamehall.SCLotterySync - * @instance - */ - SCLotterySync.prototype.Datas = $util.emptyArray; - - /** - * Creates a new SCLotterySync instance using the specified properties. - * @function create - * @memberof gamehall.SCLotterySync - * @static - * @param {gamehall.ISCLotterySync=} [properties] Properties to set - * @returns {gamehall.SCLotterySync} SCLotterySync instance - */ - SCLotterySync.create = function create(properties) { - return new SCLotterySync(properties); - }; - - /** - * Encodes the specified SCLotterySync message. Does not implicitly {@link gamehall.SCLotterySync.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLotterySync - * @static - * @param {gamehall.ISCLotterySync} message SCLotterySync message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotterySync.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Datas != null && message.Datas.length) - for (var i = 0; i < message.Datas.length; ++i) - $root.gamehall.LotteryData.encode(message.Datas[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCLotterySync message, length delimited. Does not implicitly {@link gamehall.SCLotterySync.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLotterySync - * @static - * @param {gamehall.ISCLotterySync} message SCLotterySync message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotterySync.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLotterySync message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLotterySync - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLotterySync} SCLotterySync - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotterySync.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLotterySync(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Datas && message.Datas.length)) - message.Datas = []; - message.Datas.push($root.gamehall.LotteryData.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLotterySync message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLotterySync - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLotterySync} SCLotterySync - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotterySync.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLotterySync message. - * @function verify - * @memberof gamehall.SCLotterySync - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLotterySync.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Datas != null && message.hasOwnProperty("Datas")) { - if (!Array.isArray(message.Datas)) - return "Datas: array expected"; - for (var i = 0; i < message.Datas.length; ++i) { - var error = $root.gamehall.LotteryData.verify(message.Datas[i]); - if (error) - return "Datas." + error; - } - } - return null; - }; - - /** - * Creates a SCLotterySync message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLotterySync - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLotterySync} SCLotterySync - */ - SCLotterySync.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLotterySync) - return object; - var message = new $root.gamehall.SCLotterySync(); - if (object.Datas) { - if (!Array.isArray(object.Datas)) - throw TypeError(".gamehall.SCLotterySync.Datas: array expected"); - message.Datas = []; - for (var i = 0; i < object.Datas.length; ++i) { - if (typeof object.Datas[i] !== "object") - throw TypeError(".gamehall.SCLotterySync.Datas: object expected"); - message.Datas[i] = $root.gamehall.LotteryData.fromObject(object.Datas[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCLotterySync message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLotterySync - * @static - * @param {gamehall.SCLotterySync} message SCLotterySync - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLotterySync.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Datas = []; - if (message.Datas && message.Datas.length) { - object.Datas = []; - for (var j = 0; j < message.Datas.length; ++j) - object.Datas[j] = $root.gamehall.LotteryData.toObject(message.Datas[j], options); - } - return object; - }; - - /** - * Converts this SCLotterySync to JSON. - * @function toJSON - * @memberof gamehall.SCLotterySync - * @instance - * @returns {Object.} JSON object - */ - SCLotterySync.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLotterySync - * @function getTypeUrl - * @memberof gamehall.SCLotterySync - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLotterySync.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLotterySync"; - }; - - return SCLotterySync; - })(); - - gamehall.CSLotteryLog = (function() { - - /** - * Properties of a CSLotteryLog. - * @memberof gamehall - * @interface ICSLotteryLog - * @property {number|null} [GameFreeId] CSLotteryLog GameFreeId - */ - - /** - * Constructs a new CSLotteryLog. - * @memberof gamehall - * @classdesc Represents a CSLotteryLog. - * @implements ICSLotteryLog - * @constructor - * @param {gamehall.ICSLotteryLog=} [properties] Properties to set - */ - function CSLotteryLog(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSLotteryLog GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.CSLotteryLog - * @instance - */ - CSLotteryLog.prototype.GameFreeId = 0; - - /** - * Creates a new CSLotteryLog instance using the specified properties. - * @function create - * @memberof gamehall.CSLotteryLog - * @static - * @param {gamehall.ICSLotteryLog=} [properties] Properties to set - * @returns {gamehall.CSLotteryLog} CSLotteryLog instance - */ - CSLotteryLog.create = function create(properties) { - return new CSLotteryLog(properties); - }; - - /** - * Encodes the specified CSLotteryLog message. Does not implicitly {@link gamehall.CSLotteryLog.verify|verify} messages. - * @function encode - * @memberof gamehall.CSLotteryLog - * @static - * @param {gamehall.ICSLotteryLog} message CSLotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLotteryLog.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - return writer; - }; - - /** - * Encodes the specified CSLotteryLog message, length delimited. Does not implicitly {@link gamehall.CSLotteryLog.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSLotteryLog - * @static - * @param {gamehall.ICSLotteryLog} message CSLotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSLotteryLog.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSLotteryLog message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSLotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSLotteryLog} CSLotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLotteryLog.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSLotteryLog(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSLotteryLog message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSLotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSLotteryLog} CSLotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSLotteryLog.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSLotteryLog message. - * @function verify - * @memberof gamehall.CSLotteryLog - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSLotteryLog.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - return null; - }; - - /** - * Creates a CSLotteryLog message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSLotteryLog - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSLotteryLog} CSLotteryLog - */ - CSLotteryLog.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSLotteryLog) - return object; - var message = new $root.gamehall.CSLotteryLog(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - return message; - }; - - /** - * Creates a plain object from a CSLotteryLog message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSLotteryLog - * @static - * @param {gamehall.CSLotteryLog} message CSLotteryLog - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSLotteryLog.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.GameFreeId = 0; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - return object; - }; - - /** - * Converts this CSLotteryLog to JSON. - * @function toJSON - * @memberof gamehall.CSLotteryLog - * @instance - * @returns {Object.} JSON object - */ - CSLotteryLog.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSLotteryLog - * @function getTypeUrl - * @memberof gamehall.CSLotteryLog - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSLotteryLog.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSLotteryLog"; - }; - - return CSLotteryLog; - })(); - - gamehall.LotteryLog = (function() { - - /** - * Properties of a LotteryLog. - * @memberof gamehall - * @interface ILotteryLog - * @property {number|null} [Time] LotteryLog Time - * @property {string|null} [NickName] LotteryLog NickName - * @property {Array.|null} [Card] LotteryLog Card - * @property {number|null} [Kind] LotteryLog Kind - * @property {number|null} [Coin] LotteryLog Coin - */ - - /** - * Constructs a new LotteryLog. - * @memberof gamehall - * @classdesc Represents a LotteryLog. - * @implements ILotteryLog - * @constructor - * @param {gamehall.ILotteryLog=} [properties] Properties to set - */ - function LotteryLog(properties) { - this.Card = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * LotteryLog Time. - * @member {number} Time - * @memberof gamehall.LotteryLog - * @instance - */ - LotteryLog.prototype.Time = 0; - - /** - * LotteryLog NickName. - * @member {string} NickName - * @memberof gamehall.LotteryLog - * @instance - */ - LotteryLog.prototype.NickName = ""; - - /** - * LotteryLog Card. - * @member {Array.} Card - * @memberof gamehall.LotteryLog - * @instance - */ - LotteryLog.prototype.Card = $util.emptyArray; - - /** - * LotteryLog Kind. - * @member {number} Kind - * @memberof gamehall.LotteryLog - * @instance - */ - LotteryLog.prototype.Kind = 0; - - /** - * LotteryLog Coin. - * @member {number} Coin - * @memberof gamehall.LotteryLog - * @instance - */ - LotteryLog.prototype.Coin = 0; - - /** - * Creates a new LotteryLog instance using the specified properties. - * @function create - * @memberof gamehall.LotteryLog - * @static - * @param {gamehall.ILotteryLog=} [properties] Properties to set - * @returns {gamehall.LotteryLog} LotteryLog instance - */ - LotteryLog.create = function create(properties) { - return new LotteryLog(properties); - }; - - /** - * Encodes the specified LotteryLog message. Does not implicitly {@link gamehall.LotteryLog.verify|verify} messages. - * @function encode - * @memberof gamehall.LotteryLog - * @static - * @param {gamehall.ILotteryLog} message LotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - LotteryLog.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Time != null && Object.hasOwnProperty.call(message, "Time")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Time); - if (message.NickName != null && Object.hasOwnProperty.call(message, "NickName")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.NickName); - if (message.Card != null && message.Card.length) { - writer.uint32(/* id 3, wireType 2 =*/26).fork(); - for (var i = 0; i < message.Card.length; ++i) - writer.int32(message.Card[i]); - writer.ldelim(); - } - if (message.Kind != null && Object.hasOwnProperty.call(message, "Kind")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.Kind); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.Coin); - return writer; - }; - - /** - * Encodes the specified LotteryLog message, length delimited. Does not implicitly {@link gamehall.LotteryLog.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.LotteryLog - * @static - * @param {gamehall.ILotteryLog} message LotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - LotteryLog.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a LotteryLog message from the specified reader or buffer. - * @function decode - * @memberof gamehall.LotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.LotteryLog} LotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - LotteryLog.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.LotteryLog(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Time = reader.int32(); - break; - } - case 2: { - message.NickName = reader.string(); - break; - } - case 3: { - if (!(message.Card && message.Card.length)) - message.Card = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Card.push(reader.int32()); - } else - message.Card.push(reader.int32()); - break; - } - case 4: { - message.Kind = reader.int32(); - break; - } - case 5: { - message.Coin = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a LotteryLog message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.LotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.LotteryLog} LotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - LotteryLog.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a LotteryLog message. - * @function verify - * @memberof gamehall.LotteryLog - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - LotteryLog.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Time != null && message.hasOwnProperty("Time")) - if (!$util.isInteger(message.Time)) - return "Time: integer expected"; - if (message.NickName != null && message.hasOwnProperty("NickName")) - if (!$util.isString(message.NickName)) - return "NickName: string expected"; - if (message.Card != null && message.hasOwnProperty("Card")) { - if (!Array.isArray(message.Card)) - return "Card: array expected"; - for (var i = 0; i < message.Card.length; ++i) - if (!$util.isInteger(message.Card[i])) - return "Card: integer[] expected"; - } - if (message.Kind != null && message.hasOwnProperty("Kind")) - if (!$util.isInteger(message.Kind)) - return "Kind: integer expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin)) - return "Coin: integer expected"; - return null; - }; - - /** - * Creates a LotteryLog message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.LotteryLog - * @static - * @param {Object.} object Plain object - * @returns {gamehall.LotteryLog} LotteryLog - */ - LotteryLog.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.LotteryLog) - return object; - var message = new $root.gamehall.LotteryLog(); - if (object.Time != null) - message.Time = object.Time | 0; - if (object.NickName != null) - message.NickName = String(object.NickName); - if (object.Card) { - if (!Array.isArray(object.Card)) - throw TypeError(".gamehall.LotteryLog.Card: array expected"); - message.Card = []; - for (var i = 0; i < object.Card.length; ++i) - message.Card[i] = object.Card[i] | 0; - } - if (object.Kind != null) - message.Kind = object.Kind | 0; - if (object.Coin != null) - message.Coin = object.Coin | 0; - return message; - }; - - /** - * Creates a plain object from a LotteryLog message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.LotteryLog - * @static - * @param {gamehall.LotteryLog} message LotteryLog - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - LotteryLog.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Card = []; - if (options.defaults) { - object.Time = 0; - object.NickName = ""; - object.Kind = 0; - object.Coin = 0; - } - if (message.Time != null && message.hasOwnProperty("Time")) - object.Time = message.Time; - if (message.NickName != null && message.hasOwnProperty("NickName")) - object.NickName = message.NickName; - if (message.Card && message.Card.length) { - object.Card = []; - for (var j = 0; j < message.Card.length; ++j) - object.Card[j] = message.Card[j]; - } - if (message.Kind != null && message.hasOwnProperty("Kind")) - object.Kind = message.Kind; - if (message.Coin != null && message.hasOwnProperty("Coin")) - object.Coin = message.Coin; - return object; - }; - - /** - * Converts this LotteryLog to JSON. - * @function toJSON - * @memberof gamehall.LotteryLog - * @instance - * @returns {Object.} JSON object - */ - LotteryLog.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for LotteryLog - * @function getTypeUrl - * @memberof gamehall.LotteryLog - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - LotteryLog.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.LotteryLog"; - }; - - return LotteryLog; - })(); - - gamehall.SCLotteryLog = (function() { - - /** - * Properties of a SCLotteryLog. - * @memberof gamehall - * @interface ISCLotteryLog - * @property {number|null} [GameFreeId] SCLotteryLog GameFreeId - * @property {Array.|null} [Logs] SCLotteryLog Logs - */ - - /** - * Constructs a new SCLotteryLog. - * @memberof gamehall - * @classdesc Represents a SCLotteryLog. - * @implements ISCLotteryLog - * @constructor - * @param {gamehall.ISCLotteryLog=} [properties] Properties to set - */ - function SCLotteryLog(properties) { - this.Logs = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLotteryLog GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.SCLotteryLog - * @instance - */ - SCLotteryLog.prototype.GameFreeId = 0; - - /** - * SCLotteryLog Logs. - * @member {Array.} Logs - * @memberof gamehall.SCLotteryLog - * @instance - */ - SCLotteryLog.prototype.Logs = $util.emptyArray; - - /** - * Creates a new SCLotteryLog instance using the specified properties. - * @function create - * @memberof gamehall.SCLotteryLog - * @static - * @param {gamehall.ISCLotteryLog=} [properties] Properties to set - * @returns {gamehall.SCLotteryLog} SCLotteryLog instance - */ - SCLotteryLog.create = function create(properties) { - return new SCLotteryLog(properties); - }; - - /** - * Encodes the specified SCLotteryLog message. Does not implicitly {@link gamehall.SCLotteryLog.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLotteryLog - * @static - * @param {gamehall.ISCLotteryLog} message SCLotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotteryLog.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.Logs != null && message.Logs.length) - for (var i = 0; i < message.Logs.length; ++i) - $root.gamehall.LotteryLog.encode(message.Logs[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCLotteryLog message, length delimited. Does not implicitly {@link gamehall.SCLotteryLog.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLotteryLog - * @static - * @param {gamehall.ISCLotteryLog} message SCLotteryLog message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotteryLog.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLotteryLog message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLotteryLog} SCLotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotteryLog.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLotteryLog(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - if (!(message.Logs && message.Logs.length)) - message.Logs = []; - message.Logs.push($root.gamehall.LotteryLog.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLotteryLog message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLotteryLog - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLotteryLog} SCLotteryLog - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotteryLog.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLotteryLog message. - * @function verify - * @memberof gamehall.SCLotteryLog - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLotteryLog.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.Logs != null && message.hasOwnProperty("Logs")) { - if (!Array.isArray(message.Logs)) - return "Logs: array expected"; - for (var i = 0; i < message.Logs.length; ++i) { - var error = $root.gamehall.LotteryLog.verify(message.Logs[i]); - if (error) - return "Logs." + error; - } - } - return null; - }; - - /** - * Creates a SCLotteryLog message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLotteryLog - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLotteryLog} SCLotteryLog - */ - SCLotteryLog.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLotteryLog) - return object; - var message = new $root.gamehall.SCLotteryLog(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.Logs) { - if (!Array.isArray(object.Logs)) - throw TypeError(".gamehall.SCLotteryLog.Logs: array expected"); - message.Logs = []; - for (var i = 0; i < object.Logs.length; ++i) { - if (typeof object.Logs[i] !== "object") - throw TypeError(".gamehall.SCLotteryLog.Logs: object expected"); - message.Logs[i] = $root.gamehall.LotteryLog.fromObject(object.Logs[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCLotteryLog message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLotteryLog - * @static - * @param {gamehall.SCLotteryLog} message SCLotteryLog - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLotteryLog.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Logs = []; - if (options.defaults) - object.GameFreeId = 0; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.Logs && message.Logs.length) { - object.Logs = []; - for (var j = 0; j < message.Logs.length; ++j) - object.Logs[j] = $root.gamehall.LotteryLog.toObject(message.Logs[j], options); - } - return object; - }; - - /** - * Converts this SCLotteryLog to JSON. - * @function toJSON - * @memberof gamehall.SCLotteryLog - * @instance - * @returns {Object.} JSON object - */ - SCLotteryLog.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLotteryLog - * @function getTypeUrl - * @memberof gamehall.SCLotteryLog - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLotteryLog.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLotteryLog"; - }; - - return SCLotteryLog; - })(); - - gamehall.SCLotteryBill = (function() { - - /** - * Properties of a SCLotteryBill. - * @memberof gamehall - * @interface ISCLotteryBill - * @property {number|null} [GameFreeId] SCLotteryBill GameFreeId - * @property {number|null} [SnId] SCLotteryBill SnId - * @property {string|null} [Name] SCLotteryBill Name - * @property {number|null} [Kind] SCLotteryBill Kind - * @property {Array.|null} [Card] SCLotteryBill Card - * @property {number|Long|null} [Value] SCLotteryBill Value - */ - - /** - * Constructs a new SCLotteryBill. - * @memberof gamehall - * @classdesc Represents a SCLotteryBill. - * @implements ISCLotteryBill - * @constructor - * @param {gamehall.ISCLotteryBill=} [properties] Properties to set - */ - function SCLotteryBill(properties) { - this.Card = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCLotteryBill GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.GameFreeId = 0; - - /** - * SCLotteryBill SnId. - * @member {number} SnId - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.SnId = 0; - - /** - * SCLotteryBill Name. - * @member {string} Name - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.Name = ""; - - /** - * SCLotteryBill Kind. - * @member {number} Kind - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.Kind = 0; - - /** - * SCLotteryBill Card. - * @member {Array.} Card - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.Card = $util.emptyArray; - - /** - * SCLotteryBill Value. - * @member {number|Long} Value - * @memberof gamehall.SCLotteryBill - * @instance - */ - SCLotteryBill.prototype.Value = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCLotteryBill instance using the specified properties. - * @function create - * @memberof gamehall.SCLotteryBill - * @static - * @param {gamehall.ISCLotteryBill=} [properties] Properties to set - * @returns {gamehall.SCLotteryBill} SCLotteryBill instance - */ - SCLotteryBill.create = function create(properties) { - return new SCLotteryBill(properties); - }; - - /** - * Encodes the specified SCLotteryBill message. Does not implicitly {@link gamehall.SCLotteryBill.verify|verify} messages. - * @function encode - * @memberof gamehall.SCLotteryBill - * @static - * @param {gamehall.ISCLotteryBill} message SCLotteryBill message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotteryBill.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.SnId != null && Object.hasOwnProperty.call(message, "SnId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.SnId); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Name); - if (message.Kind != null && Object.hasOwnProperty.call(message, "Kind")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.Kind); - if (message.Card != null && message.Card.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.Card.length; ++i) - writer.int32(message.Card[i]); - writer.ldelim(); - } - if (message.Value != null && Object.hasOwnProperty.call(message, "Value")) - writer.uint32(/* id 6, wireType 0 =*/48).int64(message.Value); - return writer; - }; - - /** - * Encodes the specified SCLotteryBill message, length delimited. Does not implicitly {@link gamehall.SCLotteryBill.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCLotteryBill - * @static - * @param {gamehall.ISCLotteryBill} message SCLotteryBill message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCLotteryBill.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCLotteryBill message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCLotteryBill - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCLotteryBill} SCLotteryBill - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotteryBill.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCLotteryBill(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.SnId = reader.int32(); - break; - } - case 3: { - message.Name = reader.string(); - break; - } - case 4: { - message.Kind = reader.int32(); - break; - } - case 5: { - if (!(message.Card && message.Card.length)) - message.Card = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Card.push(reader.int32()); - } else - message.Card.push(reader.int32()); - break; - } - case 6: { - message.Value = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCLotteryBill message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCLotteryBill - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCLotteryBill} SCLotteryBill - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCLotteryBill.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCLotteryBill message. - * @function verify - * @memberof gamehall.SCLotteryBill - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCLotteryBill.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.SnId != null && message.hasOwnProperty("SnId")) - if (!$util.isInteger(message.SnId)) - return "SnId: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.Kind != null && message.hasOwnProperty("Kind")) - if (!$util.isInteger(message.Kind)) - return "Kind: integer expected"; - if (message.Card != null && message.hasOwnProperty("Card")) { - if (!Array.isArray(message.Card)) - return "Card: array expected"; - for (var i = 0; i < message.Card.length; ++i) - if (!$util.isInteger(message.Card[i])) - return "Card: integer[] expected"; - } - if (message.Value != null && message.hasOwnProperty("Value")) - if (!$util.isInteger(message.Value) && !(message.Value && $util.isInteger(message.Value.low) && $util.isInteger(message.Value.high))) - return "Value: integer|Long expected"; - return null; - }; - - /** - * Creates a SCLotteryBill message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCLotteryBill - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCLotteryBill} SCLotteryBill - */ - SCLotteryBill.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCLotteryBill) - return object; - var message = new $root.gamehall.SCLotteryBill(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.SnId != null) - message.SnId = object.SnId | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.Kind != null) - message.Kind = object.Kind | 0; - if (object.Card) { - if (!Array.isArray(object.Card)) - throw TypeError(".gamehall.SCLotteryBill.Card: array expected"); - message.Card = []; - for (var i = 0; i < object.Card.length; ++i) - message.Card[i] = object.Card[i] | 0; - } - if (object.Value != null) - if ($util.Long) - (message.Value = $util.Long.fromValue(object.Value)).unsigned = false; - else if (typeof object.Value === "string") - message.Value = parseInt(object.Value, 10); - else if (typeof object.Value === "number") - message.Value = object.Value; - else if (typeof object.Value === "object") - message.Value = new $util.LongBits(object.Value.low >>> 0, object.Value.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCLotteryBill message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCLotteryBill - * @static - * @param {gamehall.SCLotteryBill} message SCLotteryBill - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCLotteryBill.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Card = []; - if (options.defaults) { - object.GameFreeId = 0; - object.SnId = 0; - object.Name = ""; - object.Kind = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Value = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Value = options.longs === String ? "0" : 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.SnId != null && message.hasOwnProperty("SnId")) - object.SnId = message.SnId; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.Kind != null && message.hasOwnProperty("Kind")) - object.Kind = message.Kind; - if (message.Card && message.Card.length) { - object.Card = []; - for (var j = 0; j < message.Card.length; ++j) - object.Card[j] = message.Card[j]; - } - if (message.Value != null && message.hasOwnProperty("Value")) - if (typeof message.Value === "number") - object.Value = options.longs === String ? String(message.Value) : message.Value; - else - object.Value = options.longs === String ? $util.Long.prototype.toString.call(message.Value) : options.longs === Number ? new $util.LongBits(message.Value.low >>> 0, message.Value.high >>> 0).toNumber() : message.Value; - return object; - }; - - /** - * Converts this SCLotteryBill to JSON. - * @function toJSON - * @memberof gamehall.SCLotteryBill - * @instance - * @returns {Object.} JSON object - */ - SCLotteryBill.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCLotteryBill - * @function getTypeUrl - * @memberof gamehall.SCLotteryBill - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCLotteryBill.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCLotteryBill"; - }; - - return SCLotteryBill; - })(); - - gamehall.GameConfig1 = (function() { - - /** - * Properties of a GameConfig1. - * @memberof gamehall - * @interface IGameConfig1 - * @property {number|null} [LogicId] GameConfig1 LogicId - * @property {number|null} [LimitCoin] GameConfig1 LimitCoin - * @property {number|null} [MaxCoinLimit] GameConfig1 MaxCoinLimit - * @property {number|null} [BaseScore] GameConfig1 BaseScore - * @property {Array.|null} [OtherIntParams] GameConfig1 OtherIntParams - * @property {number|null} [BetScore] GameConfig1 BetScore - * @property {Array.|null} [MaxBetCoin] GameConfig1 MaxBetCoin - * @property {number|null} [MatchMode] GameConfig1 MatchMode - * @property {number|Long|null} [LotteryCoin] GameConfig1 LotteryCoin - * @property {string|null} [LotteryCfg] GameConfig1 LotteryCfg - * @property {boolean|null} [Status] GameConfig1 Status - */ - - /** - * Constructs a new GameConfig1. - * @memberof gamehall - * @classdesc Represents a GameConfig1. - * @implements IGameConfig1 - * @constructor - * @param {gamehall.IGameConfig1=} [properties] Properties to set - */ - function GameConfig1(properties) { - this.OtherIntParams = []; - this.MaxBetCoin = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameConfig1 LogicId. - * @member {number} LogicId - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.LogicId = 0; - - /** - * GameConfig1 LimitCoin. - * @member {number} LimitCoin - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.LimitCoin = 0; - - /** - * GameConfig1 MaxCoinLimit. - * @member {number} MaxCoinLimit - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.MaxCoinLimit = 0; - - /** - * GameConfig1 BaseScore. - * @member {number} BaseScore - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.BaseScore = 0; - - /** - * GameConfig1 OtherIntParams. - * @member {Array.} OtherIntParams - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.OtherIntParams = $util.emptyArray; - - /** - * GameConfig1 BetScore. - * @member {number} BetScore - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.BetScore = 0; - - /** - * GameConfig1 MaxBetCoin. - * @member {Array.} MaxBetCoin - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.MaxBetCoin = $util.emptyArray; - - /** - * GameConfig1 MatchMode. - * @member {number} MatchMode - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.MatchMode = 0; - - /** - * GameConfig1 LotteryCoin. - * @member {number|Long} LotteryCoin - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.LotteryCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * GameConfig1 LotteryCfg. - * @member {string} LotteryCfg - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.LotteryCfg = ""; - - /** - * GameConfig1 Status. - * @member {boolean} Status - * @memberof gamehall.GameConfig1 - * @instance - */ - GameConfig1.prototype.Status = false; - - /** - * Creates a new GameConfig1 instance using the specified properties. - * @function create - * @memberof gamehall.GameConfig1 - * @static - * @param {gamehall.IGameConfig1=} [properties] Properties to set - * @returns {gamehall.GameConfig1} GameConfig1 instance - */ - GameConfig1.create = function create(properties) { - return new GameConfig1(properties); - }; - - /** - * Encodes the specified GameConfig1 message. Does not implicitly {@link gamehall.GameConfig1.verify|verify} messages. - * @function encode - * @memberof gamehall.GameConfig1 - * @static - * @param {gamehall.IGameConfig1} message GameConfig1 message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameConfig1.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.LogicId != null && Object.hasOwnProperty.call(message, "LogicId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.LogicId); - if (message.LimitCoin != null && Object.hasOwnProperty.call(message, "LimitCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.LimitCoin); - if (message.MaxCoinLimit != null && Object.hasOwnProperty.call(message, "MaxCoinLimit")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.MaxCoinLimit); - if (message.BaseScore != null && Object.hasOwnProperty.call(message, "BaseScore")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.BaseScore); - if (message.OtherIntParams != null && message.OtherIntParams.length) { - writer.uint32(/* id 5, wireType 2 =*/42).fork(); - for (var i = 0; i < message.OtherIntParams.length; ++i) - writer.int32(message.OtherIntParams[i]); - writer.ldelim(); - } - if (message.BetScore != null && Object.hasOwnProperty.call(message, "BetScore")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.BetScore); - if (message.MaxBetCoin != null && message.MaxBetCoin.length) { - writer.uint32(/* id 7, wireType 2 =*/58).fork(); - for (var i = 0; i < message.MaxBetCoin.length; ++i) - writer.int32(message.MaxBetCoin[i]); - writer.ldelim(); - } - if (message.MatchMode != null && Object.hasOwnProperty.call(message, "MatchMode")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.MatchMode); - if (message.LotteryCoin != null && Object.hasOwnProperty.call(message, "LotteryCoin")) - writer.uint32(/* id 9, wireType 0 =*/72).int64(message.LotteryCoin); - if (message.LotteryCfg != null && Object.hasOwnProperty.call(message, "LotteryCfg")) - writer.uint32(/* id 10, wireType 2 =*/82).string(message.LotteryCfg); - if (message.Status != null && Object.hasOwnProperty.call(message, "Status")) - writer.uint32(/* id 11, wireType 0 =*/88).bool(message.Status); - return writer; - }; - - /** - * Encodes the specified GameConfig1 message, length delimited. Does not implicitly {@link gamehall.GameConfig1.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameConfig1 - * @static - * @param {gamehall.IGameConfig1} message GameConfig1 message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameConfig1.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameConfig1 message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameConfig1 - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameConfig1} GameConfig1 - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameConfig1.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameConfig1(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.LogicId = reader.int32(); - break; - } - case 2: { - message.LimitCoin = reader.int32(); - break; - } - case 3: { - message.MaxCoinLimit = reader.int32(); - break; - } - case 4: { - message.BaseScore = reader.int32(); - break; - } - case 5: { - if (!(message.OtherIntParams && message.OtherIntParams.length)) - message.OtherIntParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OtherIntParams.push(reader.int32()); - } else - message.OtherIntParams.push(reader.int32()); - break; - } - case 6: { - message.BetScore = reader.int32(); - break; - } - case 7: { - if (!(message.MaxBetCoin && message.MaxBetCoin.length)) - message.MaxBetCoin = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.MaxBetCoin.push(reader.int32()); - } else - message.MaxBetCoin.push(reader.int32()); - break; - } - case 8: { - message.MatchMode = reader.int32(); - break; - } - case 9: { - message.LotteryCoin = reader.int64(); - break; - } - case 10: { - message.LotteryCfg = reader.string(); - break; - } - case 11: { - message.Status = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameConfig1 message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameConfig1 - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameConfig1} GameConfig1 - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameConfig1.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameConfig1 message. - * @function verify - * @memberof gamehall.GameConfig1 - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameConfig1.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.LogicId != null && message.hasOwnProperty("LogicId")) - if (!$util.isInteger(message.LogicId)) - return "LogicId: integer expected"; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - if (!$util.isInteger(message.LimitCoin)) - return "LimitCoin: integer expected"; - if (message.MaxCoinLimit != null && message.hasOwnProperty("MaxCoinLimit")) - if (!$util.isInteger(message.MaxCoinLimit)) - return "MaxCoinLimit: integer expected"; - if (message.BaseScore != null && message.hasOwnProperty("BaseScore")) - if (!$util.isInteger(message.BaseScore)) - return "BaseScore: integer expected"; - if (message.OtherIntParams != null && message.hasOwnProperty("OtherIntParams")) { - if (!Array.isArray(message.OtherIntParams)) - return "OtherIntParams: array expected"; - for (var i = 0; i < message.OtherIntParams.length; ++i) - if (!$util.isInteger(message.OtherIntParams[i])) - return "OtherIntParams: integer[] expected"; - } - if (message.BetScore != null && message.hasOwnProperty("BetScore")) - if (!$util.isInteger(message.BetScore)) - return "BetScore: integer expected"; - if (message.MaxBetCoin != null && message.hasOwnProperty("MaxBetCoin")) { - if (!Array.isArray(message.MaxBetCoin)) - return "MaxBetCoin: array expected"; - for (var i = 0; i < message.MaxBetCoin.length; ++i) - if (!$util.isInteger(message.MaxBetCoin[i])) - return "MaxBetCoin: integer[] expected"; - } - if (message.MatchMode != null && message.hasOwnProperty("MatchMode")) - if (!$util.isInteger(message.MatchMode)) - return "MatchMode: integer expected"; - if (message.LotteryCoin != null && message.hasOwnProperty("LotteryCoin")) - if (!$util.isInteger(message.LotteryCoin) && !(message.LotteryCoin && $util.isInteger(message.LotteryCoin.low) && $util.isInteger(message.LotteryCoin.high))) - return "LotteryCoin: integer|Long expected"; - if (message.LotteryCfg != null && message.hasOwnProperty("LotteryCfg")) - if (!$util.isString(message.LotteryCfg)) - return "LotteryCfg: string expected"; - if (message.Status != null && message.hasOwnProperty("Status")) - if (typeof message.Status !== "boolean") - return "Status: boolean expected"; - return null; - }; - - /** - * Creates a GameConfig1 message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameConfig1 - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameConfig1} GameConfig1 - */ - GameConfig1.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameConfig1) - return object; - var message = new $root.gamehall.GameConfig1(); - if (object.LogicId != null) - message.LogicId = object.LogicId | 0; - if (object.LimitCoin != null) - message.LimitCoin = object.LimitCoin | 0; - if (object.MaxCoinLimit != null) - message.MaxCoinLimit = object.MaxCoinLimit | 0; - if (object.BaseScore != null) - message.BaseScore = object.BaseScore | 0; - if (object.OtherIntParams) { - if (!Array.isArray(object.OtherIntParams)) - throw TypeError(".gamehall.GameConfig1.OtherIntParams: array expected"); - message.OtherIntParams = []; - for (var i = 0; i < object.OtherIntParams.length; ++i) - message.OtherIntParams[i] = object.OtherIntParams[i] | 0; - } - if (object.BetScore != null) - message.BetScore = object.BetScore | 0; - if (object.MaxBetCoin) { - if (!Array.isArray(object.MaxBetCoin)) - throw TypeError(".gamehall.GameConfig1.MaxBetCoin: array expected"); - message.MaxBetCoin = []; - for (var i = 0; i < object.MaxBetCoin.length; ++i) - message.MaxBetCoin[i] = object.MaxBetCoin[i] | 0; - } - if (object.MatchMode != null) - message.MatchMode = object.MatchMode | 0; - if (object.LotteryCoin != null) - if ($util.Long) - (message.LotteryCoin = $util.Long.fromValue(object.LotteryCoin)).unsigned = false; - else if (typeof object.LotteryCoin === "string") - message.LotteryCoin = parseInt(object.LotteryCoin, 10); - else if (typeof object.LotteryCoin === "number") - message.LotteryCoin = object.LotteryCoin; - else if (typeof object.LotteryCoin === "object") - message.LotteryCoin = new $util.LongBits(object.LotteryCoin.low >>> 0, object.LotteryCoin.high >>> 0).toNumber(); - if (object.LotteryCfg != null) - message.LotteryCfg = String(object.LotteryCfg); - if (object.Status != null) - message.Status = Boolean(object.Status); - return message; - }; - - /** - * Creates a plain object from a GameConfig1 message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameConfig1 - * @static - * @param {gamehall.GameConfig1} message GameConfig1 - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameConfig1.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.OtherIntParams = []; - object.MaxBetCoin = []; - } - if (options.defaults) { - object.LogicId = 0; - object.LimitCoin = 0; - object.MaxCoinLimit = 0; - object.BaseScore = 0; - object.BetScore = 0; - object.MatchMode = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.LotteryCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.LotteryCoin = options.longs === String ? "0" : 0; - object.LotteryCfg = ""; - object.Status = false; - } - if (message.LogicId != null && message.hasOwnProperty("LogicId")) - object.LogicId = message.LogicId; - if (message.LimitCoin != null && message.hasOwnProperty("LimitCoin")) - object.LimitCoin = message.LimitCoin; - if (message.MaxCoinLimit != null && message.hasOwnProperty("MaxCoinLimit")) - object.MaxCoinLimit = message.MaxCoinLimit; - if (message.BaseScore != null && message.hasOwnProperty("BaseScore")) - object.BaseScore = message.BaseScore; - if (message.OtherIntParams && message.OtherIntParams.length) { - object.OtherIntParams = []; - for (var j = 0; j < message.OtherIntParams.length; ++j) - object.OtherIntParams[j] = message.OtherIntParams[j]; - } - if (message.BetScore != null && message.hasOwnProperty("BetScore")) - object.BetScore = message.BetScore; - if (message.MaxBetCoin && message.MaxBetCoin.length) { - object.MaxBetCoin = []; - for (var j = 0; j < message.MaxBetCoin.length; ++j) - object.MaxBetCoin[j] = message.MaxBetCoin[j]; - } - if (message.MatchMode != null && message.hasOwnProperty("MatchMode")) - object.MatchMode = message.MatchMode; - if (message.LotteryCoin != null && message.hasOwnProperty("LotteryCoin")) - if (typeof message.LotteryCoin === "number") - object.LotteryCoin = options.longs === String ? String(message.LotteryCoin) : message.LotteryCoin; - else - object.LotteryCoin = options.longs === String ? $util.Long.prototype.toString.call(message.LotteryCoin) : options.longs === Number ? new $util.LongBits(message.LotteryCoin.low >>> 0, message.LotteryCoin.high >>> 0).toNumber() : message.LotteryCoin; - if (message.LotteryCfg != null && message.hasOwnProperty("LotteryCfg")) - object.LotteryCfg = message.LotteryCfg; - if (message.Status != null && message.hasOwnProperty("Status")) - object.Status = message.Status; - return object; - }; - - /** - * Converts this GameConfig1 to JSON. - * @function toJSON - * @memberof gamehall.GameConfig1 - * @instance - * @returns {Object.} JSON object - */ - GameConfig1.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameConfig1 - * @function getTypeUrl - * @memberof gamehall.GameConfig1 - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameConfig1.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameConfig1"; - }; - - return GameConfig1; - })(); - - gamehall.CSGetGameConfig = (function() { - - /** - * Properties of a CSGetGameConfig. - * @memberof gamehall - * @interface ICSGetGameConfig - * @property {string|null} [Platform] CSGetGameConfig Platform - * @property {string|null} [Channel] CSGetGameConfig Channel - * @property {number|null} [GameId] CSGetGameConfig GameId - */ - - /** - * Constructs a new CSGetGameConfig. - * @memberof gamehall - * @classdesc Represents a CSGetGameConfig. - * @implements ICSGetGameConfig - * @constructor - * @param {gamehall.ICSGetGameConfig=} [properties] Properties to set - */ - function CSGetGameConfig(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSGetGameConfig Platform. - * @member {string} Platform - * @memberof gamehall.CSGetGameConfig - * @instance - */ - CSGetGameConfig.prototype.Platform = ""; - - /** - * CSGetGameConfig Channel. - * @member {string} Channel - * @memberof gamehall.CSGetGameConfig - * @instance - */ - CSGetGameConfig.prototype.Channel = ""; - - /** - * CSGetGameConfig GameId. - * @member {number} GameId - * @memberof gamehall.CSGetGameConfig - * @instance - */ - CSGetGameConfig.prototype.GameId = 0; - - /** - * Creates a new CSGetGameConfig instance using the specified properties. - * @function create - * @memberof gamehall.CSGetGameConfig - * @static - * @param {gamehall.ICSGetGameConfig=} [properties] Properties to set - * @returns {gamehall.CSGetGameConfig} CSGetGameConfig instance - */ - CSGetGameConfig.create = function create(properties) { - return new CSGetGameConfig(properties); - }; - - /** - * Encodes the specified CSGetGameConfig message. Does not implicitly {@link gamehall.CSGetGameConfig.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetGameConfig - * @static - * @param {gamehall.ICSGetGameConfig} message CSGetGameConfig message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetGameConfig.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Platform != null && Object.hasOwnProperty.call(message, "Platform")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.Platform); - if (message.Channel != null && Object.hasOwnProperty.call(message, "Channel")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Channel); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified CSGetGameConfig message, length delimited. Does not implicitly {@link gamehall.CSGetGameConfig.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetGameConfig - * @static - * @param {gamehall.ICSGetGameConfig} message CSGetGameConfig message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetGameConfig.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetGameConfig message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetGameConfig - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetGameConfig} CSGetGameConfig - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetGameConfig.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetGameConfig(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Platform = reader.string(); - break; - } - case 2: { - message.Channel = reader.string(); - break; - } - case 3: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetGameConfig message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetGameConfig - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetGameConfig} CSGetGameConfig - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetGameConfig.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetGameConfig message. - * @function verify - * @memberof gamehall.CSGetGameConfig - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetGameConfig.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Platform != null && message.hasOwnProperty("Platform")) - if (!$util.isString(message.Platform)) - return "Platform: string expected"; - if (message.Channel != null && message.hasOwnProperty("Channel")) - if (!$util.isString(message.Channel)) - return "Channel: string expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a CSGetGameConfig message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetGameConfig - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetGameConfig} CSGetGameConfig - */ - CSGetGameConfig.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetGameConfig) - return object; - var message = new $root.gamehall.CSGetGameConfig(); - if (object.Platform != null) - message.Platform = String(object.Platform); - if (object.Channel != null) - message.Channel = String(object.Channel); - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a CSGetGameConfig message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetGameConfig - * @static - * @param {gamehall.CSGetGameConfig} message CSGetGameConfig - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetGameConfig.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Platform = ""; - object.Channel = ""; - object.GameId = 0; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - object.Platform = message.Platform; - if (message.Channel != null && message.hasOwnProperty("Channel")) - object.Channel = message.Channel; - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this CSGetGameConfig to JSON. - * @function toJSON - * @memberof gamehall.CSGetGameConfig - * @instance - * @returns {Object.} JSON object - */ - CSGetGameConfig.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetGameConfig - * @function getTypeUrl - * @memberof gamehall.CSGetGameConfig - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetGameConfig.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetGameConfig"; - }; - - return CSGetGameConfig; - })(); - - gamehall.SCGetGameConfig = (function() { - - /** - * Properties of a SCGetGameConfig. - * @memberof gamehall - * @interface ISCGetGameConfig - * @property {Array.|null} [GameCfg] SCGetGameConfig GameCfg - * @property {number|null} [GameId] SCGetGameConfig GameId - */ - - /** - * Constructs a new SCGetGameConfig. - * @memberof gamehall - * @classdesc Represents a SCGetGameConfig. - * @implements ISCGetGameConfig - * @constructor - * @param {gamehall.ISCGetGameConfig=} [properties] Properties to set - */ - function SCGetGameConfig(properties) { - this.GameCfg = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetGameConfig GameCfg. - * @member {Array.} GameCfg - * @memberof gamehall.SCGetGameConfig - * @instance - */ - SCGetGameConfig.prototype.GameCfg = $util.emptyArray; - - /** - * SCGetGameConfig GameId. - * @member {number} GameId - * @memberof gamehall.SCGetGameConfig - * @instance - */ - SCGetGameConfig.prototype.GameId = 0; - - /** - * Creates a new SCGetGameConfig instance using the specified properties. - * @function create - * @memberof gamehall.SCGetGameConfig - * @static - * @param {gamehall.ISCGetGameConfig=} [properties] Properties to set - * @returns {gamehall.SCGetGameConfig} SCGetGameConfig instance - */ - SCGetGameConfig.create = function create(properties) { - return new SCGetGameConfig(properties); - }; - - /** - * Encodes the specified SCGetGameConfig message. Does not implicitly {@link gamehall.SCGetGameConfig.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetGameConfig - * @static - * @param {gamehall.ISCGetGameConfig} message SCGetGameConfig message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetGameConfig.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameCfg != null && message.GameCfg.length) - for (var i = 0; i < message.GameCfg.length; ++i) - $root.gamehall.GameConfig1.encode(message.GameCfg[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified SCGetGameConfig message, length delimited. Does not implicitly {@link gamehall.SCGetGameConfig.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetGameConfig - * @static - * @param {gamehall.ISCGetGameConfig} message SCGetGameConfig message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetGameConfig.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetGameConfig message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetGameConfig - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetGameConfig} SCGetGameConfig - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetGameConfig.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetGameConfig(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameCfg && message.GameCfg.length)) - message.GameCfg = []; - message.GameCfg.push($root.gamehall.GameConfig1.decode(reader, reader.uint32())); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetGameConfig message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetGameConfig - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetGameConfig} SCGetGameConfig - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetGameConfig.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetGameConfig message. - * @function verify - * @memberof gamehall.SCGetGameConfig - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetGameConfig.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameCfg != null && message.hasOwnProperty("GameCfg")) { - if (!Array.isArray(message.GameCfg)) - return "GameCfg: array expected"; - for (var i = 0; i < message.GameCfg.length; ++i) { - var error = $root.gamehall.GameConfig1.verify(message.GameCfg[i]); - if (error) - return "GameCfg." + error; - } - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a SCGetGameConfig message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetGameConfig - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetGameConfig} SCGetGameConfig - */ - SCGetGameConfig.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetGameConfig) - return object; - var message = new $root.gamehall.SCGetGameConfig(); - if (object.GameCfg) { - if (!Array.isArray(object.GameCfg)) - throw TypeError(".gamehall.SCGetGameConfig.GameCfg: array expected"); - message.GameCfg = []; - for (var i = 0; i < object.GameCfg.length; ++i) { - if (typeof object.GameCfg[i] !== "object") - throw TypeError(".gamehall.SCGetGameConfig.GameCfg: object expected"); - message.GameCfg[i] = $root.gamehall.GameConfig1.fromObject(object.GameCfg[i]); - } - } - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a SCGetGameConfig message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetGameConfig - * @static - * @param {gamehall.SCGetGameConfig} message SCGetGameConfig - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetGameConfig.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameCfg = []; - if (options.defaults) - object.GameId = 0; - if (message.GameCfg && message.GameCfg.length) { - object.GameCfg = []; - for (var j = 0; j < message.GameCfg.length; ++j) - object.GameCfg[j] = $root.gamehall.GameConfig1.toObject(message.GameCfg[j], options); - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this SCGetGameConfig to JSON. - * @function toJSON - * @memberof gamehall.SCGetGameConfig - * @instance - * @returns {Object.} JSON object - */ - SCGetGameConfig.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetGameConfig - * @function getTypeUrl - * @memberof gamehall.SCGetGameConfig - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetGameConfig.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetGameConfig"; - }; - - return SCGetGameConfig; - })(); - - gamehall.SCChangeGameStatus = (function() { - - /** - * Properties of a SCChangeGameStatus. - * @memberof gamehall - * @interface ISCChangeGameStatus - * @property {Array.|null} [GameCfg] SCChangeGameStatus GameCfg - */ - - /** - * Constructs a new SCChangeGameStatus. - * @memberof gamehall - * @classdesc Represents a SCChangeGameStatus. - * @implements ISCChangeGameStatus - * @constructor - * @param {gamehall.ISCChangeGameStatus=} [properties] Properties to set - */ - function SCChangeGameStatus(properties) { - this.GameCfg = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCChangeGameStatus GameCfg. - * @member {Array.} GameCfg - * @memberof gamehall.SCChangeGameStatus - * @instance - */ - SCChangeGameStatus.prototype.GameCfg = $util.emptyArray; - - /** - * Creates a new SCChangeGameStatus instance using the specified properties. - * @function create - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {gamehall.ISCChangeGameStatus=} [properties] Properties to set - * @returns {gamehall.SCChangeGameStatus} SCChangeGameStatus instance - */ - SCChangeGameStatus.create = function create(properties) { - return new SCChangeGameStatus(properties); - }; - - /** - * Encodes the specified SCChangeGameStatus message. Does not implicitly {@link gamehall.SCChangeGameStatus.verify|verify} messages. - * @function encode - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {gamehall.ISCChangeGameStatus} message SCChangeGameStatus message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCChangeGameStatus.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameCfg != null && message.GameCfg.length) - for (var i = 0; i < message.GameCfg.length; ++i) - $root.gamehall.GameConfig1.encode(message.GameCfg[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCChangeGameStatus message, length delimited. Does not implicitly {@link gamehall.SCChangeGameStatus.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {gamehall.ISCChangeGameStatus} message SCChangeGameStatus message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCChangeGameStatus.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCChangeGameStatus message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCChangeGameStatus} SCChangeGameStatus - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCChangeGameStatus.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCChangeGameStatus(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameCfg && message.GameCfg.length)) - message.GameCfg = []; - message.GameCfg.push($root.gamehall.GameConfig1.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCChangeGameStatus message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCChangeGameStatus} SCChangeGameStatus - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCChangeGameStatus.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCChangeGameStatus message. - * @function verify - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCChangeGameStatus.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameCfg != null && message.hasOwnProperty("GameCfg")) { - if (!Array.isArray(message.GameCfg)) - return "GameCfg: array expected"; - for (var i = 0; i < message.GameCfg.length; ++i) { - var error = $root.gamehall.GameConfig1.verify(message.GameCfg[i]); - if (error) - return "GameCfg." + error; - } - } - return null; - }; - - /** - * Creates a SCChangeGameStatus message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCChangeGameStatus} SCChangeGameStatus - */ - SCChangeGameStatus.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCChangeGameStatus) - return object; - var message = new $root.gamehall.SCChangeGameStatus(); - if (object.GameCfg) { - if (!Array.isArray(object.GameCfg)) - throw TypeError(".gamehall.SCChangeGameStatus.GameCfg: array expected"); - message.GameCfg = []; - for (var i = 0; i < object.GameCfg.length; ++i) { - if (typeof object.GameCfg[i] !== "object") - throw TypeError(".gamehall.SCChangeGameStatus.GameCfg: object expected"); - message.GameCfg[i] = $root.gamehall.GameConfig1.fromObject(object.GameCfg[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCChangeGameStatus message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {gamehall.SCChangeGameStatus} message SCChangeGameStatus - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCChangeGameStatus.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameCfg = []; - if (message.GameCfg && message.GameCfg.length) { - object.GameCfg = []; - for (var j = 0; j < message.GameCfg.length; ++j) - object.GameCfg[j] = $root.gamehall.GameConfig1.toObject(message.GameCfg[j], options); - } - return object; - }; - - /** - * Converts this SCChangeGameStatus to JSON. - * @function toJSON - * @memberof gamehall.SCChangeGameStatus - * @instance - * @returns {Object.} JSON object - */ - SCChangeGameStatus.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCChangeGameStatus - * @function getTypeUrl - * @memberof gamehall.SCChangeGameStatus - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCChangeGameStatus.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCChangeGameStatus"; - }; - - return SCChangeGameStatus; - })(); - - gamehall.SCChangeEntrySwitch = (function() { - - /** - * Properties of a SCChangeEntrySwitch. - * @memberof gamehall - * @interface ISCChangeEntrySwitch - * @property {Array.|null} [GameCfg] SCChangeEntrySwitch GameCfg - */ - - /** - * Constructs a new SCChangeEntrySwitch. - * @memberof gamehall - * @classdesc Represents a SCChangeEntrySwitch. - * @implements ISCChangeEntrySwitch - * @constructor - * @param {gamehall.ISCChangeEntrySwitch=} [properties] Properties to set - */ - function SCChangeEntrySwitch(properties) { - this.GameCfg = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCChangeEntrySwitch GameCfg. - * @member {Array.} GameCfg - * @memberof gamehall.SCChangeEntrySwitch - * @instance - */ - SCChangeEntrySwitch.prototype.GameCfg = $util.emptyArray; - - /** - * Creates a new SCChangeEntrySwitch instance using the specified properties. - * @function create - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {gamehall.ISCChangeEntrySwitch=} [properties] Properties to set - * @returns {gamehall.SCChangeEntrySwitch} SCChangeEntrySwitch instance - */ - SCChangeEntrySwitch.create = function create(properties) { - return new SCChangeEntrySwitch(properties); - }; - - /** - * Encodes the specified SCChangeEntrySwitch message. Does not implicitly {@link gamehall.SCChangeEntrySwitch.verify|verify} messages. - * @function encode - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {gamehall.ISCChangeEntrySwitch} message SCChangeEntrySwitch message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCChangeEntrySwitch.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameCfg != null && message.GameCfg.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.GameCfg.length; ++i) - writer.int32(message.GameCfg[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCChangeEntrySwitch message, length delimited. Does not implicitly {@link gamehall.SCChangeEntrySwitch.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {gamehall.ISCChangeEntrySwitch} message SCChangeEntrySwitch message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCChangeEntrySwitch.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCChangeEntrySwitch message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCChangeEntrySwitch} SCChangeEntrySwitch - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCChangeEntrySwitch.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCChangeEntrySwitch(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameCfg && message.GameCfg.length)) - message.GameCfg = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.GameCfg.push(reader.int32()); - } else - message.GameCfg.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCChangeEntrySwitch message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCChangeEntrySwitch} SCChangeEntrySwitch - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCChangeEntrySwitch.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCChangeEntrySwitch message. - * @function verify - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCChangeEntrySwitch.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameCfg != null && message.hasOwnProperty("GameCfg")) { - if (!Array.isArray(message.GameCfg)) - return "GameCfg: array expected"; - for (var i = 0; i < message.GameCfg.length; ++i) - if (!$util.isInteger(message.GameCfg[i])) - return "GameCfg: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCChangeEntrySwitch message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCChangeEntrySwitch} SCChangeEntrySwitch - */ - SCChangeEntrySwitch.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCChangeEntrySwitch) - return object; - var message = new $root.gamehall.SCChangeEntrySwitch(); - if (object.GameCfg) { - if (!Array.isArray(object.GameCfg)) - throw TypeError(".gamehall.SCChangeEntrySwitch.GameCfg: array expected"); - message.GameCfg = []; - for (var i = 0; i < object.GameCfg.length; ++i) - message.GameCfg[i] = object.GameCfg[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCChangeEntrySwitch message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {gamehall.SCChangeEntrySwitch} message SCChangeEntrySwitch - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCChangeEntrySwitch.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameCfg = []; - if (message.GameCfg && message.GameCfg.length) { - object.GameCfg = []; - for (var j = 0; j < message.GameCfg.length; ++j) - object.GameCfg[j] = message.GameCfg[j]; - } - return object; - }; - - /** - * Converts this SCChangeEntrySwitch to JSON. - * @function toJSON - * @memberof gamehall.SCChangeEntrySwitch - * @instance - * @returns {Object.} JSON object - */ - SCChangeEntrySwitch.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCChangeEntrySwitch - * @function getTypeUrl - * @memberof gamehall.SCChangeEntrySwitch - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCChangeEntrySwitch.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCChangeEntrySwitch"; - }; - - return SCChangeEntrySwitch; - })(); - - gamehall.CSEnterGame = (function() { - - /** - * Properties of a CSEnterGame. - * @memberof gamehall - * @interface ICSEnterGame - * @property {number|null} [Id] CSEnterGame Id - * @property {Array.|null} [OpParams] CSEnterGame OpParams - * @property {string|null} [Platform] CSEnterGame Platform - * @property {number|null} [ApkVer] CSEnterGame ApkVer - * @property {number|null} [ResVer] CSEnterGame ResVer - */ - - /** - * Constructs a new CSEnterGame. - * @memberof gamehall - * @classdesc Represents a CSEnterGame. - * @implements ICSEnterGame - * @constructor - * @param {gamehall.ICSEnterGame=} [properties] Properties to set - */ - function CSEnterGame(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSEnterGame Id. - * @member {number} Id - * @memberof gamehall.CSEnterGame - * @instance - */ - CSEnterGame.prototype.Id = 0; - - /** - * CSEnterGame OpParams. - * @member {Array.} OpParams - * @memberof gamehall.CSEnterGame - * @instance - */ - CSEnterGame.prototype.OpParams = $util.emptyArray; - - /** - * CSEnterGame Platform. - * @member {string} Platform - * @memberof gamehall.CSEnterGame - * @instance - */ - CSEnterGame.prototype.Platform = ""; - - /** - * CSEnterGame ApkVer. - * @member {number} ApkVer - * @memberof gamehall.CSEnterGame - * @instance - */ - CSEnterGame.prototype.ApkVer = 0; - - /** - * CSEnterGame ResVer. - * @member {number} ResVer - * @memberof gamehall.CSEnterGame - * @instance - */ - CSEnterGame.prototype.ResVer = 0; - - /** - * Creates a new CSEnterGame instance using the specified properties. - * @function create - * @memberof gamehall.CSEnterGame - * @static - * @param {gamehall.ICSEnterGame=} [properties] Properties to set - * @returns {gamehall.CSEnterGame} CSEnterGame instance - */ - CSEnterGame.create = function create(properties) { - return new CSEnterGame(properties); - }; - - /** - * Encodes the specified CSEnterGame message. Does not implicitly {@link gamehall.CSEnterGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSEnterGame - * @static - * @param {gamehall.ICSEnterGame} message CSEnterGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 2, wireType 2 =*/18).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - if (message.Platform != null && Object.hasOwnProperty.call(message, "Platform")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Platform); - if (message.ApkVer != null && Object.hasOwnProperty.call(message, "ApkVer")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.ApkVer); - if (message.ResVer != null && Object.hasOwnProperty.call(message, "ResVer")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.ResVer); - return writer; - }; - - /** - * Encodes the specified CSEnterGame message, length delimited. Does not implicitly {@link gamehall.CSEnterGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSEnterGame - * @static - * @param {gamehall.ICSEnterGame} message CSEnterGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSEnterGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSEnterGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSEnterGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSEnterGame} CSEnterGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSEnterGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - case 3: { - message.Platform = reader.string(); - break; - } - case 4: { - message.ApkVer = reader.int32(); - break; - } - case 5: { - message.ResVer = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSEnterGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSEnterGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSEnterGame} CSEnterGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSEnterGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSEnterGame message. - * @function verify - * @memberof gamehall.CSEnterGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSEnterGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - if (!$util.isString(message.Platform)) - return "Platform: string expected"; - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - if (!$util.isInteger(message.ApkVer)) - return "ApkVer: integer expected"; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - if (!$util.isInteger(message.ResVer)) - return "ResVer: integer expected"; - return null; - }; - - /** - * Creates a CSEnterGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSEnterGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSEnterGame} CSEnterGame - */ - CSEnterGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSEnterGame) - return object; - var message = new $root.gamehall.CSEnterGame(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.CSEnterGame.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - if (object.Platform != null) - message.Platform = String(object.Platform); - if (object.ApkVer != null) - message.ApkVer = object.ApkVer | 0; - if (object.ResVer != null) - message.ResVer = object.ResVer | 0; - return message; - }; - - /** - * Creates a plain object from a CSEnterGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSEnterGame - * @static - * @param {gamehall.CSEnterGame} message CSEnterGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSEnterGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.Id = 0; - object.Platform = ""; - object.ApkVer = 0; - object.ResVer = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - object.Platform = message.Platform; - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - object.ApkVer = message.ApkVer; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - object.ResVer = message.ResVer; - return object; - }; - - /** - * Converts this CSEnterGame to JSON. - * @function toJSON - * @memberof gamehall.CSEnterGame - * @instance - * @returns {Object.} JSON object - */ - CSEnterGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSEnterGame - * @function getTypeUrl - * @memberof gamehall.CSEnterGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSEnterGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSEnterGame"; - }; - - return CSEnterGame; - })(); - - gamehall.SCEnterGame = (function() { - - /** - * Properties of a SCEnterGame. - * @memberof gamehall - * @interface ISCEnterGame - * @property {gamehall.OpResultCode_Game|null} [OpCode] SCEnterGame OpCode - * @property {number|null} [Id] SCEnterGame Id - * @property {Array.|null} [OpParams] SCEnterGame OpParams - * @property {number|null} [MinApkVer] SCEnterGame MinApkVer - * @property {number|null} [LatestApkVer] SCEnterGame LatestApkVer - * @property {number|null} [MinResVer] SCEnterGame MinResVer - * @property {number|null} [LatestResVer] SCEnterGame LatestResVer - */ - - /** - * Constructs a new SCEnterGame. - * @memberof gamehall - * @classdesc Represents a SCEnterGame. - * @implements ISCEnterGame - * @constructor - * @param {gamehall.ISCEnterGame=} [properties] Properties to set - */ - function SCEnterGame(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCEnterGame OpCode. - * @member {gamehall.OpResultCode_Game} OpCode - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.OpCode = 0; - - /** - * SCEnterGame Id. - * @member {number} Id - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.Id = 0; - - /** - * SCEnterGame OpParams. - * @member {Array.} OpParams - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.OpParams = $util.emptyArray; - - /** - * SCEnterGame MinApkVer. - * @member {number} MinApkVer - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.MinApkVer = 0; - - /** - * SCEnterGame LatestApkVer. - * @member {number} LatestApkVer - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.LatestApkVer = 0; - - /** - * SCEnterGame MinResVer. - * @member {number} MinResVer - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.MinResVer = 0; - - /** - * SCEnterGame LatestResVer. - * @member {number} LatestResVer - * @memberof gamehall.SCEnterGame - * @instance - */ - SCEnterGame.prototype.LatestResVer = 0; - - /** - * Creates a new SCEnterGame instance using the specified properties. - * @function create - * @memberof gamehall.SCEnterGame - * @static - * @param {gamehall.ISCEnterGame=} [properties] Properties to set - * @returns {gamehall.SCEnterGame} SCEnterGame instance - */ - SCEnterGame.create = function create(properties) { - return new SCEnterGame(properties); - }; - - /** - * Encodes the specified SCEnterGame message. Does not implicitly {@link gamehall.SCEnterGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCEnterGame - * @static - * @param {gamehall.ISCEnterGame} message SCEnterGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpCode); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Id); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 3, wireType 2 =*/26).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - if (message.MinApkVer != null && Object.hasOwnProperty.call(message, "MinApkVer")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.MinApkVer); - if (message.LatestApkVer != null && Object.hasOwnProperty.call(message, "LatestApkVer")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.LatestApkVer); - if (message.MinResVer != null && Object.hasOwnProperty.call(message, "MinResVer")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.MinResVer); - if (message.LatestResVer != null && Object.hasOwnProperty.call(message, "LatestResVer")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.LatestResVer); - return writer; - }; - - /** - * Encodes the specified SCEnterGame message, length delimited. Does not implicitly {@link gamehall.SCEnterGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCEnterGame - * @static - * @param {gamehall.ISCEnterGame} message SCEnterGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCEnterGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCEnterGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCEnterGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCEnterGame} SCEnterGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCEnterGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int32(); - break; - } - case 2: { - message.Id = reader.int32(); - break; - } - case 3: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - case 4: { - message.MinApkVer = reader.int32(); - break; - } - case 5: { - message.LatestApkVer = reader.int32(); - break; - } - case 6: { - message.MinResVer = reader.int32(); - break; - } - case 7: { - message.LatestResVer = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCEnterGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCEnterGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCEnterGame} SCEnterGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCEnterGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCEnterGame message. - * @function verify - * @memberof gamehall.SCEnterGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCEnterGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - if (!$util.isInteger(message.MinApkVer)) - return "MinApkVer: integer expected"; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - if (!$util.isInteger(message.LatestApkVer)) - return "LatestApkVer: integer expected"; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - if (!$util.isInteger(message.MinResVer)) - return "MinResVer: integer expected"; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - if (!$util.isInteger(message.LatestResVer)) - return "LatestResVer: integer expected"; - return null; - }; - - /** - * Creates a SCEnterGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCEnterGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCEnterGame} SCEnterGame - */ - SCEnterGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCEnterGame) - return object; - var message = new $root.gamehall.SCEnterGame(); - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpCode = 9010; - break; - } - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.SCEnterGame.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - if (object.MinApkVer != null) - message.MinApkVer = object.MinApkVer | 0; - if (object.LatestApkVer != null) - message.LatestApkVer = object.LatestApkVer | 0; - if (object.MinResVer != null) - message.MinResVer = object.MinResVer | 0; - if (object.LatestResVer != null) - message.LatestResVer = object.LatestResVer | 0; - return message; - }; - - /** - * Creates a plain object from a SCEnterGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCEnterGame - * @static - * @param {gamehall.SCEnterGame} message SCEnterGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCEnterGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.OpCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.Id = 0; - object.MinApkVer = 0; - object.LatestApkVer = 0; - object.MinResVer = 0; - object.LatestResVer = 0; - } - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode_Game[message.OpCode] : message.OpCode; - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - object.MinApkVer = message.MinApkVer; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - object.LatestApkVer = message.LatestApkVer; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - object.MinResVer = message.MinResVer; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - object.LatestResVer = message.LatestResVer; - return object; - }; - - /** - * Converts this SCEnterGame to JSON. - * @function toJSON - * @memberof gamehall.SCEnterGame - * @instance - * @returns {Object.} JSON object - */ - SCEnterGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCEnterGame - * @function getTypeUrl - * @memberof gamehall.SCEnterGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCEnterGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCEnterGame"; - }; - - return SCEnterGame; - })(); - - gamehall.CSQuitGame = (function() { - - /** - * Properties of a CSQuitGame. - * @memberof gamehall - * @interface ICSQuitGame - * @property {number|null} [Id] CSQuitGame Id - * @property {boolean|null} [IsAudience] CSQuitGame IsAudience - */ - - /** - * Constructs a new CSQuitGame. - * @memberof gamehall - * @classdesc Represents a CSQuitGame. - * @implements ICSQuitGame - * @constructor - * @param {gamehall.ICSQuitGame=} [properties] Properties to set - */ - function CSQuitGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSQuitGame Id. - * @member {number} Id - * @memberof gamehall.CSQuitGame - * @instance - */ - CSQuitGame.prototype.Id = 0; - - /** - * CSQuitGame IsAudience. - * @member {boolean} IsAudience - * @memberof gamehall.CSQuitGame - * @instance - */ - CSQuitGame.prototype.IsAudience = false; - - /** - * Creates a new CSQuitGame instance using the specified properties. - * @function create - * @memberof gamehall.CSQuitGame - * @static - * @param {gamehall.ICSQuitGame=} [properties] Properties to set - * @returns {gamehall.CSQuitGame} CSQuitGame instance - */ - CSQuitGame.create = function create(properties) { - return new CSQuitGame(properties); - }; - - /** - * Encodes the specified CSQuitGame message. Does not implicitly {@link gamehall.CSQuitGame.verify|verify} messages. - * @function encode - * @memberof gamehall.CSQuitGame - * @static - * @param {gamehall.ICSQuitGame} message CSQuitGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSQuitGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.IsAudience != null && Object.hasOwnProperty.call(message, "IsAudience")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.IsAudience); - return writer; - }; - - /** - * Encodes the specified CSQuitGame message, length delimited. Does not implicitly {@link gamehall.CSQuitGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSQuitGame - * @static - * @param {gamehall.ICSQuitGame} message CSQuitGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSQuitGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSQuitGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSQuitGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSQuitGame} CSQuitGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSQuitGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSQuitGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.IsAudience = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSQuitGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSQuitGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSQuitGame} CSQuitGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSQuitGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSQuitGame message. - * @function verify - * @memberof gamehall.CSQuitGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSQuitGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.IsAudience != null && message.hasOwnProperty("IsAudience")) - if (typeof message.IsAudience !== "boolean") - return "IsAudience: boolean expected"; - return null; - }; - - /** - * Creates a CSQuitGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSQuitGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSQuitGame} CSQuitGame - */ - CSQuitGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSQuitGame) - return object; - var message = new $root.gamehall.CSQuitGame(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.IsAudience != null) - message.IsAudience = Boolean(object.IsAudience); - return message; - }; - - /** - * Creates a plain object from a CSQuitGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSQuitGame - * @static - * @param {gamehall.CSQuitGame} message CSQuitGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSQuitGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Id = 0; - object.IsAudience = false; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.IsAudience != null && message.hasOwnProperty("IsAudience")) - object.IsAudience = message.IsAudience; - return object; - }; - - /** - * Converts this CSQuitGame to JSON. - * @function toJSON - * @memberof gamehall.CSQuitGame - * @instance - * @returns {Object.} JSON object - */ - CSQuitGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSQuitGame - * @function getTypeUrl - * @memberof gamehall.CSQuitGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSQuitGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSQuitGame"; - }; - - return CSQuitGame; - })(); - - gamehall.SCQuitGame = (function() { - - /** - * Properties of a SCQuitGame. - * @memberof gamehall - * @interface ISCQuitGame - * @property {gamehall.OpResultCode_Game|null} [OpCode] SCQuitGame OpCode - * @property {number|null} [Id] SCQuitGame Id - * @property {number|null} [Reason] SCQuitGame Reason - */ - - /** - * Constructs a new SCQuitGame. - * @memberof gamehall - * @classdesc Represents a SCQuitGame. - * @implements ISCQuitGame - * @constructor - * @param {gamehall.ISCQuitGame=} [properties] Properties to set - */ - function SCQuitGame(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCQuitGame OpCode. - * @member {gamehall.OpResultCode_Game} OpCode - * @memberof gamehall.SCQuitGame - * @instance - */ - SCQuitGame.prototype.OpCode = 0; - - /** - * SCQuitGame Id. - * @member {number} Id - * @memberof gamehall.SCQuitGame - * @instance - */ - SCQuitGame.prototype.Id = 0; - - /** - * SCQuitGame Reason. - * @member {number} Reason - * @memberof gamehall.SCQuitGame - * @instance - */ - SCQuitGame.prototype.Reason = 0; - - /** - * Creates a new SCQuitGame instance using the specified properties. - * @function create - * @memberof gamehall.SCQuitGame - * @static - * @param {gamehall.ISCQuitGame=} [properties] Properties to set - * @returns {gamehall.SCQuitGame} SCQuitGame instance - */ - SCQuitGame.create = function create(properties) { - return new SCQuitGame(properties); - }; - - /** - * Encodes the specified SCQuitGame message. Does not implicitly {@link gamehall.SCQuitGame.verify|verify} messages. - * @function encode - * @memberof gamehall.SCQuitGame - * @static - * @param {gamehall.ISCQuitGame} message SCQuitGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCQuitGame.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpCode); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Id); - if (message.Reason != null && Object.hasOwnProperty.call(message, "Reason")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Reason); - return writer; - }; - - /** - * Encodes the specified SCQuitGame message, length delimited. Does not implicitly {@link gamehall.SCQuitGame.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCQuitGame - * @static - * @param {gamehall.ISCQuitGame} message SCQuitGame message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCQuitGame.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCQuitGame message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCQuitGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCQuitGame} SCQuitGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCQuitGame.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCQuitGame(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int32(); - break; - } - case 2: { - message.Id = reader.int32(); - break; - } - case 3: { - message.Reason = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCQuitGame message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCQuitGame - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCQuitGame} SCQuitGame - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCQuitGame.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCQuitGame message. - * @function verify - * @memberof gamehall.SCQuitGame - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCQuitGame.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.Reason != null && message.hasOwnProperty("Reason")) - if (!$util.isInteger(message.Reason)) - return "Reason: integer expected"; - return null; - }; - - /** - * Creates a SCQuitGame message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCQuitGame - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCQuitGame} SCQuitGame - */ - SCQuitGame.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCQuitGame) - return object; - var message = new $root.gamehall.SCQuitGame(); - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpCode = 9010; - break; - } - if (object.Id != null) - message.Id = object.Id | 0; - if (object.Reason != null) - message.Reason = object.Reason | 0; - return message; - }; - - /** - * Creates a plain object from a SCQuitGame message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCQuitGame - * @static - * @param {gamehall.SCQuitGame} message SCQuitGame - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCQuitGame.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - object.Id = 0; - object.Reason = 0; - } - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode_Game[message.OpCode] : message.OpCode; - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.Reason != null && message.hasOwnProperty("Reason")) - object.Reason = message.Reason; - return object; - }; - - /** - * Converts this SCQuitGame to JSON. - * @function toJSON - * @memberof gamehall.SCQuitGame - * @instance - * @returns {Object.} JSON object - */ - SCQuitGame.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCQuitGame - * @function getTypeUrl - * @memberof gamehall.SCQuitGame - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCQuitGame.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCQuitGame"; - }; - - return SCQuitGame; - })(); - - gamehall.CSUploadLoc = (function() { - - /** - * Properties of a CSUploadLoc. - * @memberof gamehall - * @interface ICSUploadLoc - * @property {number|null} [Longitude] CSUploadLoc Longitude - * @property {number|null} [Latitude] CSUploadLoc Latitude - * @property {string|null} [City] CSUploadLoc City - */ - - /** - * Constructs a new CSUploadLoc. - * @memberof gamehall - * @classdesc Represents a CSUploadLoc. - * @implements ICSUploadLoc - * @constructor - * @param {gamehall.ICSUploadLoc=} [properties] Properties to set - */ - function CSUploadLoc(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSUploadLoc Longitude. - * @member {number} Longitude - * @memberof gamehall.CSUploadLoc - * @instance - */ - CSUploadLoc.prototype.Longitude = 0; - - /** - * CSUploadLoc Latitude. - * @member {number} Latitude - * @memberof gamehall.CSUploadLoc - * @instance - */ - CSUploadLoc.prototype.Latitude = 0; - - /** - * CSUploadLoc City. - * @member {string} City - * @memberof gamehall.CSUploadLoc - * @instance - */ - CSUploadLoc.prototype.City = ""; - - /** - * Creates a new CSUploadLoc instance using the specified properties. - * @function create - * @memberof gamehall.CSUploadLoc - * @static - * @param {gamehall.ICSUploadLoc=} [properties] Properties to set - * @returns {gamehall.CSUploadLoc} CSUploadLoc instance - */ - CSUploadLoc.create = function create(properties) { - return new CSUploadLoc(properties); - }; - - /** - * Encodes the specified CSUploadLoc message. Does not implicitly {@link gamehall.CSUploadLoc.verify|verify} messages. - * @function encode - * @memberof gamehall.CSUploadLoc - * @static - * @param {gamehall.ICSUploadLoc} message CSUploadLoc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSUploadLoc.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Longitude != null && Object.hasOwnProperty.call(message, "Longitude")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Longitude); - if (message.Latitude != null && Object.hasOwnProperty.call(message, "Latitude")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Latitude); - if (message.City != null && Object.hasOwnProperty.call(message, "City")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.City); - return writer; - }; - - /** - * Encodes the specified CSUploadLoc message, length delimited. Does not implicitly {@link gamehall.CSUploadLoc.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSUploadLoc - * @static - * @param {gamehall.ICSUploadLoc} message CSUploadLoc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSUploadLoc.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSUploadLoc message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSUploadLoc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSUploadLoc} CSUploadLoc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSUploadLoc.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSUploadLoc(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Longitude = reader.int32(); - break; - } - case 2: { - message.Latitude = reader.int32(); - break; - } - case 3: { - message.City = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSUploadLoc message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSUploadLoc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSUploadLoc} CSUploadLoc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSUploadLoc.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSUploadLoc message. - * @function verify - * @memberof gamehall.CSUploadLoc - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSUploadLoc.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Longitude != null && message.hasOwnProperty("Longitude")) - if (!$util.isInteger(message.Longitude)) - return "Longitude: integer expected"; - if (message.Latitude != null && message.hasOwnProperty("Latitude")) - if (!$util.isInteger(message.Latitude)) - return "Latitude: integer expected"; - if (message.City != null && message.hasOwnProperty("City")) - if (!$util.isString(message.City)) - return "City: string expected"; - return null; - }; - - /** - * Creates a CSUploadLoc message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSUploadLoc - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSUploadLoc} CSUploadLoc - */ - CSUploadLoc.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSUploadLoc) - return object; - var message = new $root.gamehall.CSUploadLoc(); - if (object.Longitude != null) - message.Longitude = object.Longitude | 0; - if (object.Latitude != null) - message.Latitude = object.Latitude | 0; - if (object.City != null) - message.City = String(object.City); - return message; - }; - - /** - * Creates a plain object from a CSUploadLoc message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSUploadLoc - * @static - * @param {gamehall.CSUploadLoc} message CSUploadLoc - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSUploadLoc.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Longitude = 0; - object.Latitude = 0; - object.City = ""; - } - if (message.Longitude != null && message.hasOwnProperty("Longitude")) - object.Longitude = message.Longitude; - if (message.Latitude != null && message.hasOwnProperty("Latitude")) - object.Latitude = message.Latitude; - if (message.City != null && message.hasOwnProperty("City")) - object.City = message.City; - return object; - }; - - /** - * Converts this CSUploadLoc to JSON. - * @function toJSON - * @memberof gamehall.CSUploadLoc - * @instance - * @returns {Object.} JSON object - */ - CSUploadLoc.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSUploadLoc - * @function getTypeUrl - * @memberof gamehall.CSUploadLoc - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSUploadLoc.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSUploadLoc"; - }; - - return CSUploadLoc; - })(); - - gamehall.SCUploadLoc = (function() { - - /** - * Properties of a SCUploadLoc. - * @memberof gamehall - * @interface ISCUploadLoc - * @property {number|null} [Pos] SCUploadLoc Pos - * @property {number|null} [Longitude] SCUploadLoc Longitude - * @property {number|null} [Latitude] SCUploadLoc Latitude - * @property {string|null} [City] SCUploadLoc City - */ - - /** - * Constructs a new SCUploadLoc. - * @memberof gamehall - * @classdesc Represents a SCUploadLoc. - * @implements ISCUploadLoc - * @constructor - * @param {gamehall.ISCUploadLoc=} [properties] Properties to set - */ - function SCUploadLoc(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCUploadLoc Pos. - * @member {number} Pos - * @memberof gamehall.SCUploadLoc - * @instance - */ - SCUploadLoc.prototype.Pos = 0; - - /** - * SCUploadLoc Longitude. - * @member {number} Longitude - * @memberof gamehall.SCUploadLoc - * @instance - */ - SCUploadLoc.prototype.Longitude = 0; - - /** - * SCUploadLoc Latitude. - * @member {number} Latitude - * @memberof gamehall.SCUploadLoc - * @instance - */ - SCUploadLoc.prototype.Latitude = 0; - - /** - * SCUploadLoc City. - * @member {string} City - * @memberof gamehall.SCUploadLoc - * @instance - */ - SCUploadLoc.prototype.City = ""; - - /** - * Creates a new SCUploadLoc instance using the specified properties. - * @function create - * @memberof gamehall.SCUploadLoc - * @static - * @param {gamehall.ISCUploadLoc=} [properties] Properties to set - * @returns {gamehall.SCUploadLoc} SCUploadLoc instance - */ - SCUploadLoc.create = function create(properties) { - return new SCUploadLoc(properties); - }; - - /** - * Encodes the specified SCUploadLoc message. Does not implicitly {@link gamehall.SCUploadLoc.verify|verify} messages. - * @function encode - * @memberof gamehall.SCUploadLoc - * @static - * @param {gamehall.ISCUploadLoc} message SCUploadLoc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCUploadLoc.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Pos != null && Object.hasOwnProperty.call(message, "Pos")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Pos); - if (message.Longitude != null && Object.hasOwnProperty.call(message, "Longitude")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Longitude); - if (message.Latitude != null && Object.hasOwnProperty.call(message, "Latitude")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Latitude); - if (message.City != null && Object.hasOwnProperty.call(message, "City")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.City); - return writer; - }; - - /** - * Encodes the specified SCUploadLoc message, length delimited. Does not implicitly {@link gamehall.SCUploadLoc.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCUploadLoc - * @static - * @param {gamehall.ISCUploadLoc} message SCUploadLoc message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCUploadLoc.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCUploadLoc message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCUploadLoc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCUploadLoc} SCUploadLoc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCUploadLoc.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCUploadLoc(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Pos = reader.int32(); - break; - } - case 2: { - message.Longitude = reader.int32(); - break; - } - case 3: { - message.Latitude = reader.int32(); - break; - } - case 4: { - message.City = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCUploadLoc message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCUploadLoc - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCUploadLoc} SCUploadLoc - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCUploadLoc.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCUploadLoc message. - * @function verify - * @memberof gamehall.SCUploadLoc - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCUploadLoc.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Pos != null && message.hasOwnProperty("Pos")) - if (!$util.isInteger(message.Pos)) - return "Pos: integer expected"; - if (message.Longitude != null && message.hasOwnProperty("Longitude")) - if (!$util.isInteger(message.Longitude)) - return "Longitude: integer expected"; - if (message.Latitude != null && message.hasOwnProperty("Latitude")) - if (!$util.isInteger(message.Latitude)) - return "Latitude: integer expected"; - if (message.City != null && message.hasOwnProperty("City")) - if (!$util.isString(message.City)) - return "City: string expected"; - return null; - }; - - /** - * Creates a SCUploadLoc message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCUploadLoc - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCUploadLoc} SCUploadLoc - */ - SCUploadLoc.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCUploadLoc) - return object; - var message = new $root.gamehall.SCUploadLoc(); - if (object.Pos != null) - message.Pos = object.Pos | 0; - if (object.Longitude != null) - message.Longitude = object.Longitude | 0; - if (object.Latitude != null) - message.Latitude = object.Latitude | 0; - if (object.City != null) - message.City = String(object.City); - return message; - }; - - /** - * Creates a plain object from a SCUploadLoc message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCUploadLoc - * @static - * @param {gamehall.SCUploadLoc} message SCUploadLoc - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCUploadLoc.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Pos = 0; - object.Longitude = 0; - object.Latitude = 0; - object.City = ""; - } - if (message.Pos != null && message.hasOwnProperty("Pos")) - object.Pos = message.Pos; - if (message.Longitude != null && message.hasOwnProperty("Longitude")) - object.Longitude = message.Longitude; - if (message.Latitude != null && message.hasOwnProperty("Latitude")) - object.Latitude = message.Latitude; - if (message.City != null && message.hasOwnProperty("City")) - object.City = message.City; - return object; - }; - - /** - * Converts this SCUploadLoc to JSON. - * @function toJSON - * @memberof gamehall.SCUploadLoc - * @instance - * @returns {Object.} JSON object - */ - SCUploadLoc.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCUploadLoc - * @function getTypeUrl - * @memberof gamehall.SCUploadLoc - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCUploadLoc.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCUploadLoc"; - }; - - return SCUploadLoc; - })(); - - gamehall.CSAudienceSit = (function() { - - /** - * Properties of a CSAudienceSit. - * @memberof gamehall - * @interface ICSAudienceSit - * @property {number|null} [RoomId] CSAudienceSit RoomId - */ - - /** - * Constructs a new CSAudienceSit. - * @memberof gamehall - * @classdesc Represents a CSAudienceSit. - * @implements ICSAudienceSit - * @constructor - * @param {gamehall.ICSAudienceSit=} [properties] Properties to set - */ - function CSAudienceSit(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSAudienceSit RoomId. - * @member {number} RoomId - * @memberof gamehall.CSAudienceSit - * @instance - */ - CSAudienceSit.prototype.RoomId = 0; - - /** - * Creates a new CSAudienceSit instance using the specified properties. - * @function create - * @memberof gamehall.CSAudienceSit - * @static - * @param {gamehall.ICSAudienceSit=} [properties] Properties to set - * @returns {gamehall.CSAudienceSit} CSAudienceSit instance - */ - CSAudienceSit.create = function create(properties) { - return new CSAudienceSit(properties); - }; - - /** - * Encodes the specified CSAudienceSit message. Does not implicitly {@link gamehall.CSAudienceSit.verify|verify} messages. - * @function encode - * @memberof gamehall.CSAudienceSit - * @static - * @param {gamehall.ICSAudienceSit} message CSAudienceSit message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSAudienceSit.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - return writer; - }; - - /** - * Encodes the specified CSAudienceSit message, length delimited. Does not implicitly {@link gamehall.CSAudienceSit.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSAudienceSit - * @static - * @param {gamehall.ICSAudienceSit} message CSAudienceSit message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSAudienceSit.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSAudienceSit message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSAudienceSit - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSAudienceSit} CSAudienceSit - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSAudienceSit.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSAudienceSit(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSAudienceSit message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSAudienceSit - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSAudienceSit} CSAudienceSit - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSAudienceSit.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSAudienceSit message. - * @function verify - * @memberof gamehall.CSAudienceSit - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSAudienceSit.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - return null; - }; - - /** - * Creates a CSAudienceSit message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSAudienceSit - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSAudienceSit} CSAudienceSit - */ - CSAudienceSit.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSAudienceSit) - return object; - var message = new $root.gamehall.CSAudienceSit(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - return message; - }; - - /** - * Creates a plain object from a CSAudienceSit message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSAudienceSit - * @static - * @param {gamehall.CSAudienceSit} message CSAudienceSit - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSAudienceSit.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.RoomId = 0; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - return object; - }; - - /** - * Converts this CSAudienceSit to JSON. - * @function toJSON - * @memberof gamehall.CSAudienceSit - * @instance - * @returns {Object.} JSON object - */ - CSAudienceSit.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSAudienceSit - * @function getTypeUrl - * @memberof gamehall.CSAudienceSit - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSAudienceSit.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSAudienceSit"; - }; - - return CSAudienceSit; - })(); - - gamehall.SCAudienceSit = (function() { - - /** - * Properties of a SCAudienceSit. - * @memberof gamehall - * @interface ISCAudienceSit - * @property {number|null} [RoomId] SCAudienceSit RoomId - * @property {gamehall.OpResultCode_Game|null} [OpCode] SCAudienceSit OpCode - */ - - /** - * Constructs a new SCAudienceSit. - * @memberof gamehall - * @classdesc Represents a SCAudienceSit. - * @implements ISCAudienceSit - * @constructor - * @param {gamehall.ISCAudienceSit=} [properties] Properties to set - */ - function SCAudienceSit(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCAudienceSit RoomId. - * @member {number} RoomId - * @memberof gamehall.SCAudienceSit - * @instance - */ - SCAudienceSit.prototype.RoomId = 0; - - /** - * SCAudienceSit OpCode. - * @member {gamehall.OpResultCode_Game} OpCode - * @memberof gamehall.SCAudienceSit - * @instance - */ - SCAudienceSit.prototype.OpCode = 0; - - /** - * Creates a new SCAudienceSit instance using the specified properties. - * @function create - * @memberof gamehall.SCAudienceSit - * @static - * @param {gamehall.ISCAudienceSit=} [properties] Properties to set - * @returns {gamehall.SCAudienceSit} SCAudienceSit instance - */ - SCAudienceSit.create = function create(properties) { - return new SCAudienceSit(properties); - }; - - /** - * Encodes the specified SCAudienceSit message. Does not implicitly {@link gamehall.SCAudienceSit.verify|verify} messages. - * @function encode - * @memberof gamehall.SCAudienceSit - * @static - * @param {gamehall.ISCAudienceSit} message SCAudienceSit message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCAudienceSit.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RoomId != null && Object.hasOwnProperty.call(message, "RoomId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.RoomId); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpCode); - return writer; - }; - - /** - * Encodes the specified SCAudienceSit message, length delimited. Does not implicitly {@link gamehall.SCAudienceSit.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCAudienceSit - * @static - * @param {gamehall.ISCAudienceSit} message SCAudienceSit message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCAudienceSit.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCAudienceSit message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCAudienceSit - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCAudienceSit} SCAudienceSit - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCAudienceSit.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCAudienceSit(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RoomId = reader.int32(); - break; - } - case 2: { - message.OpCode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCAudienceSit message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCAudienceSit - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCAudienceSit} SCAudienceSit - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCAudienceSit.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCAudienceSit message. - * @function verify - * @memberof gamehall.SCAudienceSit - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCAudienceSit.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - if (!$util.isInteger(message.RoomId)) - return "RoomId: integer expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - return null; - }; - - /** - * Creates a SCAudienceSit message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCAudienceSit - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCAudienceSit} SCAudienceSit - */ - SCAudienceSit.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCAudienceSit) - return object; - var message = new $root.gamehall.SCAudienceSit(); - if (object.RoomId != null) - message.RoomId = object.RoomId | 0; - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpCode = 9010; - break; - } - return message; - }; - - /** - * Creates a plain object from a SCAudienceSit message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCAudienceSit - * @static - * @param {gamehall.SCAudienceSit} message SCAudienceSit - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCAudienceSit.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.RoomId = 0; - object.OpCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - } - if (message.RoomId != null && message.hasOwnProperty("RoomId")) - object.RoomId = message.RoomId; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode_Game[message.OpCode] : message.OpCode; - return object; - }; - - /** - * Converts this SCAudienceSit to JSON. - * @function toJSON - * @memberof gamehall.SCAudienceSit - * @instance - * @returns {Object.} JSON object - */ - SCAudienceSit.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCAudienceSit - * @function getTypeUrl - * @memberof gamehall.SCAudienceSit - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCAudienceSit.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCAudienceSit"; - }; - - return SCAudienceSit; - })(); - - gamehall.CSRecordAndNotice = (function() { - - /** - * Properties of a CSRecordAndNotice. - * @memberof gamehall - * @interface ICSRecordAndNotice - * @property {number|null} [PageNo] CSRecordAndNotice PageNo - * @property {number|null} [PageSize] CSRecordAndNotice PageSize - * @property {number|null} [Opt] CSRecordAndNotice Opt - * @property {number|Long|null} [StartTime] CSRecordAndNotice StartTime - */ - - /** - * Constructs a new CSRecordAndNotice. - * @memberof gamehall - * @classdesc Represents a CSRecordAndNotice. - * @implements ICSRecordAndNotice - * @constructor - * @param {gamehall.ICSRecordAndNotice=} [properties] Properties to set - */ - function CSRecordAndNotice(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSRecordAndNotice PageNo. - * @member {number} PageNo - * @memberof gamehall.CSRecordAndNotice - * @instance - */ - CSRecordAndNotice.prototype.PageNo = 0; - - /** - * CSRecordAndNotice PageSize. - * @member {number} PageSize - * @memberof gamehall.CSRecordAndNotice - * @instance - */ - CSRecordAndNotice.prototype.PageSize = 0; - - /** - * CSRecordAndNotice Opt. - * @member {number} Opt - * @memberof gamehall.CSRecordAndNotice - * @instance - */ - CSRecordAndNotice.prototype.Opt = 0; - - /** - * CSRecordAndNotice StartTime. - * @member {number|Long} StartTime - * @memberof gamehall.CSRecordAndNotice - * @instance - */ - CSRecordAndNotice.prototype.StartTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new CSRecordAndNotice instance using the specified properties. - * @function create - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {gamehall.ICSRecordAndNotice=} [properties] Properties to set - * @returns {gamehall.CSRecordAndNotice} CSRecordAndNotice instance - */ - CSRecordAndNotice.create = function create(properties) { - return new CSRecordAndNotice(properties); - }; - - /** - * Encodes the specified CSRecordAndNotice message. Does not implicitly {@link gamehall.CSRecordAndNotice.verify|verify} messages. - * @function encode - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {gamehall.ICSRecordAndNotice} message CSRecordAndNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSRecordAndNotice.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.PageNo); - if (message.PageSize != null && Object.hasOwnProperty.call(message, "PageSize")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PageSize); - if (message.Opt != null && Object.hasOwnProperty.call(message, "Opt")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Opt); - if (message.StartTime != null && Object.hasOwnProperty.call(message, "StartTime")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.StartTime); - return writer; - }; - - /** - * Encodes the specified CSRecordAndNotice message, length delimited. Does not implicitly {@link gamehall.CSRecordAndNotice.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {gamehall.ICSRecordAndNotice} message CSRecordAndNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSRecordAndNotice.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSRecordAndNotice message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSRecordAndNotice} CSRecordAndNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSRecordAndNotice.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSRecordAndNotice(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.PageNo = reader.int32(); - break; - } - case 2: { - message.PageSize = reader.int32(); - break; - } - case 3: { - message.Opt = reader.int32(); - break; - } - case 4: { - message.StartTime = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSRecordAndNotice message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSRecordAndNotice} CSRecordAndNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSRecordAndNotice.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSRecordAndNotice message. - * @function verify - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSRecordAndNotice.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - if (!$util.isInteger(message.PageSize)) - return "PageSize: integer expected"; - if (message.Opt != null && message.hasOwnProperty("Opt")) - if (!$util.isInteger(message.Opt)) - return "Opt: integer expected"; - if (message.StartTime != null && message.hasOwnProperty("StartTime")) - if (!$util.isInteger(message.StartTime) && !(message.StartTime && $util.isInteger(message.StartTime.low) && $util.isInteger(message.StartTime.high))) - return "StartTime: integer|Long expected"; - return null; - }; - - /** - * Creates a CSRecordAndNotice message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSRecordAndNotice} CSRecordAndNotice - */ - CSRecordAndNotice.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSRecordAndNotice) - return object; - var message = new $root.gamehall.CSRecordAndNotice(); - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - if (object.PageSize != null) - message.PageSize = object.PageSize | 0; - if (object.Opt != null) - message.Opt = object.Opt | 0; - if (object.StartTime != null) - if ($util.Long) - (message.StartTime = $util.Long.fromValue(object.StartTime)).unsigned = false; - else if (typeof object.StartTime === "string") - message.StartTime = parseInt(object.StartTime, 10); - else if (typeof object.StartTime === "number") - message.StartTime = object.StartTime; - else if (typeof object.StartTime === "object") - message.StartTime = new $util.LongBits(object.StartTime.low >>> 0, object.StartTime.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a CSRecordAndNotice message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {gamehall.CSRecordAndNotice} message CSRecordAndNotice - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSRecordAndNotice.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.PageNo = 0; - object.PageSize = 0; - object.Opt = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.StartTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.StartTime = options.longs === String ? "0" : 0; - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - object.PageSize = message.PageSize; - if (message.Opt != null && message.hasOwnProperty("Opt")) - object.Opt = message.Opt; - if (message.StartTime != null && message.hasOwnProperty("StartTime")) - if (typeof message.StartTime === "number") - object.StartTime = options.longs === String ? String(message.StartTime) : message.StartTime; - else - object.StartTime = options.longs === String ? $util.Long.prototype.toString.call(message.StartTime) : options.longs === Number ? new $util.LongBits(message.StartTime.low >>> 0, message.StartTime.high >>> 0).toNumber() : message.StartTime; - return object; - }; - - /** - * Converts this CSRecordAndNotice to JSON. - * @function toJSON - * @memberof gamehall.CSRecordAndNotice - * @instance - * @returns {Object.} JSON object - */ - CSRecordAndNotice.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSRecordAndNotice - * @function getTypeUrl - * @memberof gamehall.CSRecordAndNotice - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSRecordAndNotice.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSRecordAndNotice"; - }; - - return CSRecordAndNotice; - })(); - - gamehall.CommonNotice = (function() { - - /** - * Properties of a CommonNotice. - * @memberof gamehall - * @interface ICommonNotice - * @property {number|null} [Sort] CommonNotice Sort - * @property {string|null} [Title] CommonNotice Title - * @property {string|null} [Content] CommonNotice Content - * @property {string|null} [TypeName] CommonNotice TypeName - * @property {number|null} [Type] CommonNotice Type - * @property {number|null} [StartTime] CommonNotice StartTime - * @property {number|null} [EndTime] CommonNotice EndTime - * @property {string|null} [Platform] CommonNotice Platform - */ - - /** - * Constructs a new CommonNotice. - * @memberof gamehall - * @classdesc Represents a CommonNotice. - * @implements ICommonNotice - * @constructor - * @param {gamehall.ICommonNotice=} [properties] Properties to set - */ - function CommonNotice(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CommonNotice Sort. - * @member {number} Sort - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.Sort = 0; - - /** - * CommonNotice Title. - * @member {string} Title - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.Title = ""; - - /** - * CommonNotice Content. - * @member {string} Content - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.Content = ""; - - /** - * CommonNotice TypeName. - * @member {string} TypeName - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.TypeName = ""; - - /** - * CommonNotice Type. - * @member {number} Type - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.Type = 0; - - /** - * CommonNotice StartTime. - * @member {number} StartTime - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.StartTime = 0; - - /** - * CommonNotice EndTime. - * @member {number} EndTime - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.EndTime = 0; - - /** - * CommonNotice Platform. - * @member {string} Platform - * @memberof gamehall.CommonNotice - * @instance - */ - CommonNotice.prototype.Platform = ""; - - /** - * Creates a new CommonNotice instance using the specified properties. - * @function create - * @memberof gamehall.CommonNotice - * @static - * @param {gamehall.ICommonNotice=} [properties] Properties to set - * @returns {gamehall.CommonNotice} CommonNotice instance - */ - CommonNotice.create = function create(properties) { - return new CommonNotice(properties); - }; - - /** - * Encodes the specified CommonNotice message. Does not implicitly {@link gamehall.CommonNotice.verify|verify} messages. - * @function encode - * @memberof gamehall.CommonNotice - * @static - * @param {gamehall.ICommonNotice} message CommonNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CommonNotice.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Sort != null && Object.hasOwnProperty.call(message, "Sort")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Sort); - if (message.Title != null && Object.hasOwnProperty.call(message, "Title")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Title); - if (message.Content != null && Object.hasOwnProperty.call(message, "Content")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Content); - if (message.TypeName != null && Object.hasOwnProperty.call(message, "TypeName")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.TypeName); - if (message.Type != null && Object.hasOwnProperty.call(message, "Type")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.Type); - if (message.StartTime != null && Object.hasOwnProperty.call(message, "StartTime")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.StartTime); - if (message.EndTime != null && Object.hasOwnProperty.call(message, "EndTime")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.EndTime); - if (message.Platform != null && Object.hasOwnProperty.call(message, "Platform")) - writer.uint32(/* id 8, wireType 2 =*/66).string(message.Platform); - return writer; - }; - - /** - * Encodes the specified CommonNotice message, length delimited. Does not implicitly {@link gamehall.CommonNotice.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CommonNotice - * @static - * @param {gamehall.ICommonNotice} message CommonNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CommonNotice.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CommonNotice message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CommonNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CommonNotice} CommonNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CommonNotice.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CommonNotice(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Sort = reader.int32(); - break; - } - case 2: { - message.Title = reader.string(); - break; - } - case 3: { - message.Content = reader.string(); - break; - } - case 4: { - message.TypeName = reader.string(); - break; - } - case 5: { - message.Type = reader.int32(); - break; - } - case 6: { - message.StartTime = reader.int32(); - break; - } - case 7: { - message.EndTime = reader.int32(); - break; - } - case 8: { - message.Platform = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CommonNotice message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CommonNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CommonNotice} CommonNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CommonNotice.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CommonNotice message. - * @function verify - * @memberof gamehall.CommonNotice - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CommonNotice.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Sort != null && message.hasOwnProperty("Sort")) - if (!$util.isInteger(message.Sort)) - return "Sort: integer expected"; - if (message.Title != null && message.hasOwnProperty("Title")) - if (!$util.isString(message.Title)) - return "Title: string expected"; - if (message.Content != null && message.hasOwnProperty("Content")) - if (!$util.isString(message.Content)) - return "Content: string expected"; - if (message.TypeName != null && message.hasOwnProperty("TypeName")) - if (!$util.isString(message.TypeName)) - return "TypeName: string expected"; - if (message.Type != null && message.hasOwnProperty("Type")) - if (!$util.isInteger(message.Type)) - return "Type: integer expected"; - if (message.StartTime != null && message.hasOwnProperty("StartTime")) - if (!$util.isInteger(message.StartTime)) - return "StartTime: integer expected"; - if (message.EndTime != null && message.hasOwnProperty("EndTime")) - if (!$util.isInteger(message.EndTime)) - return "EndTime: integer expected"; - if (message.Platform != null && message.hasOwnProperty("Platform")) - if (!$util.isString(message.Platform)) - return "Platform: string expected"; - return null; - }; - - /** - * Creates a CommonNotice message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CommonNotice - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CommonNotice} CommonNotice - */ - CommonNotice.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CommonNotice) - return object; - var message = new $root.gamehall.CommonNotice(); - if (object.Sort != null) - message.Sort = object.Sort | 0; - if (object.Title != null) - message.Title = String(object.Title); - if (object.Content != null) - message.Content = String(object.Content); - if (object.TypeName != null) - message.TypeName = String(object.TypeName); - if (object.Type != null) - message.Type = object.Type | 0; - if (object.StartTime != null) - message.StartTime = object.StartTime | 0; - if (object.EndTime != null) - message.EndTime = object.EndTime | 0; - if (object.Platform != null) - message.Platform = String(object.Platform); - return message; - }; - - /** - * Creates a plain object from a CommonNotice message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CommonNotice - * @static - * @param {gamehall.CommonNotice} message CommonNotice - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CommonNotice.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Sort = 0; - object.Title = ""; - object.Content = ""; - object.TypeName = ""; - object.Type = 0; - object.StartTime = 0; - object.EndTime = 0; - object.Platform = ""; - } - if (message.Sort != null && message.hasOwnProperty("Sort")) - object.Sort = message.Sort; - if (message.Title != null && message.hasOwnProperty("Title")) - object.Title = message.Title; - if (message.Content != null && message.hasOwnProperty("Content")) - object.Content = message.Content; - if (message.TypeName != null && message.hasOwnProperty("TypeName")) - object.TypeName = message.TypeName; - if (message.Type != null && message.hasOwnProperty("Type")) - object.Type = message.Type; - if (message.StartTime != null && message.hasOwnProperty("StartTime")) - object.StartTime = message.StartTime; - if (message.EndTime != null && message.hasOwnProperty("EndTime")) - object.EndTime = message.EndTime; - if (message.Platform != null && message.hasOwnProperty("Platform")) - object.Platform = message.Platform; - return object; - }; - - /** - * Converts this CommonNotice to JSON. - * @function toJSON - * @memberof gamehall.CommonNotice - * @instance - * @returns {Object.} JSON object - */ - CommonNotice.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CommonNotice - * @function getTypeUrl - * @memberof gamehall.CommonNotice - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CommonNotice.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CommonNotice"; - }; - - return CommonNotice; - })(); - - gamehall.PlayerRecord = (function() { - - /** - * Properties of a PlayerRecord. - * @memberof gamehall - * @interface IPlayerRecord - * @property {number|null} [GameFreeid] PlayerRecord GameFreeid - * @property {string|null} [GameDetailedLogId] PlayerRecord GameDetailedLogId - * @property {number|Long|null} [TotalIn] PlayerRecord TotalIn - * @property {number|Long|null} [TotalOut] PlayerRecord TotalOut - * @property {number|null} [Ts] PlayerRecord Ts - * @property {number|null} [MatchType] PlayerRecord MatchType - */ - - /** - * Constructs a new PlayerRecord. - * @memberof gamehall - * @classdesc Represents a PlayerRecord. - * @implements IPlayerRecord - * @constructor - * @param {gamehall.IPlayerRecord=} [properties] Properties to set - */ - function PlayerRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PlayerRecord GameFreeid. - * @member {number} GameFreeid - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.GameFreeid = 0; - - /** - * PlayerRecord GameDetailedLogId. - * @member {string} GameDetailedLogId - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.GameDetailedLogId = ""; - - /** - * PlayerRecord TotalIn. - * @member {number|Long} TotalIn - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.TotalIn = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerRecord TotalOut. - * @member {number|Long} TotalOut - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.TotalOut = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerRecord Ts. - * @member {number} Ts - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.Ts = 0; - - /** - * PlayerRecord MatchType. - * @member {number} MatchType - * @memberof gamehall.PlayerRecord - * @instance - */ - PlayerRecord.prototype.MatchType = 0; - - /** - * Creates a new PlayerRecord instance using the specified properties. - * @function create - * @memberof gamehall.PlayerRecord - * @static - * @param {gamehall.IPlayerRecord=} [properties] Properties to set - * @returns {gamehall.PlayerRecord} PlayerRecord instance - */ - PlayerRecord.create = function create(properties) { - return new PlayerRecord(properties); - }; - - /** - * Encodes the specified PlayerRecord message. Does not implicitly {@link gamehall.PlayerRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.PlayerRecord - * @static - * @param {gamehall.IPlayerRecord} message PlayerRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeid != null && Object.hasOwnProperty.call(message, "GameFreeid")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeid); - if (message.GameDetailedLogId != null && Object.hasOwnProperty.call(message, "GameDetailedLogId")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.GameDetailedLogId); - if (message.TotalIn != null && Object.hasOwnProperty.call(message, "TotalIn")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.TotalIn); - if (message.TotalOut != null && Object.hasOwnProperty.call(message, "TotalOut")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.TotalOut); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.Ts); - if (message.MatchType != null && Object.hasOwnProperty.call(message, "MatchType")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.MatchType); - return writer; - }; - - /** - * Encodes the specified PlayerRecord message, length delimited. Does not implicitly {@link gamehall.PlayerRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.PlayerRecord - * @static - * @param {gamehall.IPlayerRecord} message PlayerRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a PlayerRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.PlayerRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.PlayerRecord} PlayerRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.PlayerRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeid = reader.int32(); - break; - } - case 2: { - message.GameDetailedLogId = reader.string(); - break; - } - case 3: { - message.TotalIn = reader.int64(); - break; - } - case 4: { - message.TotalOut = reader.int64(); - break; - } - case 5: { - message.Ts = reader.int32(); - break; - } - case 6: { - message.MatchType = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a PlayerRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.PlayerRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.PlayerRecord} PlayerRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a PlayerRecord message. - * @function verify - * @memberof gamehall.PlayerRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PlayerRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeid != null && message.hasOwnProperty("GameFreeid")) - if (!$util.isInteger(message.GameFreeid)) - return "GameFreeid: integer expected"; - if (message.GameDetailedLogId != null && message.hasOwnProperty("GameDetailedLogId")) - if (!$util.isString(message.GameDetailedLogId)) - return "GameDetailedLogId: string expected"; - if (message.TotalIn != null && message.hasOwnProperty("TotalIn")) - if (!$util.isInteger(message.TotalIn) && !(message.TotalIn && $util.isInteger(message.TotalIn.low) && $util.isInteger(message.TotalIn.high))) - return "TotalIn: integer|Long expected"; - if (message.TotalOut != null && message.hasOwnProperty("TotalOut")) - if (!$util.isInteger(message.TotalOut) && !(message.TotalOut && $util.isInteger(message.TotalOut.low) && $util.isInteger(message.TotalOut.high))) - return "TotalOut: integer|Long expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts)) - return "Ts: integer expected"; - if (message.MatchType != null && message.hasOwnProperty("MatchType")) - if (!$util.isInteger(message.MatchType)) - return "MatchType: integer expected"; - return null; - }; - - /** - * Creates a PlayerRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.PlayerRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.PlayerRecord} PlayerRecord - */ - PlayerRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.PlayerRecord) - return object; - var message = new $root.gamehall.PlayerRecord(); - if (object.GameFreeid != null) - message.GameFreeid = object.GameFreeid | 0; - if (object.GameDetailedLogId != null) - message.GameDetailedLogId = String(object.GameDetailedLogId); - if (object.TotalIn != null) - if ($util.Long) - (message.TotalIn = $util.Long.fromValue(object.TotalIn)).unsigned = false; - else if (typeof object.TotalIn === "string") - message.TotalIn = parseInt(object.TotalIn, 10); - else if (typeof object.TotalIn === "number") - message.TotalIn = object.TotalIn; - else if (typeof object.TotalIn === "object") - message.TotalIn = new $util.LongBits(object.TotalIn.low >>> 0, object.TotalIn.high >>> 0).toNumber(); - if (object.TotalOut != null) - if ($util.Long) - (message.TotalOut = $util.Long.fromValue(object.TotalOut)).unsigned = false; - else if (typeof object.TotalOut === "string") - message.TotalOut = parseInt(object.TotalOut, 10); - else if (typeof object.TotalOut === "number") - message.TotalOut = object.TotalOut; - else if (typeof object.TotalOut === "object") - message.TotalOut = new $util.LongBits(object.TotalOut.low >>> 0, object.TotalOut.high >>> 0).toNumber(); - if (object.Ts != null) - message.Ts = object.Ts | 0; - if (object.MatchType != null) - message.MatchType = object.MatchType | 0; - return message; - }; - - /** - * Creates a plain object from a PlayerRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.PlayerRecord - * @static - * @param {gamehall.PlayerRecord} message PlayerRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - PlayerRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeid = 0; - object.GameDetailedLogId = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalIn = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalIn = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalOut = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalOut = options.longs === String ? "0" : 0; - object.Ts = 0; - object.MatchType = 0; - } - if (message.GameFreeid != null && message.hasOwnProperty("GameFreeid")) - object.GameFreeid = message.GameFreeid; - if (message.GameDetailedLogId != null && message.hasOwnProperty("GameDetailedLogId")) - object.GameDetailedLogId = message.GameDetailedLogId; - if (message.TotalIn != null && message.hasOwnProperty("TotalIn")) - if (typeof message.TotalIn === "number") - object.TotalIn = options.longs === String ? String(message.TotalIn) : message.TotalIn; - else - object.TotalIn = options.longs === String ? $util.Long.prototype.toString.call(message.TotalIn) : options.longs === Number ? new $util.LongBits(message.TotalIn.low >>> 0, message.TotalIn.high >>> 0).toNumber() : message.TotalIn; - if (message.TotalOut != null && message.hasOwnProperty("TotalOut")) - if (typeof message.TotalOut === "number") - object.TotalOut = options.longs === String ? String(message.TotalOut) : message.TotalOut; - else - object.TotalOut = options.longs === String ? $util.Long.prototype.toString.call(message.TotalOut) : options.longs === Number ? new $util.LongBits(message.TotalOut.low >>> 0, message.TotalOut.high >>> 0).toNumber() : message.TotalOut; - if (message.Ts != null && message.hasOwnProperty("Ts")) - object.Ts = message.Ts; - if (message.MatchType != null && message.hasOwnProperty("MatchType")) - object.MatchType = message.MatchType; - return object; - }; - - /** - * Converts this PlayerRecord to JSON. - * @function toJSON - * @memberof gamehall.PlayerRecord - * @instance - * @returns {Object.} JSON object - */ - PlayerRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for PlayerRecord - * @function getTypeUrl - * @memberof gamehall.PlayerRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - PlayerRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.PlayerRecord"; - }; - - return PlayerRecord; - })(); - - gamehall.SCRecordAndNotice = (function() { - - /** - * Properties of a SCRecordAndNotice. - * @memberof gamehall - * @interface ISCRecordAndNotice - * @property {gamehall.OpResultCode_Game|null} [OpCode] SCRecordAndNotice OpCode - * @property {Array.|null} [List] SCRecordAndNotice List - * @property {Array.|null} [Glist] SCRecordAndNotice Glist - * @property {Array.|null} [GlistTs] SCRecordAndNotice GlistTs - */ - - /** - * Constructs a new SCRecordAndNotice. - * @memberof gamehall - * @classdesc Represents a SCRecordAndNotice. - * @implements ISCRecordAndNotice - * @constructor - * @param {gamehall.ISCRecordAndNotice=} [properties] Properties to set - */ - function SCRecordAndNotice(properties) { - this.List = []; - this.Glist = []; - this.GlistTs = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRecordAndNotice OpCode. - * @member {gamehall.OpResultCode_Game} OpCode - * @memberof gamehall.SCRecordAndNotice - * @instance - */ - SCRecordAndNotice.prototype.OpCode = 0; - - /** - * SCRecordAndNotice List. - * @member {Array.} List - * @memberof gamehall.SCRecordAndNotice - * @instance - */ - SCRecordAndNotice.prototype.List = $util.emptyArray; - - /** - * SCRecordAndNotice Glist. - * @member {Array.} Glist - * @memberof gamehall.SCRecordAndNotice - * @instance - */ - SCRecordAndNotice.prototype.Glist = $util.emptyArray; - - /** - * SCRecordAndNotice GlistTs. - * @member {Array.} GlistTs - * @memberof gamehall.SCRecordAndNotice - * @instance - */ - SCRecordAndNotice.prototype.GlistTs = $util.emptyArray; - - /** - * Creates a new SCRecordAndNotice instance using the specified properties. - * @function create - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {gamehall.ISCRecordAndNotice=} [properties] Properties to set - * @returns {gamehall.SCRecordAndNotice} SCRecordAndNotice instance - */ - SCRecordAndNotice.create = function create(properties) { - return new SCRecordAndNotice(properties); - }; - - /** - * Encodes the specified SCRecordAndNotice message. Does not implicitly {@link gamehall.SCRecordAndNotice.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {gamehall.ISCRecordAndNotice} message SCRecordAndNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRecordAndNotice.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpCode); - if (message.List != null && message.List.length) - for (var i = 0; i < message.List.length; ++i) - $root.gamehall.CommonNotice.encode(message.List[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - if (message.Glist != null && message.Glist.length) - for (var i = 0; i < message.Glist.length; ++i) - $root.gamehall.PlayerRecord.encode(message.Glist[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); - if (message.GlistTs != null && message.GlistTs.length) { - writer.uint32(/* id 4, wireType 2 =*/34).fork(); - for (var i = 0; i < message.GlistTs.length; ++i) - writer.int64(message.GlistTs[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCRecordAndNotice message, length delimited. Does not implicitly {@link gamehall.SCRecordAndNotice.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {gamehall.ISCRecordAndNotice} message SCRecordAndNotice message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRecordAndNotice.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRecordAndNotice message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRecordAndNotice} SCRecordAndNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRecordAndNotice.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRecordAndNotice(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int32(); - break; - } - case 2: { - if (!(message.List && message.List.length)) - message.List = []; - message.List.push($root.gamehall.CommonNotice.decode(reader, reader.uint32())); - break; - } - case 3: { - if (!(message.Glist && message.Glist.length)) - message.Glist = []; - message.Glist.push($root.gamehall.PlayerRecord.decode(reader, reader.uint32())); - break; - } - case 4: { - if (!(message.GlistTs && message.GlistTs.length)) - message.GlistTs = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.GlistTs.push(reader.int64()); - } else - message.GlistTs.push(reader.int64()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRecordAndNotice message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRecordAndNotice} SCRecordAndNotice - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRecordAndNotice.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRecordAndNotice message. - * @function verify - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRecordAndNotice.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1016: - case 1017: - case 1018: - case 1019: - case 1020: - case 1022: - case 1024: - case 1040: - case 1042: - case 1043: - case 1044: - case 1045: - case 1048: - case 1050: - case 1053: - case 1054: - case 1055: - case 1056: - case 1058: - case 1059: - case 1082: - case 1097: - case 1098: - case 1075: - case 1076: - case 1077: - case 1078: - case 1096: - case 1103: - case 1113: - case 5023: - case 9000: - case 9001: - case 9002: - case 9003: - case 9010: - break; - } - if (message.List != null && message.hasOwnProperty("List")) { - if (!Array.isArray(message.List)) - return "List: array expected"; - for (var i = 0; i < message.List.length; ++i) { - var error = $root.gamehall.CommonNotice.verify(message.List[i]); - if (error) - return "List." + error; - } - } - if (message.Glist != null && message.hasOwnProperty("Glist")) { - if (!Array.isArray(message.Glist)) - return "Glist: array expected"; - for (var i = 0; i < message.Glist.length; ++i) { - var error = $root.gamehall.PlayerRecord.verify(message.Glist[i]); - if (error) - return "Glist." + error; - } - } - if (message.GlistTs != null && message.hasOwnProperty("GlistTs")) { - if (!Array.isArray(message.GlistTs)) - return "GlistTs: array expected"; - for (var i = 0; i < message.GlistTs.length; ++i) - if (!$util.isInteger(message.GlistTs[i]) && !(message.GlistTs[i] && $util.isInteger(message.GlistTs[i].low) && $util.isInteger(message.GlistTs[i].high))) - return "GlistTs: integer|Long[] expected"; - } - return null; - }; - - /** - * Creates a SCRecordAndNotice message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRecordAndNotice} SCRecordAndNotice - */ - SCRecordAndNotice.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRecordAndNotice) - return object; - var message = new $root.gamehall.SCRecordAndNotice(); - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess_Game": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error_Game": - case 1: - message.OpCode = 1; - break; - case "OPRC_RoomNotExist_Game": - case 1016: - message.OpCode = 1016; - break; - case "OPRC_GameNotExist_Game": - case 1017: - message.OpCode = 1017; - break; - case "OPRC_GameHadClosed": - case 1018: - message.OpCode = 1018; - break; - case "OPRC_RoomIsFull_Game": - case 1019: - message.OpCode = 1019; - break; - case "OPRC_RoomHadExist_Game": - case 1020: - message.OpCode = 1020; - break; - case "OPRC_GameStarting_Game": - case 1022: - message.OpCode = 1022; - break; - case "OPRC_CannotWatchReasonInOther_Game": - case 1024: - message.OpCode = 1024; - break; - case "OPRC_MoneyNotEnough_Game": - case 1040: - message.OpCode = 1040; - break; - case "OPRC_CannotWatchReasonRoomNotStart_Game": - case 1042: - message.OpCode = 1042; - break; - case "OPRC_OnlyAllowClubMemberEnter_Game": - case 1043: - message.OpCode = 1043; - break; - case "OPRC_YourResVerIsLow_Game": - case 1044: - message.OpCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Game": - case 1045: - message.OpCode = 1045; - break; - case "OPRC_ScenePosFull_Game": - case 1048: - message.OpCode = 1048; - break; - case "OPRC_SceneEnterForWatcher_Game": - case 1050: - message.OpCode = 1050; - break; - case "OPRC_RoomHadClosed_Game": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain_Game": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_SameIpForbid_Game": - case 1055: - message.OpCode = 1055; - break; - case "OPRC_CoinNotEnough_Game": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore_Game": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_InOtherGameIng_Game": - case 1059: - message.OpCode = 1059; - break; - case "OPRC_OpYield_Game": - case 1082: - message.OpCode = 1082; - break; - case "OPRC_AllocRoomIdFailed_Game": - case 1097: - message.OpCode = 1097; - break; - case "OPRC_PrivateRoomCountLimit_Game": - case 1098: - message.OpCode = 1098; - break; - case "OPRC_LowerRice_ScenceMax_Game": - case 1075: - message.OpCode = 1075; - break; - case "OPRC_LowerRice_PlayerMax_Game": - case 1076: - message.OpCode = 1076; - break; - case "OPRC_LowerRice_PlayerDownMax_Game": - case 1077: - message.OpCode = 1077; - break; - case "OPRC_YourAreGamingCannotLeave_Game": - case 1078: - message.OpCode = 1078; - break; - case "OPRC_ThirdPltProcessing_Game": - case 1096: - message.OpCode = 1096; - break; - case "OPRC_RoomGameTimes_Game": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_MustBindPromoter_Game": - case 1113: - message.OpCode = 1113; - break; - case "Oprc_Club_ClubIsClose_Game": - case 5023: - message.OpCode = 5023; - break; - case "OPRC_Dg_RegistErr_Game": - case 9000: - message.OpCode = 9000; - break; - case "OPRC_Dg_LoginErr_Game": - case 9001: - message.OpCode = 9001; - break; - case "OPRC_Dg_PlatErr_Game": - case 9002: - message.OpCode = 9002; - break; - case "OPRC_Dg_QuotaNotEnough_Game": - case 9003: - message.OpCode = 9003; - break; - case "OPRC_Thr_GameClose_Game": - case 9010: - message.OpCode = 9010; - break; - } - if (object.List) { - if (!Array.isArray(object.List)) - throw TypeError(".gamehall.SCRecordAndNotice.List: array expected"); - message.List = []; - for (var i = 0; i < object.List.length; ++i) { - if (typeof object.List[i] !== "object") - throw TypeError(".gamehall.SCRecordAndNotice.List: object expected"); - message.List[i] = $root.gamehall.CommonNotice.fromObject(object.List[i]); - } - } - if (object.Glist) { - if (!Array.isArray(object.Glist)) - throw TypeError(".gamehall.SCRecordAndNotice.Glist: array expected"); - message.Glist = []; - for (var i = 0; i < object.Glist.length; ++i) { - if (typeof object.Glist[i] !== "object") - throw TypeError(".gamehall.SCRecordAndNotice.Glist: object expected"); - message.Glist[i] = $root.gamehall.PlayerRecord.fromObject(object.Glist[i]); - } - } - if (object.GlistTs) { - if (!Array.isArray(object.GlistTs)) - throw TypeError(".gamehall.SCRecordAndNotice.GlistTs: array expected"); - message.GlistTs = []; - for (var i = 0; i < object.GlistTs.length; ++i) - if ($util.Long) - (message.GlistTs[i] = $util.Long.fromValue(object.GlistTs[i])).unsigned = false; - else if (typeof object.GlistTs[i] === "string") - message.GlistTs[i] = parseInt(object.GlistTs[i], 10); - else if (typeof object.GlistTs[i] === "number") - message.GlistTs[i] = object.GlistTs[i]; - else if (typeof object.GlistTs[i] === "object") - message.GlistTs[i] = new $util.LongBits(object.GlistTs[i].low >>> 0, object.GlistTs[i].high >>> 0).toNumber(); - } - return message; - }; - - /** - * Creates a plain object from a SCRecordAndNotice message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {gamehall.SCRecordAndNotice} message SCRecordAndNotice - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRecordAndNotice.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.List = []; - object.Glist = []; - object.GlistTs = []; - } - if (options.defaults) - object.OpCode = options.enums === String ? "OPRC_Sucess_Game" : 0; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode_Game[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode_Game[message.OpCode] : message.OpCode; - if (message.List && message.List.length) { - object.List = []; - for (var j = 0; j < message.List.length; ++j) - object.List[j] = $root.gamehall.CommonNotice.toObject(message.List[j], options); - } - if (message.Glist && message.Glist.length) { - object.Glist = []; - for (var j = 0; j < message.Glist.length; ++j) - object.Glist[j] = $root.gamehall.PlayerRecord.toObject(message.Glist[j], options); - } - if (message.GlistTs && message.GlistTs.length) { - object.GlistTs = []; - for (var j = 0; j < message.GlistTs.length; ++j) - if (typeof message.GlistTs[j] === "number") - object.GlistTs[j] = options.longs === String ? String(message.GlistTs[j]) : message.GlistTs[j]; - else - object.GlistTs[j] = options.longs === String ? $util.Long.prototype.toString.call(message.GlistTs[j]) : options.longs === Number ? new $util.LongBits(message.GlistTs[j].low >>> 0, message.GlistTs[j].high >>> 0).toNumber() : message.GlistTs[j]; - } - return object; - }; - - /** - * Converts this SCRecordAndNotice to JSON. - * @function toJSON - * @memberof gamehall.SCRecordAndNotice - * @instance - * @returns {Object.} JSON object - */ - SCRecordAndNotice.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRecordAndNotice - * @function getTypeUrl - * @memberof gamehall.SCRecordAndNotice - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRecordAndNotice.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRecordAndNotice"; - }; - - return SCRecordAndNotice; - })(); - - /** - * OpResultCode_Hall enum. - * @name gamehall.OpResultCode_Hall - * @enum {number} - * @property {number} OPRC_Sucess_Hall=0 OPRC_Sucess_Hall value - * @property {number} OPRC_Error_Hall=1 OPRC_Error_Hall value - * @property {number} OPRC_OnlineReward_Info_FindPlatform_Fail_Hall=10008 OPRC_OnlineReward_Info_FindPlatform_Fail_Hall value - */ - gamehall.OpResultCode_Hall = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "OPRC_Sucess_Hall"] = 0; - values[valuesById[1] = "OPRC_Error_Hall"] = 1; - values[valuesById[10008] = "OPRC_OnlineReward_Info_FindPlatform_Fail_Hall"] = 10008; - return values; - })(); - - /** - * 大厅协议 2340-2379 - * @name gamehall.HallPacketID - * @enum {number} - * @property {number} PACKET_Hall_ZERO=0 PACKET_Hall_ZERO value - * @property {number} PACKET_CS_REBATE_LIST=2340 PACKET_CS_REBATE_LIST value - * @property {number} PACKET_SC_REBATE_LIST=2341 PACKET_SC_REBATE_LIST value - * @property {number} PACKET_CS_REBATE_RECEIVE=2342 PACKET_CS_REBATE_RECEIVE value - * @property {number} PACKET_SC_REBATE_RECEIVE=2343 PACKET_SC_REBATE_RECEIVE value - * @property {number} PACKET_SC_HALL_REDCTRL=2344 PACKET_SC_HALL_REDCTRL value - * @property {number} PACKET_CS_NEWPLAYERINFO=2345 新个人中心 - * @property {number} PACKET_SC_NEWPLAYERINFO=2346 PACKET_SC_NEWPLAYERINFO value - * @property {number} PACKET_CS_CODETYPERECORD=2347 PACKET_CS_CODETYPERECORD value - * @property {number} PACKET_SC_CODETYPERECORD=2348 PACKET_SC_CODETYPERECORD value - * @property {number} PACKET_CS_BETCOINRECORD=2349 PACKET_CS_BETCOINRECORD value - * @property {number} PACKET_SC_BETCOINRECORD=2350 PACKET_SC_BETCOINRECORD value - * @property {number} PACKET_CS_COINDETAILED=2351 PACKET_CS_COINDETAILED value - * @property {number} PACKET_SC_COINDETAILEDTOTAL=2352 PACKET_SC_COINDETAILEDTOTAL value - * @property {number} PACKET_SC_COINTOTAL=2353 PACKET_SC_COINTOTAL value - * @property {number} PACKET_CS_REPORTFORM=2354 PACKET_CS_REPORTFORM value - * @property {number} PACKET_SC_REPORTFORM=2355 PACKET_SC_REPORTFORM value - * @property {number} PACKET_CS_HISTORYRECORD=2356 PACKET_CS_HISTORYRECORD value - * @property {number} PACKET_SC_HISTORYRECORD=2357 PACKET_SC_HISTORYRECORD value - * @property {number} PACKET_CS_RECEIVECODECOIN=2358 PACKET_CS_RECEIVECODECOIN value - * @property {number} PACKET_SC_RECEIVECODECOIN=2359 PACKET_SC_RECEIVECODECOIN value - * @property {number} PACKET_SC_REBATETOTALINFO=2360 PACKET_SC_REBATETOTALINFO value - * @property {number} PACKET_CS_GETISCANREBATE=2362 PACKET_CS_GETISCANREBATE value - * @property {number} PACKET_SC_GETISCANREBATE=2363 PACKET_SC_GETISCANREBATE value - * @property {number} PACKET_CS_GETRANKINFO=2364 PACKET_CS_GETRANKINFO value - * @property {number} PACKET_SC_GETRANKINFO=2365 PACKET_SC_GETRANKINFO value - * @property {number} PACKET_SC_SHOWRED=2366 PACKET_SC_SHOWRED value - */ - gamehall.HallPacketID = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "PACKET_Hall_ZERO"] = 0; - values[valuesById[2340] = "PACKET_CS_REBATE_LIST"] = 2340; - values[valuesById[2341] = "PACKET_SC_REBATE_LIST"] = 2341; - values[valuesById[2342] = "PACKET_CS_REBATE_RECEIVE"] = 2342; - values[valuesById[2343] = "PACKET_SC_REBATE_RECEIVE"] = 2343; - values[valuesById[2344] = "PACKET_SC_HALL_REDCTRL"] = 2344; - values[valuesById[2345] = "PACKET_CS_NEWPLAYERINFO"] = 2345; - values[valuesById[2346] = "PACKET_SC_NEWPLAYERINFO"] = 2346; - values[valuesById[2347] = "PACKET_CS_CODETYPERECORD"] = 2347; - values[valuesById[2348] = "PACKET_SC_CODETYPERECORD"] = 2348; - values[valuesById[2349] = "PACKET_CS_BETCOINRECORD"] = 2349; - values[valuesById[2350] = "PACKET_SC_BETCOINRECORD"] = 2350; - values[valuesById[2351] = "PACKET_CS_COINDETAILED"] = 2351; - values[valuesById[2352] = "PACKET_SC_COINDETAILEDTOTAL"] = 2352; - values[valuesById[2353] = "PACKET_SC_COINTOTAL"] = 2353; - values[valuesById[2354] = "PACKET_CS_REPORTFORM"] = 2354; - values[valuesById[2355] = "PACKET_SC_REPORTFORM"] = 2355; - values[valuesById[2356] = "PACKET_CS_HISTORYRECORD"] = 2356; - values[valuesById[2357] = "PACKET_SC_HISTORYRECORD"] = 2357; - values[valuesById[2358] = "PACKET_CS_RECEIVECODECOIN"] = 2358; - values[valuesById[2359] = "PACKET_SC_RECEIVECODECOIN"] = 2359; - values[valuesById[2360] = "PACKET_SC_REBATETOTALINFO"] = 2360; - values[valuesById[2362] = "PACKET_CS_GETISCANREBATE"] = 2362; - values[valuesById[2363] = "PACKET_SC_GETISCANREBATE"] = 2363; - values[valuesById[2364] = "PACKET_CS_GETRANKINFO"] = 2364; - values[valuesById[2365] = "PACKET_SC_GETRANKINFO"] = 2365; - values[valuesById[2366] = "PACKET_SC_SHOWRED"] = 2366; - return values; - })(); - - gamehall.RebateInfo = (function() { - - /** - * Properties of a RebateInfo. - * @memberof gamehall - * @interface IRebateInfo - * @property {string|null} [Platform] RebateInfo Platform - * @property {number|Long|null} [validBetTotal] RebateInfo validBetTotal - */ - - /** - * Constructs a new RebateInfo. - * @memberof gamehall - * @classdesc rebatetask - * @implements IRebateInfo - * @constructor - * @param {gamehall.IRebateInfo=} [properties] Properties to set - */ - function RebateInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * RebateInfo Platform. - * @member {string} Platform - * @memberof gamehall.RebateInfo - * @instance - */ - RebateInfo.prototype.Platform = ""; - - /** - * RebateInfo validBetTotal. - * @member {number|Long} validBetTotal - * @memberof gamehall.RebateInfo - * @instance - */ - RebateInfo.prototype.validBetTotal = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new RebateInfo instance using the specified properties. - * @function create - * @memberof gamehall.RebateInfo - * @static - * @param {gamehall.IRebateInfo=} [properties] Properties to set - * @returns {gamehall.RebateInfo} RebateInfo instance - */ - RebateInfo.create = function create(properties) { - return new RebateInfo(properties); - }; - - /** - * Encodes the specified RebateInfo message. Does not implicitly {@link gamehall.RebateInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.RebateInfo - * @static - * @param {gamehall.IRebateInfo} message RebateInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RebateInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Platform != null && Object.hasOwnProperty.call(message, "Platform")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.Platform); - if (message.validBetTotal != null && Object.hasOwnProperty.call(message, "validBetTotal")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.validBetTotal); - return writer; - }; - - /** - * Encodes the specified RebateInfo message, length delimited. Does not implicitly {@link gamehall.RebateInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.RebateInfo - * @static - * @param {gamehall.IRebateInfo} message RebateInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RebateInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a RebateInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.RebateInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.RebateInfo} RebateInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RebateInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.RebateInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Platform = reader.string(); - break; - } - case 2: { - message.validBetTotal = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a RebateInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.RebateInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.RebateInfo} RebateInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RebateInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a RebateInfo message. - * @function verify - * @memberof gamehall.RebateInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - RebateInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Platform != null && message.hasOwnProperty("Platform")) - if (!$util.isString(message.Platform)) - return "Platform: string expected"; - if (message.validBetTotal != null && message.hasOwnProperty("validBetTotal")) - if (!$util.isInteger(message.validBetTotal) && !(message.validBetTotal && $util.isInteger(message.validBetTotal.low) && $util.isInteger(message.validBetTotal.high))) - return "validBetTotal: integer|Long expected"; - return null; - }; - - /** - * Creates a RebateInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.RebateInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.RebateInfo} RebateInfo - */ - RebateInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.RebateInfo) - return object; - var message = new $root.gamehall.RebateInfo(); - if (object.Platform != null) - message.Platform = String(object.Platform); - if (object.validBetTotal != null) - if ($util.Long) - (message.validBetTotal = $util.Long.fromValue(object.validBetTotal)).unsigned = false; - else if (typeof object.validBetTotal === "string") - message.validBetTotal = parseInt(object.validBetTotal, 10); - else if (typeof object.validBetTotal === "number") - message.validBetTotal = object.validBetTotal; - else if (typeof object.validBetTotal === "object") - message.validBetTotal = new $util.LongBits(object.validBetTotal.low >>> 0, object.validBetTotal.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a RebateInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.RebateInfo - * @static - * @param {gamehall.RebateInfo} message RebateInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - RebateInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Platform = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.validBetTotal = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.validBetTotal = options.longs === String ? "0" : 0; - } - if (message.Platform != null && message.hasOwnProperty("Platform")) - object.Platform = message.Platform; - if (message.validBetTotal != null && message.hasOwnProperty("validBetTotal")) - if (typeof message.validBetTotal === "number") - object.validBetTotal = options.longs === String ? String(message.validBetTotal) : message.validBetTotal; - else - object.validBetTotal = options.longs === String ? $util.Long.prototype.toString.call(message.validBetTotal) : options.longs === Number ? new $util.LongBits(message.validBetTotal.low >>> 0, message.validBetTotal.high >>> 0).toNumber() : message.validBetTotal; - return object; - }; - - /** - * Converts this RebateInfo to JSON. - * @function toJSON - * @memberof gamehall.RebateInfo - * @instance - * @returns {Object.} JSON object - */ - RebateInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for RebateInfo - * @function getTypeUrl - * @memberof gamehall.RebateInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - RebateInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.RebateInfo"; - }; - - return RebateInfo; - })(); - - gamehall.CSRebateList = (function() { - - /** - * Properties of a CSRebateList. - * @memberof gamehall - * @interface ICSRebateList - */ - - /** - * Constructs a new CSRebateList. - * @memberof gamehall - * @classdesc Represents a CSRebateList. - * @implements ICSRebateList - * @constructor - * @param {gamehall.ICSRebateList=} [properties] Properties to set - */ - function CSRebateList(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSRebateList instance using the specified properties. - * @function create - * @memberof gamehall.CSRebateList - * @static - * @param {gamehall.ICSRebateList=} [properties] Properties to set - * @returns {gamehall.CSRebateList} CSRebateList instance - */ - CSRebateList.create = function create(properties) { - return new CSRebateList(properties); - }; - - /** - * Encodes the specified CSRebateList message. Does not implicitly {@link gamehall.CSRebateList.verify|verify} messages. - * @function encode - * @memberof gamehall.CSRebateList - * @static - * @param {gamehall.ICSRebateList} message CSRebateList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSRebateList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSRebateList message, length delimited. Does not implicitly {@link gamehall.CSRebateList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSRebateList - * @static - * @param {gamehall.ICSRebateList} message CSRebateList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSRebateList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSRebateList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSRebateList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSRebateList} CSRebateList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSRebateList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSRebateList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSRebateList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSRebateList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSRebateList} CSRebateList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSRebateList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSRebateList message. - * @function verify - * @memberof gamehall.CSRebateList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSRebateList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSRebateList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSRebateList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSRebateList} CSRebateList - */ - CSRebateList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSRebateList) - return object; - return new $root.gamehall.CSRebateList(); - }; - - /** - * Creates a plain object from a CSRebateList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSRebateList - * @static - * @param {gamehall.CSRebateList} message CSRebateList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSRebateList.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSRebateList to JSON. - * @function toJSON - * @memberof gamehall.CSRebateList - * @instance - * @returns {Object.} JSON object - */ - CSRebateList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSRebateList - * @function getTypeUrl - * @memberof gamehall.CSRebateList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSRebateList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSRebateList"; - }; - - return CSRebateList; - })(); - - gamehall.SCRebateList = (function() { - - /** - * Properties of a SCRebateList. - * @memberof gamehall - * @interface ISCRebateList - * @property {Array.|null} [RebateList] SCRebateList RebateList - * @property {number|Long|null} [RebateTotalCoin] SCRebateList RebateTotalCoin - */ - - /** - * Constructs a new SCRebateList. - * @memberof gamehall - * @classdesc Represents a SCRebateList. - * @implements ISCRebateList - * @constructor - * @param {gamehall.ISCRebateList=} [properties] Properties to set - */ - function SCRebateList(properties) { - this.RebateList = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRebateList RebateList. - * @member {Array.} RebateList - * @memberof gamehall.SCRebateList - * @instance - */ - SCRebateList.prototype.RebateList = $util.emptyArray; - - /** - * SCRebateList RebateTotalCoin. - * @member {number|Long} RebateTotalCoin - * @memberof gamehall.SCRebateList - * @instance - */ - SCRebateList.prototype.RebateTotalCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCRebateList instance using the specified properties. - * @function create - * @memberof gamehall.SCRebateList - * @static - * @param {gamehall.ISCRebateList=} [properties] Properties to set - * @returns {gamehall.SCRebateList} SCRebateList instance - */ - SCRebateList.create = function create(properties) { - return new SCRebateList(properties); - }; - - /** - * Encodes the specified SCRebateList message. Does not implicitly {@link gamehall.SCRebateList.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRebateList - * @static - * @param {gamehall.ISCRebateList} message SCRebateList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRebateList.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RebateList != null && message.RebateList.length) - for (var i = 0; i < message.RebateList.length; ++i) - $root.gamehall.RebateInfo.encode(message.RebateList[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.RebateTotalCoin != null && Object.hasOwnProperty.call(message, "RebateTotalCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.RebateTotalCoin); - return writer; - }; - - /** - * Encodes the specified SCRebateList message, length delimited. Does not implicitly {@link gamehall.SCRebateList.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRebateList - * @static - * @param {gamehall.ISCRebateList} message SCRebateList message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRebateList.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRebateList message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRebateList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRebateList} SCRebateList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRebateList.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRebateList(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.RebateList && message.RebateList.length)) - message.RebateList = []; - message.RebateList.push($root.gamehall.RebateInfo.decode(reader, reader.uint32())); - break; - } - case 2: { - message.RebateTotalCoin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRebateList message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRebateList - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRebateList} SCRebateList - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRebateList.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRebateList message. - * @function verify - * @memberof gamehall.SCRebateList - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRebateList.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RebateList != null && message.hasOwnProperty("RebateList")) { - if (!Array.isArray(message.RebateList)) - return "RebateList: array expected"; - for (var i = 0; i < message.RebateList.length; ++i) { - var error = $root.gamehall.RebateInfo.verify(message.RebateList[i]); - if (error) - return "RebateList." + error; - } - } - if (message.RebateTotalCoin != null && message.hasOwnProperty("RebateTotalCoin")) - if (!$util.isInteger(message.RebateTotalCoin) && !(message.RebateTotalCoin && $util.isInteger(message.RebateTotalCoin.low) && $util.isInteger(message.RebateTotalCoin.high))) - return "RebateTotalCoin: integer|Long expected"; - return null; - }; - - /** - * Creates a SCRebateList message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRebateList - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRebateList} SCRebateList - */ - SCRebateList.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRebateList) - return object; - var message = new $root.gamehall.SCRebateList(); - if (object.RebateList) { - if (!Array.isArray(object.RebateList)) - throw TypeError(".gamehall.SCRebateList.RebateList: array expected"); - message.RebateList = []; - for (var i = 0; i < object.RebateList.length; ++i) { - if (typeof object.RebateList[i] !== "object") - throw TypeError(".gamehall.SCRebateList.RebateList: object expected"); - message.RebateList[i] = $root.gamehall.RebateInfo.fromObject(object.RebateList[i]); - } - } - if (object.RebateTotalCoin != null) - if ($util.Long) - (message.RebateTotalCoin = $util.Long.fromValue(object.RebateTotalCoin)).unsigned = false; - else if (typeof object.RebateTotalCoin === "string") - message.RebateTotalCoin = parseInt(object.RebateTotalCoin, 10); - else if (typeof object.RebateTotalCoin === "number") - message.RebateTotalCoin = object.RebateTotalCoin; - else if (typeof object.RebateTotalCoin === "object") - message.RebateTotalCoin = new $util.LongBits(object.RebateTotalCoin.low >>> 0, object.RebateTotalCoin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCRebateList message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRebateList - * @static - * @param {gamehall.SCRebateList} message SCRebateList - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRebateList.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.RebateList = []; - if (options.defaults) - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.RebateTotalCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.RebateTotalCoin = options.longs === String ? "0" : 0; - if (message.RebateList && message.RebateList.length) { - object.RebateList = []; - for (var j = 0; j < message.RebateList.length; ++j) - object.RebateList[j] = $root.gamehall.RebateInfo.toObject(message.RebateList[j], options); - } - if (message.RebateTotalCoin != null && message.hasOwnProperty("RebateTotalCoin")) - if (typeof message.RebateTotalCoin === "number") - object.RebateTotalCoin = options.longs === String ? String(message.RebateTotalCoin) : message.RebateTotalCoin; - else - object.RebateTotalCoin = options.longs === String ? $util.Long.prototype.toString.call(message.RebateTotalCoin) : options.longs === Number ? new $util.LongBits(message.RebateTotalCoin.low >>> 0, message.RebateTotalCoin.high >>> 0).toNumber() : message.RebateTotalCoin; - return object; - }; - - /** - * Converts this SCRebateList to JSON. - * @function toJSON - * @memberof gamehall.SCRebateList - * @instance - * @returns {Object.} JSON object - */ - SCRebateList.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRebateList - * @function getTypeUrl - * @memberof gamehall.SCRebateList - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRebateList.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRebateList"; - }; - - return SCRebateList; - })(); - - gamehall.CSReceiveRebate = (function() { - - /** - * Properties of a CSReceiveRebate. - * @memberof gamehall - * @interface ICSReceiveRebate - */ - - /** - * Constructs a new CSReceiveRebate. - * @memberof gamehall - * @classdesc Represents a CSReceiveRebate. - * @implements ICSReceiveRebate - * @constructor - * @param {gamehall.ICSReceiveRebate=} [properties] Properties to set - */ - function CSReceiveRebate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSReceiveRebate instance using the specified properties. - * @function create - * @memberof gamehall.CSReceiveRebate - * @static - * @param {gamehall.ICSReceiveRebate=} [properties] Properties to set - * @returns {gamehall.CSReceiveRebate} CSReceiveRebate instance - */ - CSReceiveRebate.create = function create(properties) { - return new CSReceiveRebate(properties); - }; - - /** - * Encodes the specified CSReceiveRebate message. Does not implicitly {@link gamehall.CSReceiveRebate.verify|verify} messages. - * @function encode - * @memberof gamehall.CSReceiveRebate - * @static - * @param {gamehall.ICSReceiveRebate} message CSReceiveRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReceiveRebate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSReceiveRebate message, length delimited. Does not implicitly {@link gamehall.CSReceiveRebate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSReceiveRebate - * @static - * @param {gamehall.ICSReceiveRebate} message CSReceiveRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReceiveRebate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSReceiveRebate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSReceiveRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSReceiveRebate} CSReceiveRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReceiveRebate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSReceiveRebate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSReceiveRebate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSReceiveRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSReceiveRebate} CSReceiveRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReceiveRebate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSReceiveRebate message. - * @function verify - * @memberof gamehall.CSReceiveRebate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSReceiveRebate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSReceiveRebate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSReceiveRebate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSReceiveRebate} CSReceiveRebate - */ - CSReceiveRebate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSReceiveRebate) - return object; - return new $root.gamehall.CSReceiveRebate(); - }; - - /** - * Creates a plain object from a CSReceiveRebate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSReceiveRebate - * @static - * @param {gamehall.CSReceiveRebate} message CSReceiveRebate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSReceiveRebate.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSReceiveRebate to JSON. - * @function toJSON - * @memberof gamehall.CSReceiveRebate - * @instance - * @returns {Object.} JSON object - */ - CSReceiveRebate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSReceiveRebate - * @function getTypeUrl - * @memberof gamehall.CSReceiveRebate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSReceiveRebate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSReceiveRebate"; - }; - - return CSReceiveRebate; - })(); - - gamehall.SCReceiveRebate = (function() { - - /** - * Properties of a SCReceiveRebate. - * @memberof gamehall - * @interface ISCReceiveRebate - * @property {gamehall.OpResultCode_Hall|null} [OpRetCode] SCReceiveRebate OpRetCode - * @property {number|Long|null} [Coin] SCReceiveRebate Coin - */ - - /** - * Constructs a new SCReceiveRebate. - * @memberof gamehall - * @classdesc Represents a SCReceiveRebate. - * @implements ISCReceiveRebate - * @constructor - * @param {gamehall.ISCReceiveRebate=} [properties] Properties to set - */ - function SCReceiveRebate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCReceiveRebate OpRetCode. - * @member {gamehall.OpResultCode_Hall} OpRetCode - * @memberof gamehall.SCReceiveRebate - * @instance - */ - SCReceiveRebate.prototype.OpRetCode = 0; - - /** - * SCReceiveRebate Coin. - * @member {number|Long} Coin - * @memberof gamehall.SCReceiveRebate - * @instance - */ - SCReceiveRebate.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCReceiveRebate instance using the specified properties. - * @function create - * @memberof gamehall.SCReceiveRebate - * @static - * @param {gamehall.ISCReceiveRebate=} [properties] Properties to set - * @returns {gamehall.SCReceiveRebate} SCReceiveRebate instance - */ - SCReceiveRebate.create = function create(properties) { - return new SCReceiveRebate(properties); - }; - - /** - * Encodes the specified SCReceiveRebate message. Does not implicitly {@link gamehall.SCReceiveRebate.verify|verify} messages. - * @function encode - * @memberof gamehall.SCReceiveRebate - * @static - * @param {gamehall.ISCReceiveRebate} message SCReceiveRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReceiveRebate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Coin); - return writer; - }; - - /** - * Encodes the specified SCReceiveRebate message, length delimited. Does not implicitly {@link gamehall.SCReceiveRebate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCReceiveRebate - * @static - * @param {gamehall.ISCReceiveRebate} message SCReceiveRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReceiveRebate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCReceiveRebate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCReceiveRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCReceiveRebate} SCReceiveRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReceiveRebate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCReceiveRebate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.Coin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCReceiveRebate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCReceiveRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCReceiveRebate} SCReceiveRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReceiveRebate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCReceiveRebate message. - * @function verify - * @memberof gamehall.SCReceiveRebate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCReceiveRebate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 10008: - break; - } - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - return null; - }; - - /** - * Creates a SCReceiveRebate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCReceiveRebate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCReceiveRebate} SCReceiveRebate - */ - SCReceiveRebate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCReceiveRebate) - return object; - var message = new $root.gamehall.SCReceiveRebate(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Hall": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Hall": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_OnlineReward_Info_FindPlatform_Fail_Hall": - case 10008: - message.OpRetCode = 10008; - break; - } - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCReceiveRebate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCReceiveRebate - * @static - * @param {gamehall.SCReceiveRebate} message SCReceiveRebate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCReceiveRebate.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Hall" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Hall[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Hall[message.OpRetCode] : message.OpRetCode; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - return object; - }; - - /** - * Converts this SCReceiveRebate to JSON. - * @function toJSON - * @memberof gamehall.SCReceiveRebate - * @instance - * @returns {Object.} JSON object - */ - SCReceiveRebate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCReceiveRebate - * @function getTypeUrl - * @memberof gamehall.SCReceiveRebate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCReceiveRebate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCReceiveRebate"; - }; - - return SCReceiveRebate; - })(); - - gamehall.SCRedCtrl = (function() { - - /** - * Properties of a SCRedCtrl. - * @memberof gamehall - * @interface ISCRedCtrl - * @property {number|Long|null} [OpCode] SCRedCtrl OpCode - * @property {boolean|null} [IsFShow] SCRedCtrl IsFShow - */ - - /** - * Constructs a new SCRedCtrl. - * @memberof gamehall - * @classdesc Represents a SCRedCtrl. - * @implements ISCRedCtrl - * @constructor - * @param {gamehall.ISCRedCtrl=} [properties] Properties to set - */ - function SCRedCtrl(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRedCtrl OpCode. - * @member {number|Long} OpCode - * @memberof gamehall.SCRedCtrl - * @instance - */ - SCRedCtrl.prototype.OpCode = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCRedCtrl IsFShow. - * @member {boolean} IsFShow - * @memberof gamehall.SCRedCtrl - * @instance - */ - SCRedCtrl.prototype.IsFShow = false; - - /** - * Creates a new SCRedCtrl instance using the specified properties. - * @function create - * @memberof gamehall.SCRedCtrl - * @static - * @param {gamehall.ISCRedCtrl=} [properties] Properties to set - * @returns {gamehall.SCRedCtrl} SCRedCtrl instance - */ - SCRedCtrl.create = function create(properties) { - return new SCRedCtrl(properties); - }; - - /** - * Encodes the specified SCRedCtrl message. Does not implicitly {@link gamehall.SCRedCtrl.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRedCtrl - * @static - * @param {gamehall.ISCRedCtrl} message SCRedCtrl message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRedCtrl.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.OpCode); - if (message.IsFShow != null && Object.hasOwnProperty.call(message, "IsFShow")) - writer.uint32(/* id 2, wireType 0 =*/16).bool(message.IsFShow); - return writer; - }; - - /** - * Encodes the specified SCRedCtrl message, length delimited. Does not implicitly {@link gamehall.SCRedCtrl.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRedCtrl - * @static - * @param {gamehall.ISCRedCtrl} message SCRedCtrl message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRedCtrl.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRedCtrl message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRedCtrl - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRedCtrl} SCRedCtrl - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRedCtrl.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRedCtrl(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int64(); - break; - } - case 2: { - message.IsFShow = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRedCtrl message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRedCtrl - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRedCtrl} SCRedCtrl - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRedCtrl.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRedCtrl message. - * @function verify - * @memberof gamehall.SCRedCtrl - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRedCtrl.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - if (!$util.isInteger(message.OpCode) && !(message.OpCode && $util.isInteger(message.OpCode.low) && $util.isInteger(message.OpCode.high))) - return "OpCode: integer|Long expected"; - if (message.IsFShow != null && message.hasOwnProperty("IsFShow")) - if (typeof message.IsFShow !== "boolean") - return "IsFShow: boolean expected"; - return null; - }; - - /** - * Creates a SCRedCtrl message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRedCtrl - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRedCtrl} SCRedCtrl - */ - SCRedCtrl.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRedCtrl) - return object; - var message = new $root.gamehall.SCRedCtrl(); - if (object.OpCode != null) - if ($util.Long) - (message.OpCode = $util.Long.fromValue(object.OpCode)).unsigned = false; - else if (typeof object.OpCode === "string") - message.OpCode = parseInt(object.OpCode, 10); - else if (typeof object.OpCode === "number") - message.OpCode = object.OpCode; - else if (typeof object.OpCode === "object") - message.OpCode = new $util.LongBits(object.OpCode.low >>> 0, object.OpCode.high >>> 0).toNumber(); - if (object.IsFShow != null) - message.IsFShow = Boolean(object.IsFShow); - return message; - }; - - /** - * Creates a plain object from a SCRedCtrl message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRedCtrl - * @static - * @param {gamehall.SCRedCtrl} message SCRedCtrl - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRedCtrl.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.OpCode = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.OpCode = options.longs === String ? "0" : 0; - object.IsFShow = false; - } - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - if (typeof message.OpCode === "number") - object.OpCode = options.longs === String ? String(message.OpCode) : message.OpCode; - else - object.OpCode = options.longs === String ? $util.Long.prototype.toString.call(message.OpCode) : options.longs === Number ? new $util.LongBits(message.OpCode.low >>> 0, message.OpCode.high >>> 0).toNumber() : message.OpCode; - if (message.IsFShow != null && message.hasOwnProperty("IsFShow")) - object.IsFShow = message.IsFShow; - return object; - }; - - /** - * Converts this SCRedCtrl to JSON. - * @function toJSON - * @memberof gamehall.SCRedCtrl - * @instance - * @returns {Object.} JSON object - */ - SCRedCtrl.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRedCtrl - * @function getTypeUrl - * @memberof gamehall.SCRedCtrl - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRedCtrl.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRedCtrl"; - }; - - return SCRedCtrl; - })(); - - gamehall.CSGetIsCanRebate = (function() { - - /** - * Properties of a CSGetIsCanRebate. - * @memberof gamehall - * @interface ICSGetIsCanRebate - */ - - /** - * Constructs a new CSGetIsCanRebate. - * @memberof gamehall - * @classdesc Represents a CSGetIsCanRebate. - * @implements ICSGetIsCanRebate - * @constructor - * @param {gamehall.ICSGetIsCanRebate=} [properties] Properties to set - */ - function CSGetIsCanRebate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSGetIsCanRebate instance using the specified properties. - * @function create - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {gamehall.ICSGetIsCanRebate=} [properties] Properties to set - * @returns {gamehall.CSGetIsCanRebate} CSGetIsCanRebate instance - */ - CSGetIsCanRebate.create = function create(properties) { - return new CSGetIsCanRebate(properties); - }; - - /** - * Encodes the specified CSGetIsCanRebate message. Does not implicitly {@link gamehall.CSGetIsCanRebate.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {gamehall.ICSGetIsCanRebate} message CSGetIsCanRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetIsCanRebate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSGetIsCanRebate message, length delimited. Does not implicitly {@link gamehall.CSGetIsCanRebate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {gamehall.ICSGetIsCanRebate} message CSGetIsCanRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetIsCanRebate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetIsCanRebate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetIsCanRebate} CSGetIsCanRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetIsCanRebate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetIsCanRebate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetIsCanRebate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetIsCanRebate} CSGetIsCanRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetIsCanRebate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetIsCanRebate message. - * @function verify - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetIsCanRebate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSGetIsCanRebate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetIsCanRebate} CSGetIsCanRebate - */ - CSGetIsCanRebate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetIsCanRebate) - return object; - return new $root.gamehall.CSGetIsCanRebate(); - }; - - /** - * Creates a plain object from a CSGetIsCanRebate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {gamehall.CSGetIsCanRebate} message CSGetIsCanRebate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetIsCanRebate.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSGetIsCanRebate to JSON. - * @function toJSON - * @memberof gamehall.CSGetIsCanRebate - * @instance - * @returns {Object.} JSON object - */ - CSGetIsCanRebate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetIsCanRebate - * @function getTypeUrl - * @memberof gamehall.CSGetIsCanRebate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetIsCanRebate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetIsCanRebate"; - }; - - return CSGetIsCanRebate; - })(); - - gamehall.SCGetIsCanRebate = (function() { - - /** - * Properties of a SCGetIsCanRebate. - * @memberof gamehall - * @interface ISCGetIsCanRebate - * @property {gamehall.OpResultCode_Hall|null} [OpRetCode] SCGetIsCanRebate OpRetCode - * @property {number|Long|null} [IsCan] SCGetIsCanRebate IsCan - * @property {string|null} [Url] SCGetIsCanRebate Url - * @property {string|null} [WX] SCGetIsCanRebate WX - */ - - /** - * Constructs a new SCGetIsCanRebate. - * @memberof gamehall - * @classdesc Represents a SCGetIsCanRebate. - * @implements ISCGetIsCanRebate - * @constructor - * @param {gamehall.ISCGetIsCanRebate=} [properties] Properties to set - */ - function SCGetIsCanRebate(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetIsCanRebate OpRetCode. - * @member {gamehall.OpResultCode_Hall} OpRetCode - * @memberof gamehall.SCGetIsCanRebate - * @instance - */ - SCGetIsCanRebate.prototype.OpRetCode = 0; - - /** - * SCGetIsCanRebate IsCan. - * @member {number|Long} IsCan - * @memberof gamehall.SCGetIsCanRebate - * @instance - */ - SCGetIsCanRebate.prototype.IsCan = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCGetIsCanRebate Url. - * @member {string} Url - * @memberof gamehall.SCGetIsCanRebate - * @instance - */ - SCGetIsCanRebate.prototype.Url = ""; - - /** - * SCGetIsCanRebate WX. - * @member {string} WX - * @memberof gamehall.SCGetIsCanRebate - * @instance - */ - SCGetIsCanRebate.prototype.WX = ""; - - /** - * Creates a new SCGetIsCanRebate instance using the specified properties. - * @function create - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {gamehall.ISCGetIsCanRebate=} [properties] Properties to set - * @returns {gamehall.SCGetIsCanRebate} SCGetIsCanRebate instance - */ - SCGetIsCanRebate.create = function create(properties) { - return new SCGetIsCanRebate(properties); - }; - - /** - * Encodes the specified SCGetIsCanRebate message. Does not implicitly {@link gamehall.SCGetIsCanRebate.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {gamehall.ISCGetIsCanRebate} message SCGetIsCanRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetIsCanRebate.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.IsCan != null && Object.hasOwnProperty.call(message, "IsCan")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.IsCan); - if (message.Url != null && Object.hasOwnProperty.call(message, "Url")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.Url); - if (message.WX != null && Object.hasOwnProperty.call(message, "WX")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.WX); - return writer; - }; - - /** - * Encodes the specified SCGetIsCanRebate message, length delimited. Does not implicitly {@link gamehall.SCGetIsCanRebate.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {gamehall.ISCGetIsCanRebate} message SCGetIsCanRebate message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetIsCanRebate.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetIsCanRebate message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetIsCanRebate} SCGetIsCanRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetIsCanRebate.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetIsCanRebate(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.IsCan = reader.int64(); - break; - } - case 3: { - message.Url = reader.string(); - break; - } - case 4: { - message.WX = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetIsCanRebate message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetIsCanRebate} SCGetIsCanRebate - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetIsCanRebate.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetIsCanRebate message. - * @function verify - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetIsCanRebate.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 10008: - break; - } - if (message.IsCan != null && message.hasOwnProperty("IsCan")) - if (!$util.isInteger(message.IsCan) && !(message.IsCan && $util.isInteger(message.IsCan.low) && $util.isInteger(message.IsCan.high))) - return "IsCan: integer|Long expected"; - if (message.Url != null && message.hasOwnProperty("Url")) - if (!$util.isString(message.Url)) - return "Url: string expected"; - if (message.WX != null && message.hasOwnProperty("WX")) - if (!$util.isString(message.WX)) - return "WX: string expected"; - return null; - }; - - /** - * Creates a SCGetIsCanRebate message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetIsCanRebate} SCGetIsCanRebate - */ - SCGetIsCanRebate.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetIsCanRebate) - return object; - var message = new $root.gamehall.SCGetIsCanRebate(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Hall": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Hall": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_OnlineReward_Info_FindPlatform_Fail_Hall": - case 10008: - message.OpRetCode = 10008; - break; - } - if (object.IsCan != null) - if ($util.Long) - (message.IsCan = $util.Long.fromValue(object.IsCan)).unsigned = false; - else if (typeof object.IsCan === "string") - message.IsCan = parseInt(object.IsCan, 10); - else if (typeof object.IsCan === "number") - message.IsCan = object.IsCan; - else if (typeof object.IsCan === "object") - message.IsCan = new $util.LongBits(object.IsCan.low >>> 0, object.IsCan.high >>> 0).toNumber(); - if (object.Url != null) - message.Url = String(object.Url); - if (object.WX != null) - message.WX = String(object.WX); - return message; - }; - - /** - * Creates a plain object from a SCGetIsCanRebate message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {gamehall.SCGetIsCanRebate} message SCGetIsCanRebate - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetIsCanRebate.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Hall" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.IsCan = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.IsCan = options.longs === String ? "0" : 0; - object.Url = ""; - object.WX = ""; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Hall[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Hall[message.OpRetCode] : message.OpRetCode; - if (message.IsCan != null && message.hasOwnProperty("IsCan")) - if (typeof message.IsCan === "number") - object.IsCan = options.longs === String ? String(message.IsCan) : message.IsCan; - else - object.IsCan = options.longs === String ? $util.Long.prototype.toString.call(message.IsCan) : options.longs === Number ? new $util.LongBits(message.IsCan.low >>> 0, message.IsCan.high >>> 0).toNumber() : message.IsCan; - if (message.Url != null && message.hasOwnProperty("Url")) - object.Url = message.Url; - if (message.WX != null && message.hasOwnProperty("WX")) - object.WX = message.WX; - return object; - }; - - /** - * Converts this SCGetIsCanRebate to JSON. - * @function toJSON - * @memberof gamehall.SCGetIsCanRebate - * @instance - * @returns {Object.} JSON object - */ - SCGetIsCanRebate.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetIsCanRebate - * @function getTypeUrl - * @memberof gamehall.SCGetIsCanRebate - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetIsCanRebate.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetIsCanRebate"; - }; - - return SCGetIsCanRebate; - })(); - - gamehall.HallGameType = (function() { - - /** - * Properties of a HallGameType. - * @memberof gamehall - * @interface IHallGameType - * @property {number|null} [GameId] HallGameType GameId - * @property {number|null} [GameMode] HallGameType GameMode - */ - - /** - * Constructs a new HallGameType. - * @memberof gamehall - * @classdesc 个人信息////////////////////////////////////////////////////////////// - * @implements IHallGameType - * @constructor - * @param {gamehall.IHallGameType=} [properties] Properties to set - */ - function HallGameType(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * HallGameType GameId. - * @member {number} GameId - * @memberof gamehall.HallGameType - * @instance - */ - HallGameType.prototype.GameId = 0; - - /** - * HallGameType GameMode. - * @member {number} GameMode - * @memberof gamehall.HallGameType - * @instance - */ - HallGameType.prototype.GameMode = 0; - - /** - * Creates a new HallGameType instance using the specified properties. - * @function create - * @memberof gamehall.HallGameType - * @static - * @param {gamehall.IHallGameType=} [properties] Properties to set - * @returns {gamehall.HallGameType} HallGameType instance - */ - HallGameType.create = function create(properties) { - return new HallGameType(properties); - }; - - /** - * Encodes the specified HallGameType message. Does not implicitly {@link gamehall.HallGameType.verify|verify} messages. - * @function encode - * @memberof gamehall.HallGameType - * @static - * @param {gamehall.IHallGameType} message HallGameType message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallGameType.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.GameMode != null && Object.hasOwnProperty.call(message, "GameMode")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameMode); - return writer; - }; - - /** - * Encodes the specified HallGameType message, length delimited. Does not implicitly {@link gamehall.HallGameType.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.HallGameType - * @static - * @param {gamehall.IHallGameType} message HallGameType message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HallGameType.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a HallGameType message from the specified reader or buffer. - * @function decode - * @memberof gamehall.HallGameType - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.HallGameType} HallGameType - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallGameType.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.HallGameType(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.GameMode = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a HallGameType message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.HallGameType - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.HallGameType} HallGameType - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HallGameType.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a HallGameType message. - * @function verify - * @memberof gamehall.HallGameType - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - HallGameType.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - if (!$util.isInteger(message.GameMode)) - return "GameMode: integer expected"; - return null; - }; - - /** - * Creates a HallGameType message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.HallGameType - * @static - * @param {Object.} object Plain object - * @returns {gamehall.HallGameType} HallGameType - */ - HallGameType.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.HallGameType) - return object; - var message = new $root.gamehall.HallGameType(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.GameMode != null) - message.GameMode = object.GameMode | 0; - return message; - }; - - /** - * Creates a plain object from a HallGameType message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.HallGameType - * @static - * @param {gamehall.HallGameType} message HallGameType - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - HallGameType.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.GameMode = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.GameMode != null && message.hasOwnProperty("GameMode")) - object.GameMode = message.GameMode; - return object; - }; - - /** - * Converts this HallGameType to JSON. - * @function toJSON - * @memberof gamehall.HallGameType - * @instance - * @returns {Object.} JSON object - */ - HallGameType.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for HallGameType - * @function getTypeUrl - * @memberof gamehall.HallGameType - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - HallGameType.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.HallGameType"; - }; - - return HallGameType; - })(); - - /** - * HallOperaCode enum. - * @name gamehall.HallOperaCode - * @enum {number} - * @property {number} HallOperaZero=0 HallOperaZero value - * @property {number} HallChessGame=1 HallChessGame value - * @property {number} HallElectronicGame=2 HallElectronicGame value - * @property {number} HallFishingGame=3 HallFishingGame value - * @property {number} HallLiveVideo=4 HallLiveVideo value - * @property {number} HallLotteryGame=5 HallLotteryGame value - * @property {number} HallSportsGame=6 HallSportsGame value - * @property {number} HallPrivateRoom=7 HallPrivateRoom value - * @property {number} HallClubRoom=8 HallClubRoom value - * @property {number} HallThirdPlt=101 HallThirdPlt value - */ - gamehall.HallOperaCode = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "HallOperaZero"] = 0; - values[valuesById[1] = "HallChessGame"] = 1; - values[valuesById[2] = "HallElectronicGame"] = 2; - values[valuesById[3] = "HallFishingGame"] = 3; - values[valuesById[4] = "HallLiveVideo"] = 4; - values[valuesById[5] = "HallLotteryGame"] = 5; - values[valuesById[6] = "HallSportsGame"] = 6; - values[valuesById[7] = "HallPrivateRoom"] = 7; - values[valuesById[8] = "HallClubRoom"] = 8; - values[valuesById[101] = "HallThirdPlt"] = 101; - return values; - })(); - - gamehall.CSNewPlayerInfo = (function() { - - /** - * Properties of a CSNewPlayerInfo. - * @memberof gamehall - * @interface ICSNewPlayerInfo - */ - - /** - * Constructs a new CSNewPlayerInfo. - * @memberof gamehall - * @classdesc Represents a CSNewPlayerInfo. - * @implements ICSNewPlayerInfo - * @constructor - * @param {gamehall.ICSNewPlayerInfo=} [properties] Properties to set - */ - function CSNewPlayerInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSNewPlayerInfo instance using the specified properties. - * @function create - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {gamehall.ICSNewPlayerInfo=} [properties] Properties to set - * @returns {gamehall.CSNewPlayerInfo} CSNewPlayerInfo instance - */ - CSNewPlayerInfo.create = function create(properties) { - return new CSNewPlayerInfo(properties); - }; - - /** - * Encodes the specified CSNewPlayerInfo message. Does not implicitly {@link gamehall.CSNewPlayerInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {gamehall.ICSNewPlayerInfo} message CSNewPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSNewPlayerInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSNewPlayerInfo message, length delimited. Does not implicitly {@link gamehall.CSNewPlayerInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {gamehall.ICSNewPlayerInfo} message CSNewPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSNewPlayerInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSNewPlayerInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSNewPlayerInfo} CSNewPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSNewPlayerInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSNewPlayerInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSNewPlayerInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSNewPlayerInfo} CSNewPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSNewPlayerInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSNewPlayerInfo message. - * @function verify - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSNewPlayerInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSNewPlayerInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSNewPlayerInfo} CSNewPlayerInfo - */ - CSNewPlayerInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSNewPlayerInfo) - return object; - return new $root.gamehall.CSNewPlayerInfo(); - }; - - /** - * Creates a plain object from a CSNewPlayerInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {gamehall.CSNewPlayerInfo} message CSNewPlayerInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSNewPlayerInfo.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSNewPlayerInfo to JSON. - * @function toJSON - * @memberof gamehall.CSNewPlayerInfo - * @instance - * @returns {Object.} JSON object - */ - CSNewPlayerInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSNewPlayerInfo - * @function getTypeUrl - * @memberof gamehall.CSNewPlayerInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSNewPlayerInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSNewPlayerInfo"; - }; - - return CSNewPlayerInfo; - })(); - - gamehall.SCNewPlayerInfo = (function() { - - /** - * Properties of a SCNewPlayerInfo. - * @memberof gamehall - * @interface ISCNewPlayerInfo - * @property {number|null} [GameTotalNum] SCNewPlayerInfo GameTotalNum - * @property {string|null} [GameMostPartake] SCNewPlayerInfo GameMostPartake - * @property {string|null} [GameMostProfit] SCNewPlayerInfo GameMostProfit - * @property {number|null} [GameMostProfitNum] SCNewPlayerInfo GameMostProfitNum - * @property {number|null} [CreateRoomNum] SCNewPlayerInfo CreateRoomNum - * @property {string|null} [CreateRoomMost] SCNewPlayerInfo CreateRoomMost - * @property {number|null} [CreateClubNum] SCNewPlayerInfo CreateClubNum - * @property {string|null} [CreateClubRoomMost] SCNewPlayerInfo CreateClubRoomMost - * @property {number|null} [TeamNum] SCNewPlayerInfo TeamNum - * @property {number|null} [AchievementTotal] SCNewPlayerInfo AchievementTotal - * @property {number|null} [RewardTotal] SCNewPlayerInfo RewardTotal - * @property {number|Long|null} [TotalCoin] SCNewPlayerInfo TotalCoin - * @property {number|Long|null} [LastGetCoinTime] SCNewPlayerInfo LastGetCoinTime - * @property {number|Long|null} [Coin] SCNewPlayerInfo Coin - * @property {number|null} [CodeType] SCNewPlayerInfo CodeType - * @property {Array.|null} [ClassType] SCNewPlayerInfo ClassType - */ - - /** - * Constructs a new SCNewPlayerInfo. - * @memberof gamehall - * @classdesc Represents a SCNewPlayerInfo. - * @implements ISCNewPlayerInfo - * @constructor - * @param {gamehall.ISCNewPlayerInfo=} [properties] Properties to set - */ - function SCNewPlayerInfo(properties) { - this.ClassType = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCNewPlayerInfo GameTotalNum. - * @member {number} GameTotalNum - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.GameTotalNum = 0; - - /** - * SCNewPlayerInfo GameMostPartake. - * @member {string} GameMostPartake - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.GameMostPartake = ""; - - /** - * SCNewPlayerInfo GameMostProfit. - * @member {string} GameMostProfit - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.GameMostProfit = ""; - - /** - * SCNewPlayerInfo GameMostProfitNum. - * @member {number} GameMostProfitNum - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.GameMostProfitNum = 0; - - /** - * SCNewPlayerInfo CreateRoomNum. - * @member {number} CreateRoomNum - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.CreateRoomNum = 0; - - /** - * SCNewPlayerInfo CreateRoomMost. - * @member {string} CreateRoomMost - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.CreateRoomMost = ""; - - /** - * SCNewPlayerInfo CreateClubNum. - * @member {number} CreateClubNum - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.CreateClubNum = 0; - - /** - * SCNewPlayerInfo CreateClubRoomMost. - * @member {string} CreateClubRoomMost - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.CreateClubRoomMost = ""; - - /** - * SCNewPlayerInfo TeamNum. - * @member {number} TeamNum - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.TeamNum = 0; - - /** - * SCNewPlayerInfo AchievementTotal. - * @member {number} AchievementTotal - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.AchievementTotal = 0; - - /** - * SCNewPlayerInfo RewardTotal. - * @member {number} RewardTotal - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.RewardTotal = 0; - - /** - * SCNewPlayerInfo TotalCoin. - * @member {number|Long} TotalCoin - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.TotalCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCNewPlayerInfo LastGetCoinTime. - * @member {number|Long} LastGetCoinTime - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.LastGetCoinTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCNewPlayerInfo Coin. - * @member {number|Long} Coin - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCNewPlayerInfo CodeType. - * @member {number} CodeType - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.CodeType = 0; - - /** - * SCNewPlayerInfo ClassType. - * @member {Array.} ClassType - * @memberof gamehall.SCNewPlayerInfo - * @instance - */ - SCNewPlayerInfo.prototype.ClassType = $util.emptyArray; - - /** - * Creates a new SCNewPlayerInfo instance using the specified properties. - * @function create - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {gamehall.ISCNewPlayerInfo=} [properties] Properties to set - * @returns {gamehall.SCNewPlayerInfo} SCNewPlayerInfo instance - */ - SCNewPlayerInfo.create = function create(properties) { - return new SCNewPlayerInfo(properties); - }; - - /** - * Encodes the specified SCNewPlayerInfo message. Does not implicitly {@link gamehall.SCNewPlayerInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {gamehall.ISCNewPlayerInfo} message SCNewPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCNewPlayerInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameTotalNum != null && Object.hasOwnProperty.call(message, "GameTotalNum")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameTotalNum); - if (message.GameMostPartake != null && Object.hasOwnProperty.call(message, "GameMostPartake")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.GameMostPartake); - if (message.GameMostProfit != null && Object.hasOwnProperty.call(message, "GameMostProfit")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.GameMostProfit); - if (message.GameMostProfitNum != null && Object.hasOwnProperty.call(message, "GameMostProfitNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.GameMostProfitNum); - if (message.CreateRoomNum != null && Object.hasOwnProperty.call(message, "CreateRoomNum")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.CreateRoomNum); - if (message.CreateRoomMost != null && Object.hasOwnProperty.call(message, "CreateRoomMost")) - writer.uint32(/* id 6, wireType 2 =*/50).string(message.CreateRoomMost); - if (message.CreateClubNum != null && Object.hasOwnProperty.call(message, "CreateClubNum")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.CreateClubNum); - if (message.CreateClubRoomMost != null && Object.hasOwnProperty.call(message, "CreateClubRoomMost")) - writer.uint32(/* id 8, wireType 2 =*/66).string(message.CreateClubRoomMost); - if (message.TeamNum != null && Object.hasOwnProperty.call(message, "TeamNum")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.TeamNum); - if (message.AchievementTotal != null && Object.hasOwnProperty.call(message, "AchievementTotal")) - writer.uint32(/* id 10, wireType 0 =*/80).int32(message.AchievementTotal); - if (message.RewardTotal != null && Object.hasOwnProperty.call(message, "RewardTotal")) - writer.uint32(/* id 11, wireType 0 =*/88).int32(message.RewardTotal); - if (message.TotalCoin != null && Object.hasOwnProperty.call(message, "TotalCoin")) - writer.uint32(/* id 12, wireType 0 =*/96).int64(message.TotalCoin); - if (message.LastGetCoinTime != null && Object.hasOwnProperty.call(message, "LastGetCoinTime")) - writer.uint32(/* id 13, wireType 0 =*/104).int64(message.LastGetCoinTime); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 14, wireType 0 =*/112).int64(message.Coin); - if (message.CodeType != null && Object.hasOwnProperty.call(message, "CodeType")) - writer.uint32(/* id 15, wireType 0 =*/120).int32(message.CodeType); - if (message.ClassType != null && message.ClassType.length) { - writer.uint32(/* id 16, wireType 2 =*/130).fork(); - for (var i = 0; i < message.ClassType.length; ++i) - writer.int32(message.ClassType[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCNewPlayerInfo message, length delimited. Does not implicitly {@link gamehall.SCNewPlayerInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {gamehall.ISCNewPlayerInfo} message SCNewPlayerInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCNewPlayerInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCNewPlayerInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCNewPlayerInfo} SCNewPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCNewPlayerInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCNewPlayerInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameTotalNum = reader.int32(); - break; - } - case 2: { - message.GameMostPartake = reader.string(); - break; - } - case 3: { - message.GameMostProfit = reader.string(); - break; - } - case 4: { - message.GameMostProfitNum = reader.int32(); - break; - } - case 5: { - message.CreateRoomNum = reader.int32(); - break; - } - case 6: { - message.CreateRoomMost = reader.string(); - break; - } - case 7: { - message.CreateClubNum = reader.int32(); - break; - } - case 8: { - message.CreateClubRoomMost = reader.string(); - break; - } - case 9: { - message.TeamNum = reader.int32(); - break; - } - case 10: { - message.AchievementTotal = reader.int32(); - break; - } - case 11: { - message.RewardTotal = reader.int32(); - break; - } - case 12: { - message.TotalCoin = reader.int64(); - break; - } - case 13: { - message.LastGetCoinTime = reader.int64(); - break; - } - case 14: { - message.Coin = reader.int64(); - break; - } - case 15: { - message.CodeType = reader.int32(); - break; - } - case 16: { - if (!(message.ClassType && message.ClassType.length)) - message.ClassType = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.ClassType.push(reader.int32()); - } else - message.ClassType.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCNewPlayerInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCNewPlayerInfo} SCNewPlayerInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCNewPlayerInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCNewPlayerInfo message. - * @function verify - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCNewPlayerInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameTotalNum != null && message.hasOwnProperty("GameTotalNum")) - if (!$util.isInteger(message.GameTotalNum)) - return "GameTotalNum: integer expected"; - if (message.GameMostPartake != null && message.hasOwnProperty("GameMostPartake")) - if (!$util.isString(message.GameMostPartake)) - return "GameMostPartake: string expected"; - if (message.GameMostProfit != null && message.hasOwnProperty("GameMostProfit")) - if (!$util.isString(message.GameMostProfit)) - return "GameMostProfit: string expected"; - if (message.GameMostProfitNum != null && message.hasOwnProperty("GameMostProfitNum")) - if (!$util.isInteger(message.GameMostProfitNum)) - return "GameMostProfitNum: integer expected"; - if (message.CreateRoomNum != null && message.hasOwnProperty("CreateRoomNum")) - if (!$util.isInteger(message.CreateRoomNum)) - return "CreateRoomNum: integer expected"; - if (message.CreateRoomMost != null && message.hasOwnProperty("CreateRoomMost")) - if (!$util.isString(message.CreateRoomMost)) - return "CreateRoomMost: string expected"; - if (message.CreateClubNum != null && message.hasOwnProperty("CreateClubNum")) - if (!$util.isInteger(message.CreateClubNum)) - return "CreateClubNum: integer expected"; - if (message.CreateClubRoomMost != null && message.hasOwnProperty("CreateClubRoomMost")) - if (!$util.isString(message.CreateClubRoomMost)) - return "CreateClubRoomMost: string expected"; - if (message.TeamNum != null && message.hasOwnProperty("TeamNum")) - if (!$util.isInteger(message.TeamNum)) - return "TeamNum: integer expected"; - if (message.AchievementTotal != null && message.hasOwnProperty("AchievementTotal")) - if (!$util.isInteger(message.AchievementTotal)) - return "AchievementTotal: integer expected"; - if (message.RewardTotal != null && message.hasOwnProperty("RewardTotal")) - if (!$util.isInteger(message.RewardTotal)) - return "RewardTotal: integer expected"; - if (message.TotalCoin != null && message.hasOwnProperty("TotalCoin")) - if (!$util.isInteger(message.TotalCoin) && !(message.TotalCoin && $util.isInteger(message.TotalCoin.low) && $util.isInteger(message.TotalCoin.high))) - return "TotalCoin: integer|Long expected"; - if (message.LastGetCoinTime != null && message.hasOwnProperty("LastGetCoinTime")) - if (!$util.isInteger(message.LastGetCoinTime) && !(message.LastGetCoinTime && $util.isInteger(message.LastGetCoinTime.low) && $util.isInteger(message.LastGetCoinTime.high))) - return "LastGetCoinTime: integer|Long expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - if (message.CodeType != null && message.hasOwnProperty("CodeType")) - if (!$util.isInteger(message.CodeType)) - return "CodeType: integer expected"; - if (message.ClassType != null && message.hasOwnProperty("ClassType")) { - if (!Array.isArray(message.ClassType)) - return "ClassType: array expected"; - for (var i = 0; i < message.ClassType.length; ++i) - if (!$util.isInteger(message.ClassType[i])) - return "ClassType: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCNewPlayerInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCNewPlayerInfo} SCNewPlayerInfo - */ - SCNewPlayerInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCNewPlayerInfo) - return object; - var message = new $root.gamehall.SCNewPlayerInfo(); - if (object.GameTotalNum != null) - message.GameTotalNum = object.GameTotalNum | 0; - if (object.GameMostPartake != null) - message.GameMostPartake = String(object.GameMostPartake); - if (object.GameMostProfit != null) - message.GameMostProfit = String(object.GameMostProfit); - if (object.GameMostProfitNum != null) - message.GameMostProfitNum = object.GameMostProfitNum | 0; - if (object.CreateRoomNum != null) - message.CreateRoomNum = object.CreateRoomNum | 0; - if (object.CreateRoomMost != null) - message.CreateRoomMost = String(object.CreateRoomMost); - if (object.CreateClubNum != null) - message.CreateClubNum = object.CreateClubNum | 0; - if (object.CreateClubRoomMost != null) - message.CreateClubRoomMost = String(object.CreateClubRoomMost); - if (object.TeamNum != null) - message.TeamNum = object.TeamNum | 0; - if (object.AchievementTotal != null) - message.AchievementTotal = object.AchievementTotal | 0; - if (object.RewardTotal != null) - message.RewardTotal = object.RewardTotal | 0; - if (object.TotalCoin != null) - if ($util.Long) - (message.TotalCoin = $util.Long.fromValue(object.TotalCoin)).unsigned = false; - else if (typeof object.TotalCoin === "string") - message.TotalCoin = parseInt(object.TotalCoin, 10); - else if (typeof object.TotalCoin === "number") - message.TotalCoin = object.TotalCoin; - else if (typeof object.TotalCoin === "object") - message.TotalCoin = new $util.LongBits(object.TotalCoin.low >>> 0, object.TotalCoin.high >>> 0).toNumber(); - if (object.LastGetCoinTime != null) - if ($util.Long) - (message.LastGetCoinTime = $util.Long.fromValue(object.LastGetCoinTime)).unsigned = false; - else if (typeof object.LastGetCoinTime === "string") - message.LastGetCoinTime = parseInt(object.LastGetCoinTime, 10); - else if (typeof object.LastGetCoinTime === "number") - message.LastGetCoinTime = object.LastGetCoinTime; - else if (typeof object.LastGetCoinTime === "object") - message.LastGetCoinTime = new $util.LongBits(object.LastGetCoinTime.low >>> 0, object.LastGetCoinTime.high >>> 0).toNumber(); - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - if (object.CodeType != null) - message.CodeType = object.CodeType | 0; - if (object.ClassType) { - if (!Array.isArray(object.ClassType)) - throw TypeError(".gamehall.SCNewPlayerInfo.ClassType: array expected"); - message.ClassType = []; - for (var i = 0; i < object.ClassType.length; ++i) - message.ClassType[i] = object.ClassType[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCNewPlayerInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {gamehall.SCNewPlayerInfo} message SCNewPlayerInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCNewPlayerInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.ClassType = []; - if (options.defaults) { - object.GameTotalNum = 0; - object.GameMostPartake = ""; - object.GameMostProfit = ""; - object.GameMostProfitNum = 0; - object.CreateRoomNum = 0; - object.CreateRoomMost = ""; - object.CreateClubNum = 0; - object.CreateClubRoomMost = ""; - object.TeamNum = 0; - object.AchievementTotal = 0; - object.RewardTotal = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.LastGetCoinTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.LastGetCoinTime = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - object.CodeType = 0; - } - if (message.GameTotalNum != null && message.hasOwnProperty("GameTotalNum")) - object.GameTotalNum = message.GameTotalNum; - if (message.GameMostPartake != null && message.hasOwnProperty("GameMostPartake")) - object.GameMostPartake = message.GameMostPartake; - if (message.GameMostProfit != null && message.hasOwnProperty("GameMostProfit")) - object.GameMostProfit = message.GameMostProfit; - if (message.GameMostProfitNum != null && message.hasOwnProperty("GameMostProfitNum")) - object.GameMostProfitNum = message.GameMostProfitNum; - if (message.CreateRoomNum != null && message.hasOwnProperty("CreateRoomNum")) - object.CreateRoomNum = message.CreateRoomNum; - if (message.CreateRoomMost != null && message.hasOwnProperty("CreateRoomMost")) - object.CreateRoomMost = message.CreateRoomMost; - if (message.CreateClubNum != null && message.hasOwnProperty("CreateClubNum")) - object.CreateClubNum = message.CreateClubNum; - if (message.CreateClubRoomMost != null && message.hasOwnProperty("CreateClubRoomMost")) - object.CreateClubRoomMost = message.CreateClubRoomMost; - if (message.TeamNum != null && message.hasOwnProperty("TeamNum")) - object.TeamNum = message.TeamNum; - if (message.AchievementTotal != null && message.hasOwnProperty("AchievementTotal")) - object.AchievementTotal = message.AchievementTotal; - if (message.RewardTotal != null && message.hasOwnProperty("RewardTotal")) - object.RewardTotal = message.RewardTotal; - if (message.TotalCoin != null && message.hasOwnProperty("TotalCoin")) - if (typeof message.TotalCoin === "number") - object.TotalCoin = options.longs === String ? String(message.TotalCoin) : message.TotalCoin; - else - object.TotalCoin = options.longs === String ? $util.Long.prototype.toString.call(message.TotalCoin) : options.longs === Number ? new $util.LongBits(message.TotalCoin.low >>> 0, message.TotalCoin.high >>> 0).toNumber() : message.TotalCoin; - if (message.LastGetCoinTime != null && message.hasOwnProperty("LastGetCoinTime")) - if (typeof message.LastGetCoinTime === "number") - object.LastGetCoinTime = options.longs === String ? String(message.LastGetCoinTime) : message.LastGetCoinTime; - else - object.LastGetCoinTime = options.longs === String ? $util.Long.prototype.toString.call(message.LastGetCoinTime) : options.longs === Number ? new $util.LongBits(message.LastGetCoinTime.low >>> 0, message.LastGetCoinTime.high >>> 0).toNumber() : message.LastGetCoinTime; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - if (message.CodeType != null && message.hasOwnProperty("CodeType")) - object.CodeType = message.CodeType; - if (message.ClassType && message.ClassType.length) { - object.ClassType = []; - for (var j = 0; j < message.ClassType.length; ++j) - object.ClassType[j] = message.ClassType[j]; - } - return object; - }; - - /** - * Converts this SCNewPlayerInfo to JSON. - * @function toJSON - * @memberof gamehall.SCNewPlayerInfo - * @instance - * @returns {Object.} JSON object - */ - SCNewPlayerInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCNewPlayerInfo - * @function getTypeUrl - * @memberof gamehall.SCNewPlayerInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCNewPlayerInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCNewPlayerInfo"; - }; - - return SCNewPlayerInfo; - })(); - - gamehall.SCRebateTotalInfo = (function() { - - /** - * Properties of a SCRebateTotalInfo. - * @memberof gamehall - * @interface ISCRebateTotalInfo - * @property {number|Long|null} [TotalCoin] SCRebateTotalInfo TotalCoin - * @property {number|Long|null} [LastGetCoinTime] SCRebateTotalInfo LastGetCoinTime - * @property {number|Long|null} [Coin] SCRebateTotalInfo Coin - * @property {number|null} [CodeType] SCRebateTotalInfo CodeType - */ - - /** - * Constructs a new SCRebateTotalInfo. - * @memberof gamehall - * @classdesc Represents a SCRebateTotalInfo. - * @implements ISCRebateTotalInfo - * @constructor - * @param {gamehall.ISCRebateTotalInfo=} [properties] Properties to set - */ - function SCRebateTotalInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCRebateTotalInfo TotalCoin. - * @member {number|Long} TotalCoin - * @memberof gamehall.SCRebateTotalInfo - * @instance - */ - SCRebateTotalInfo.prototype.TotalCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCRebateTotalInfo LastGetCoinTime. - * @member {number|Long} LastGetCoinTime - * @memberof gamehall.SCRebateTotalInfo - * @instance - */ - SCRebateTotalInfo.prototype.LastGetCoinTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCRebateTotalInfo Coin. - * @member {number|Long} Coin - * @memberof gamehall.SCRebateTotalInfo - * @instance - */ - SCRebateTotalInfo.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCRebateTotalInfo CodeType. - * @member {number} CodeType - * @memberof gamehall.SCRebateTotalInfo - * @instance - */ - SCRebateTotalInfo.prototype.CodeType = 0; - - /** - * Creates a new SCRebateTotalInfo instance using the specified properties. - * @function create - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {gamehall.ISCRebateTotalInfo=} [properties] Properties to set - * @returns {gamehall.SCRebateTotalInfo} SCRebateTotalInfo instance - */ - SCRebateTotalInfo.create = function create(properties) { - return new SCRebateTotalInfo(properties); - }; - - /** - * Encodes the specified SCRebateTotalInfo message. Does not implicitly {@link gamehall.SCRebateTotalInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {gamehall.ISCRebateTotalInfo} message SCRebateTotalInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRebateTotalInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.TotalCoin != null && Object.hasOwnProperty.call(message, "TotalCoin")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.TotalCoin); - if (message.LastGetCoinTime != null && Object.hasOwnProperty.call(message, "LastGetCoinTime")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.LastGetCoinTime); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Coin); - if (message.CodeType != null && Object.hasOwnProperty.call(message, "CodeType")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.CodeType); - return writer; - }; - - /** - * Encodes the specified SCRebateTotalInfo message, length delimited. Does not implicitly {@link gamehall.SCRebateTotalInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {gamehall.ISCRebateTotalInfo} message SCRebateTotalInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCRebateTotalInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCRebateTotalInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCRebateTotalInfo} SCRebateTotalInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRebateTotalInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCRebateTotalInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.TotalCoin = reader.int64(); - break; - } - case 2: { - message.LastGetCoinTime = reader.int64(); - break; - } - case 3: { - message.Coin = reader.int64(); - break; - } - case 4: { - message.CodeType = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCRebateTotalInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCRebateTotalInfo} SCRebateTotalInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCRebateTotalInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCRebateTotalInfo message. - * @function verify - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCRebateTotalInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.TotalCoin != null && message.hasOwnProperty("TotalCoin")) - if (!$util.isInteger(message.TotalCoin) && !(message.TotalCoin && $util.isInteger(message.TotalCoin.low) && $util.isInteger(message.TotalCoin.high))) - return "TotalCoin: integer|Long expected"; - if (message.LastGetCoinTime != null && message.hasOwnProperty("LastGetCoinTime")) - if (!$util.isInteger(message.LastGetCoinTime) && !(message.LastGetCoinTime && $util.isInteger(message.LastGetCoinTime.low) && $util.isInteger(message.LastGetCoinTime.high))) - return "LastGetCoinTime: integer|Long expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - if (message.CodeType != null && message.hasOwnProperty("CodeType")) - if (!$util.isInteger(message.CodeType)) - return "CodeType: integer expected"; - return null; - }; - - /** - * Creates a SCRebateTotalInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCRebateTotalInfo} SCRebateTotalInfo - */ - SCRebateTotalInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCRebateTotalInfo) - return object; - var message = new $root.gamehall.SCRebateTotalInfo(); - if (object.TotalCoin != null) - if ($util.Long) - (message.TotalCoin = $util.Long.fromValue(object.TotalCoin)).unsigned = false; - else if (typeof object.TotalCoin === "string") - message.TotalCoin = parseInt(object.TotalCoin, 10); - else if (typeof object.TotalCoin === "number") - message.TotalCoin = object.TotalCoin; - else if (typeof object.TotalCoin === "object") - message.TotalCoin = new $util.LongBits(object.TotalCoin.low >>> 0, object.TotalCoin.high >>> 0).toNumber(); - if (object.LastGetCoinTime != null) - if ($util.Long) - (message.LastGetCoinTime = $util.Long.fromValue(object.LastGetCoinTime)).unsigned = false; - else if (typeof object.LastGetCoinTime === "string") - message.LastGetCoinTime = parseInt(object.LastGetCoinTime, 10); - else if (typeof object.LastGetCoinTime === "number") - message.LastGetCoinTime = object.LastGetCoinTime; - else if (typeof object.LastGetCoinTime === "object") - message.LastGetCoinTime = new $util.LongBits(object.LastGetCoinTime.low >>> 0, object.LastGetCoinTime.high >>> 0).toNumber(); - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - if (object.CodeType != null) - message.CodeType = object.CodeType | 0; - return message; - }; - - /** - * Creates a plain object from a SCRebateTotalInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {gamehall.SCRebateTotalInfo} message SCRebateTotalInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCRebateTotalInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.LastGetCoinTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.LastGetCoinTime = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - object.CodeType = 0; - } - if (message.TotalCoin != null && message.hasOwnProperty("TotalCoin")) - if (typeof message.TotalCoin === "number") - object.TotalCoin = options.longs === String ? String(message.TotalCoin) : message.TotalCoin; - else - object.TotalCoin = options.longs === String ? $util.Long.prototype.toString.call(message.TotalCoin) : options.longs === Number ? new $util.LongBits(message.TotalCoin.low >>> 0, message.TotalCoin.high >>> 0).toNumber() : message.TotalCoin; - if (message.LastGetCoinTime != null && message.hasOwnProperty("LastGetCoinTime")) - if (typeof message.LastGetCoinTime === "number") - object.LastGetCoinTime = options.longs === String ? String(message.LastGetCoinTime) : message.LastGetCoinTime; - else - object.LastGetCoinTime = options.longs === String ? $util.Long.prototype.toString.call(message.LastGetCoinTime) : options.longs === Number ? new $util.LongBits(message.LastGetCoinTime.low >>> 0, message.LastGetCoinTime.high >>> 0).toNumber() : message.LastGetCoinTime; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - if (message.CodeType != null && message.hasOwnProperty("CodeType")) - object.CodeType = message.CodeType; - return object; - }; - - /** - * Converts this SCRebateTotalInfo to JSON. - * @function toJSON - * @memberof gamehall.SCRebateTotalInfo - * @instance - * @returns {Object.} JSON object - */ - SCRebateTotalInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCRebateTotalInfo - * @function getTypeUrl - * @memberof gamehall.SCRebateTotalInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCRebateTotalInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCRebateTotalInfo"; - }; - - return SCRebateTotalInfo; - })(); - - gamehall.CSCodeTypeRecord = (function() { - - /** - * Properties of a CSCodeTypeRecord. - * @memberof gamehall - * @interface ICSCodeTypeRecord - * @property {gamehall.HallOperaCode|null} [ShowTypeId] CSCodeTypeRecord ShowTypeId - */ - - /** - * Constructs a new CSCodeTypeRecord. - * @memberof gamehall - * @classdesc Represents a CSCodeTypeRecord. - * @implements ICSCodeTypeRecord - * @constructor - * @param {gamehall.ICSCodeTypeRecord=} [properties] Properties to set - */ - function CSCodeTypeRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCodeTypeRecord ShowTypeId. - * @member {gamehall.HallOperaCode} ShowTypeId - * @memberof gamehall.CSCodeTypeRecord - * @instance - */ - CSCodeTypeRecord.prototype.ShowTypeId = 0; - - /** - * Creates a new CSCodeTypeRecord instance using the specified properties. - * @function create - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {gamehall.ICSCodeTypeRecord=} [properties] Properties to set - * @returns {gamehall.CSCodeTypeRecord} CSCodeTypeRecord instance - */ - CSCodeTypeRecord.create = function create(properties) { - return new CSCodeTypeRecord(properties); - }; - - /** - * Encodes the specified CSCodeTypeRecord message. Does not implicitly {@link gamehall.CSCodeTypeRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {gamehall.ICSCodeTypeRecord} message CSCodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCodeTypeRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowTypeId != null && Object.hasOwnProperty.call(message, "ShowTypeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowTypeId); - return writer; - }; - - /** - * Encodes the specified CSCodeTypeRecord message, length delimited. Does not implicitly {@link gamehall.CSCodeTypeRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {gamehall.ICSCodeTypeRecord} message CSCodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCodeTypeRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCodeTypeRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCodeTypeRecord} CSCodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCodeTypeRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCodeTypeRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowTypeId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCodeTypeRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCodeTypeRecord} CSCodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCodeTypeRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCodeTypeRecord message. - * @function verify - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCodeTypeRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - switch (message.ShowTypeId) { - default: - return "ShowTypeId: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 101: - break; - } - return null; - }; - - /** - * Creates a CSCodeTypeRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCodeTypeRecord} CSCodeTypeRecord - */ - CSCodeTypeRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCodeTypeRecord) - return object; - var message = new $root.gamehall.CSCodeTypeRecord(); - switch (object.ShowTypeId) { - default: - if (typeof object.ShowTypeId === "number") { - message.ShowTypeId = object.ShowTypeId; - break; - } - break; - case "HallOperaZero": - case 0: - message.ShowTypeId = 0; - break; - case "HallChessGame": - case 1: - message.ShowTypeId = 1; - break; - case "HallElectronicGame": - case 2: - message.ShowTypeId = 2; - break; - case "HallFishingGame": - case 3: - message.ShowTypeId = 3; - break; - case "HallLiveVideo": - case 4: - message.ShowTypeId = 4; - break; - case "HallLotteryGame": - case 5: - message.ShowTypeId = 5; - break; - case "HallSportsGame": - case 6: - message.ShowTypeId = 6; - break; - case "HallPrivateRoom": - case 7: - message.ShowTypeId = 7; - break; - case "HallClubRoom": - case 8: - message.ShowTypeId = 8; - break; - case "HallThirdPlt": - case 101: - message.ShowTypeId = 101; - break; - } - return message; - }; - - /** - * Creates a plain object from a CSCodeTypeRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {gamehall.CSCodeTypeRecord} message CSCodeTypeRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCodeTypeRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.ShowTypeId = options.enums === String ? "HallOperaZero" : 0; - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - object.ShowTypeId = options.enums === String ? $root.gamehall.HallOperaCode[message.ShowTypeId] === undefined ? message.ShowTypeId : $root.gamehall.HallOperaCode[message.ShowTypeId] : message.ShowTypeId; - return object; - }; - - /** - * Converts this CSCodeTypeRecord to JSON. - * @function toJSON - * @memberof gamehall.CSCodeTypeRecord - * @instance - * @returns {Object.} JSON object - */ - CSCodeTypeRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCodeTypeRecord - * @function getTypeUrl - * @memberof gamehall.CSCodeTypeRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCodeTypeRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCodeTypeRecord"; - }; - - return CSCodeTypeRecord; - })(); - - gamehall.CodeTypeRecord = (function() { - - /** - * Properties of a CodeTypeRecord. - * @memberof gamehall - * @interface ICodeTypeRecord - * @property {string|null} [GameName] CodeTypeRecord GameName - * @property {number|Long|null} [GameBetCoin] CodeTypeRecord GameBetCoin - * @property {number|null} [Rate] CodeTypeRecord Rate - * @property {number|null} [Coin] CodeTypeRecord Coin - * @property {number|null} [MinCoin] CodeTypeRecord MinCoin - * @property {number|null} [MaxCoin] CodeTypeRecord MaxCoin - */ - - /** - * Constructs a new CodeTypeRecord. - * @memberof gamehall - * @classdesc 洗码列表 - * @implements ICodeTypeRecord - * @constructor - * @param {gamehall.ICodeTypeRecord=} [properties] Properties to set - */ - function CodeTypeRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CodeTypeRecord GameName. - * @member {string} GameName - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.GameName = ""; - - /** - * CodeTypeRecord GameBetCoin. - * @member {number|Long} GameBetCoin - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.GameBetCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CodeTypeRecord Rate. - * @member {number} Rate - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.Rate = 0; - - /** - * CodeTypeRecord Coin. - * @member {number} Coin - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.Coin = 0; - - /** - * CodeTypeRecord MinCoin. - * @member {number} MinCoin - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.MinCoin = 0; - - /** - * CodeTypeRecord MaxCoin. - * @member {number} MaxCoin - * @memberof gamehall.CodeTypeRecord - * @instance - */ - CodeTypeRecord.prototype.MaxCoin = 0; - - /** - * Creates a new CodeTypeRecord instance using the specified properties. - * @function create - * @memberof gamehall.CodeTypeRecord - * @static - * @param {gamehall.ICodeTypeRecord=} [properties] Properties to set - * @returns {gamehall.CodeTypeRecord} CodeTypeRecord instance - */ - CodeTypeRecord.create = function create(properties) { - return new CodeTypeRecord(properties); - }; - - /** - * Encodes the specified CodeTypeRecord message. Does not implicitly {@link gamehall.CodeTypeRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.CodeTypeRecord - * @static - * @param {gamehall.ICodeTypeRecord} message CodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CodeTypeRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameName != null && Object.hasOwnProperty.call(message, "GameName")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.GameName); - if (message.GameBetCoin != null && Object.hasOwnProperty.call(message, "GameBetCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.GameBetCoin); - if (message.Rate != null && Object.hasOwnProperty.call(message, "Rate")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Rate); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.Coin); - if (message.MinCoin != null && Object.hasOwnProperty.call(message, "MinCoin")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.MinCoin); - if (message.MaxCoin != null && Object.hasOwnProperty.call(message, "MaxCoin")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.MaxCoin); - return writer; - }; - - /** - * Encodes the specified CodeTypeRecord message, length delimited. Does not implicitly {@link gamehall.CodeTypeRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CodeTypeRecord - * @static - * @param {gamehall.ICodeTypeRecord} message CodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CodeTypeRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CodeTypeRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CodeTypeRecord} CodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CodeTypeRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CodeTypeRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameName = reader.string(); - break; - } - case 2: { - message.GameBetCoin = reader.int64(); - break; - } - case 3: { - message.Rate = reader.int32(); - break; - } - case 4: { - message.Coin = reader.int32(); - break; - } - case 5: { - message.MinCoin = reader.int32(); - break; - } - case 6: { - message.MaxCoin = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CodeTypeRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CodeTypeRecord} CodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CodeTypeRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CodeTypeRecord message. - * @function verify - * @memberof gamehall.CodeTypeRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CodeTypeRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameName != null && message.hasOwnProperty("GameName")) - if (!$util.isString(message.GameName)) - return "GameName: string expected"; - if (message.GameBetCoin != null && message.hasOwnProperty("GameBetCoin")) - if (!$util.isInteger(message.GameBetCoin) && !(message.GameBetCoin && $util.isInteger(message.GameBetCoin.low) && $util.isInteger(message.GameBetCoin.high))) - return "GameBetCoin: integer|Long expected"; - if (message.Rate != null && message.hasOwnProperty("Rate")) - if (!$util.isInteger(message.Rate)) - return "Rate: integer expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin)) - return "Coin: integer expected"; - if (message.MinCoin != null && message.hasOwnProperty("MinCoin")) - if (!$util.isInteger(message.MinCoin)) - return "MinCoin: integer expected"; - if (message.MaxCoin != null && message.hasOwnProperty("MaxCoin")) - if (!$util.isInteger(message.MaxCoin)) - return "MaxCoin: integer expected"; - return null; - }; - - /** - * Creates a CodeTypeRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CodeTypeRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CodeTypeRecord} CodeTypeRecord - */ - CodeTypeRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CodeTypeRecord) - return object; - var message = new $root.gamehall.CodeTypeRecord(); - if (object.GameName != null) - message.GameName = String(object.GameName); - if (object.GameBetCoin != null) - if ($util.Long) - (message.GameBetCoin = $util.Long.fromValue(object.GameBetCoin)).unsigned = false; - else if (typeof object.GameBetCoin === "string") - message.GameBetCoin = parseInt(object.GameBetCoin, 10); - else if (typeof object.GameBetCoin === "number") - message.GameBetCoin = object.GameBetCoin; - else if (typeof object.GameBetCoin === "object") - message.GameBetCoin = new $util.LongBits(object.GameBetCoin.low >>> 0, object.GameBetCoin.high >>> 0).toNumber(); - if (object.Rate != null) - message.Rate = object.Rate | 0; - if (object.Coin != null) - message.Coin = object.Coin | 0; - if (object.MinCoin != null) - message.MinCoin = object.MinCoin | 0; - if (object.MaxCoin != null) - message.MaxCoin = object.MaxCoin | 0; - return message; - }; - - /** - * Creates a plain object from a CodeTypeRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CodeTypeRecord - * @static - * @param {gamehall.CodeTypeRecord} message CodeTypeRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CodeTypeRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameName = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.GameBetCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.GameBetCoin = options.longs === String ? "0" : 0; - object.Rate = 0; - object.Coin = 0; - object.MinCoin = 0; - object.MaxCoin = 0; - } - if (message.GameName != null && message.hasOwnProperty("GameName")) - object.GameName = message.GameName; - if (message.GameBetCoin != null && message.hasOwnProperty("GameBetCoin")) - if (typeof message.GameBetCoin === "number") - object.GameBetCoin = options.longs === String ? String(message.GameBetCoin) : message.GameBetCoin; - else - object.GameBetCoin = options.longs === String ? $util.Long.prototype.toString.call(message.GameBetCoin) : options.longs === Number ? new $util.LongBits(message.GameBetCoin.low >>> 0, message.GameBetCoin.high >>> 0).toNumber() : message.GameBetCoin; - if (message.Rate != null && message.hasOwnProperty("Rate")) - object.Rate = message.Rate; - if (message.Coin != null && message.hasOwnProperty("Coin")) - object.Coin = message.Coin; - if (message.MinCoin != null && message.hasOwnProperty("MinCoin")) - object.MinCoin = message.MinCoin; - if (message.MaxCoin != null && message.hasOwnProperty("MaxCoin")) - object.MaxCoin = message.MaxCoin; - return object; - }; - - /** - * Converts this CodeTypeRecord to JSON. - * @function toJSON - * @memberof gamehall.CodeTypeRecord - * @instance - * @returns {Object.} JSON object - */ - CodeTypeRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CodeTypeRecord - * @function getTypeUrl - * @memberof gamehall.CodeTypeRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CodeTypeRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CodeTypeRecord"; - }; - - return CodeTypeRecord; - })(); - - gamehall.SCCodeTypeRecord = (function() { - - /** - * Properties of a SCCodeTypeRecord. - * @memberof gamehall - * @interface ISCCodeTypeRecord - * @property {gamehall.HallOperaCode|null} [ShowType] SCCodeTypeRecord ShowType - * @property {Array.|null} [CodeTypeRecord] SCCodeTypeRecord CodeTypeRecord - */ - - /** - * Constructs a new SCCodeTypeRecord. - * @memberof gamehall - * @classdesc Represents a SCCodeTypeRecord. - * @implements ISCCodeTypeRecord - * @constructor - * @param {gamehall.ISCCodeTypeRecord=} [properties] Properties to set - */ - function SCCodeTypeRecord(properties) { - this.CodeTypeRecord = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCodeTypeRecord ShowType. - * @member {gamehall.HallOperaCode} ShowType - * @memberof gamehall.SCCodeTypeRecord - * @instance - */ - SCCodeTypeRecord.prototype.ShowType = 0; - - /** - * SCCodeTypeRecord CodeTypeRecord. - * @member {Array.} CodeTypeRecord - * @memberof gamehall.SCCodeTypeRecord - * @instance - */ - SCCodeTypeRecord.prototype.CodeTypeRecord = $util.emptyArray; - - /** - * Creates a new SCCodeTypeRecord instance using the specified properties. - * @function create - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {gamehall.ISCCodeTypeRecord=} [properties] Properties to set - * @returns {gamehall.SCCodeTypeRecord} SCCodeTypeRecord instance - */ - SCCodeTypeRecord.create = function create(properties) { - return new SCCodeTypeRecord(properties); - }; - - /** - * Encodes the specified SCCodeTypeRecord message. Does not implicitly {@link gamehall.SCCodeTypeRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {gamehall.ISCCodeTypeRecord} message SCCodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCodeTypeRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowType != null && Object.hasOwnProperty.call(message, "ShowType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowType); - if (message.CodeTypeRecord != null && message.CodeTypeRecord.length) - for (var i = 0; i < message.CodeTypeRecord.length; ++i) - $root.gamehall.CodeTypeRecord.encode(message.CodeTypeRecord[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCCodeTypeRecord message, length delimited. Does not implicitly {@link gamehall.SCCodeTypeRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {gamehall.ISCCodeTypeRecord} message SCCodeTypeRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCodeTypeRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCodeTypeRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCodeTypeRecord} SCCodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCodeTypeRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCodeTypeRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowType = reader.int32(); - break; - } - case 2: { - if (!(message.CodeTypeRecord && message.CodeTypeRecord.length)) - message.CodeTypeRecord = []; - message.CodeTypeRecord.push($root.gamehall.CodeTypeRecord.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCodeTypeRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCodeTypeRecord} SCCodeTypeRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCodeTypeRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCodeTypeRecord message. - * @function verify - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCodeTypeRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - switch (message.ShowType) { - default: - return "ShowType: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 101: - break; - } - if (message.CodeTypeRecord != null && message.hasOwnProperty("CodeTypeRecord")) { - if (!Array.isArray(message.CodeTypeRecord)) - return "CodeTypeRecord: array expected"; - for (var i = 0; i < message.CodeTypeRecord.length; ++i) { - var error = $root.gamehall.CodeTypeRecord.verify(message.CodeTypeRecord[i]); - if (error) - return "CodeTypeRecord." + error; - } - } - return null; - }; - - /** - * Creates a SCCodeTypeRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCodeTypeRecord} SCCodeTypeRecord - */ - SCCodeTypeRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCodeTypeRecord) - return object; - var message = new $root.gamehall.SCCodeTypeRecord(); - switch (object.ShowType) { - default: - if (typeof object.ShowType === "number") { - message.ShowType = object.ShowType; - break; - } - break; - case "HallOperaZero": - case 0: - message.ShowType = 0; - break; - case "HallChessGame": - case 1: - message.ShowType = 1; - break; - case "HallElectronicGame": - case 2: - message.ShowType = 2; - break; - case "HallFishingGame": - case 3: - message.ShowType = 3; - break; - case "HallLiveVideo": - case 4: - message.ShowType = 4; - break; - case "HallLotteryGame": - case 5: - message.ShowType = 5; - break; - case "HallSportsGame": - case 6: - message.ShowType = 6; - break; - case "HallPrivateRoom": - case 7: - message.ShowType = 7; - break; - case "HallClubRoom": - case 8: - message.ShowType = 8; - break; - case "HallThirdPlt": - case 101: - message.ShowType = 101; - break; - } - if (object.CodeTypeRecord) { - if (!Array.isArray(object.CodeTypeRecord)) - throw TypeError(".gamehall.SCCodeTypeRecord.CodeTypeRecord: array expected"); - message.CodeTypeRecord = []; - for (var i = 0; i < object.CodeTypeRecord.length; ++i) { - if (typeof object.CodeTypeRecord[i] !== "object") - throw TypeError(".gamehall.SCCodeTypeRecord.CodeTypeRecord: object expected"); - message.CodeTypeRecord[i] = $root.gamehall.CodeTypeRecord.fromObject(object.CodeTypeRecord[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCCodeTypeRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {gamehall.SCCodeTypeRecord} message SCCodeTypeRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCodeTypeRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.CodeTypeRecord = []; - if (options.defaults) - object.ShowType = options.enums === String ? "HallOperaZero" : 0; - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - object.ShowType = options.enums === String ? $root.gamehall.HallOperaCode[message.ShowType] === undefined ? message.ShowType : $root.gamehall.HallOperaCode[message.ShowType] : message.ShowType; - if (message.CodeTypeRecord && message.CodeTypeRecord.length) { - object.CodeTypeRecord = []; - for (var j = 0; j < message.CodeTypeRecord.length; ++j) - object.CodeTypeRecord[j] = $root.gamehall.CodeTypeRecord.toObject(message.CodeTypeRecord[j], options); - } - return object; - }; - - /** - * Converts this SCCodeTypeRecord to JSON. - * @function toJSON - * @memberof gamehall.SCCodeTypeRecord - * @instance - * @returns {Object.} JSON object - */ - SCCodeTypeRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCodeTypeRecord - * @function getTypeUrl - * @memberof gamehall.SCCodeTypeRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCodeTypeRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCodeTypeRecord"; - }; - - return SCCodeTypeRecord; - })(); - - gamehall.CSBetCoinRecord = (function() { - - /** - * Properties of a CSBetCoinRecord. - * @memberof gamehall - * @interface ICSBetCoinRecord - * @property {gamehall.HallOperaCode|null} [ShowTypeId] CSBetCoinRecord ShowTypeId - * @property {number|Long|null} [TimeIndex] CSBetCoinRecord TimeIndex - * @property {number|null} [PageNo] CSBetCoinRecord PageNo - */ - - /** - * Constructs a new CSBetCoinRecord. - * @memberof gamehall - * @classdesc Represents a CSBetCoinRecord. - * @implements ICSBetCoinRecord - * @constructor - * @param {gamehall.ICSBetCoinRecord=} [properties] Properties to set - */ - function CSBetCoinRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSBetCoinRecord ShowTypeId. - * @member {gamehall.HallOperaCode} ShowTypeId - * @memberof gamehall.CSBetCoinRecord - * @instance - */ - CSBetCoinRecord.prototype.ShowTypeId = 0; - - /** - * CSBetCoinRecord TimeIndex. - * @member {number|Long} TimeIndex - * @memberof gamehall.CSBetCoinRecord - * @instance - */ - CSBetCoinRecord.prototype.TimeIndex = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CSBetCoinRecord PageNo. - * @member {number} PageNo - * @memberof gamehall.CSBetCoinRecord - * @instance - */ - CSBetCoinRecord.prototype.PageNo = 0; - - /** - * Creates a new CSBetCoinRecord instance using the specified properties. - * @function create - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {gamehall.ICSBetCoinRecord=} [properties] Properties to set - * @returns {gamehall.CSBetCoinRecord} CSBetCoinRecord instance - */ - CSBetCoinRecord.create = function create(properties) { - return new CSBetCoinRecord(properties); - }; - - /** - * Encodes the specified CSBetCoinRecord message. Does not implicitly {@link gamehall.CSBetCoinRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {gamehall.ICSBetCoinRecord} message CSBetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSBetCoinRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowTypeId != null && Object.hasOwnProperty.call(message, "ShowTypeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowTypeId); - if (message.TimeIndex != null && Object.hasOwnProperty.call(message, "TimeIndex")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.TimeIndex); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.PageNo); - return writer; - }; - - /** - * Encodes the specified CSBetCoinRecord message, length delimited. Does not implicitly {@link gamehall.CSBetCoinRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {gamehall.ICSBetCoinRecord} message CSBetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSBetCoinRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSBetCoinRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSBetCoinRecord} CSBetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSBetCoinRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSBetCoinRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowTypeId = reader.int32(); - break; - } - case 2: { - message.TimeIndex = reader.int64(); - break; - } - case 3: { - message.PageNo = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSBetCoinRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSBetCoinRecord} CSBetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSBetCoinRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSBetCoinRecord message. - * @function verify - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSBetCoinRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - switch (message.ShowTypeId) { - default: - return "ShowTypeId: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 101: - break; - } - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (!$util.isInteger(message.TimeIndex) && !(message.TimeIndex && $util.isInteger(message.TimeIndex.low) && $util.isInteger(message.TimeIndex.high))) - return "TimeIndex: integer|Long expected"; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - return null; - }; - - /** - * Creates a CSBetCoinRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSBetCoinRecord} CSBetCoinRecord - */ - CSBetCoinRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSBetCoinRecord) - return object; - var message = new $root.gamehall.CSBetCoinRecord(); - switch (object.ShowTypeId) { - default: - if (typeof object.ShowTypeId === "number") { - message.ShowTypeId = object.ShowTypeId; - break; - } - break; - case "HallOperaZero": - case 0: - message.ShowTypeId = 0; - break; - case "HallChessGame": - case 1: - message.ShowTypeId = 1; - break; - case "HallElectronicGame": - case 2: - message.ShowTypeId = 2; - break; - case "HallFishingGame": - case 3: - message.ShowTypeId = 3; - break; - case "HallLiveVideo": - case 4: - message.ShowTypeId = 4; - break; - case "HallLotteryGame": - case 5: - message.ShowTypeId = 5; - break; - case "HallSportsGame": - case 6: - message.ShowTypeId = 6; - break; - case "HallPrivateRoom": - case 7: - message.ShowTypeId = 7; - break; - case "HallClubRoom": - case 8: - message.ShowTypeId = 8; - break; - case "HallThirdPlt": - case 101: - message.ShowTypeId = 101; - break; - } - if (object.TimeIndex != null) - if ($util.Long) - (message.TimeIndex = $util.Long.fromValue(object.TimeIndex)).unsigned = false; - else if (typeof object.TimeIndex === "string") - message.TimeIndex = parseInt(object.TimeIndex, 10); - else if (typeof object.TimeIndex === "number") - message.TimeIndex = object.TimeIndex; - else if (typeof object.TimeIndex === "object") - message.TimeIndex = new $util.LongBits(object.TimeIndex.low >>> 0, object.TimeIndex.high >>> 0).toNumber(); - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - return message; - }; - - /** - * Creates a plain object from a CSBetCoinRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {gamehall.CSBetCoinRecord} message CSBetCoinRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSBetCoinRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ShowTypeId = options.enums === String ? "HallOperaZero" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TimeIndex = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TimeIndex = options.longs === String ? "0" : 0; - object.PageNo = 0; - } - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - object.ShowTypeId = options.enums === String ? $root.gamehall.HallOperaCode[message.ShowTypeId] === undefined ? message.ShowTypeId : $root.gamehall.HallOperaCode[message.ShowTypeId] : message.ShowTypeId; - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (typeof message.TimeIndex === "number") - object.TimeIndex = options.longs === String ? String(message.TimeIndex) : message.TimeIndex; - else - object.TimeIndex = options.longs === String ? $util.Long.prototype.toString.call(message.TimeIndex) : options.longs === Number ? new $util.LongBits(message.TimeIndex.low >>> 0, message.TimeIndex.high >>> 0).toNumber() : message.TimeIndex; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - return object; - }; - - /** - * Converts this CSBetCoinRecord to JSON. - * @function toJSON - * @memberof gamehall.CSBetCoinRecord - * @instance - * @returns {Object.} JSON object - */ - CSBetCoinRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSBetCoinRecord - * @function getTypeUrl - * @memberof gamehall.CSBetCoinRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSBetCoinRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSBetCoinRecord"; - }; - - return CSBetCoinRecord; - })(); - - gamehall.BetCoinRecord = (function() { - - /** - * Properties of a BetCoinRecord. - * @memberof gamehall - * @interface IBetCoinRecord - * @property {number|Long|null} [Ts] BetCoinRecord Ts - * @property {string|null} [GameName] BetCoinRecord GameName - * @property {string|null} [RecordId] BetCoinRecord RecordId - * @property {number|Long|null} [BetCoin] BetCoinRecord BetCoin - * @property {number|Long|null} [ReceivedCoin] BetCoinRecord ReceivedCoin - */ - - /** - * Constructs a new BetCoinRecord. - * @memberof gamehall - * @classdesc 投注记录 - * @implements IBetCoinRecord - * @constructor - * @param {gamehall.IBetCoinRecord=} [properties] Properties to set - */ - function BetCoinRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * BetCoinRecord Ts. - * @member {number|Long} Ts - * @memberof gamehall.BetCoinRecord - * @instance - */ - BetCoinRecord.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BetCoinRecord GameName. - * @member {string} GameName - * @memberof gamehall.BetCoinRecord - * @instance - */ - BetCoinRecord.prototype.GameName = ""; - - /** - * BetCoinRecord RecordId. - * @member {string} RecordId - * @memberof gamehall.BetCoinRecord - * @instance - */ - BetCoinRecord.prototype.RecordId = ""; - - /** - * BetCoinRecord BetCoin. - * @member {number|Long} BetCoin - * @memberof gamehall.BetCoinRecord - * @instance - */ - BetCoinRecord.prototype.BetCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BetCoinRecord ReceivedCoin. - * @member {number|Long} ReceivedCoin - * @memberof gamehall.BetCoinRecord - * @instance - */ - BetCoinRecord.prototype.ReceivedCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new BetCoinRecord instance using the specified properties. - * @function create - * @memberof gamehall.BetCoinRecord - * @static - * @param {gamehall.IBetCoinRecord=} [properties] Properties to set - * @returns {gamehall.BetCoinRecord} BetCoinRecord instance - */ - BetCoinRecord.create = function create(properties) { - return new BetCoinRecord(properties); - }; - - /** - * Encodes the specified BetCoinRecord message. Does not implicitly {@link gamehall.BetCoinRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.BetCoinRecord - * @static - * @param {gamehall.IBetCoinRecord} message BetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BetCoinRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.Ts); - if (message.GameName != null && Object.hasOwnProperty.call(message, "GameName")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.GameName); - if (message.RecordId != null && Object.hasOwnProperty.call(message, "RecordId")) - writer.uint32(/* id 3, wireType 2 =*/26).string(message.RecordId); - if (message.BetCoin != null && Object.hasOwnProperty.call(message, "BetCoin")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.BetCoin); - if (message.ReceivedCoin != null && Object.hasOwnProperty.call(message, "ReceivedCoin")) - writer.uint32(/* id 5, wireType 0 =*/40).int64(message.ReceivedCoin); - return writer; - }; - - /** - * Encodes the specified BetCoinRecord message, length delimited. Does not implicitly {@link gamehall.BetCoinRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.BetCoinRecord - * @static - * @param {gamehall.IBetCoinRecord} message BetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BetCoinRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a BetCoinRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.BetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.BetCoinRecord} BetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BetCoinRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.BetCoinRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Ts = reader.int64(); - break; - } - case 2: { - message.GameName = reader.string(); - break; - } - case 3: { - message.RecordId = reader.string(); - break; - } - case 4: { - message.BetCoin = reader.int64(); - break; - } - case 5: { - message.ReceivedCoin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a BetCoinRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.BetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.BetCoinRecord} BetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BetCoinRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a BetCoinRecord message. - * @function verify - * @memberof gamehall.BetCoinRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - BetCoinRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - if (message.GameName != null && message.hasOwnProperty("GameName")) - if (!$util.isString(message.GameName)) - return "GameName: string expected"; - if (message.RecordId != null && message.hasOwnProperty("RecordId")) - if (!$util.isString(message.RecordId)) - return "RecordId: string expected"; - if (message.BetCoin != null && message.hasOwnProperty("BetCoin")) - if (!$util.isInteger(message.BetCoin) && !(message.BetCoin && $util.isInteger(message.BetCoin.low) && $util.isInteger(message.BetCoin.high))) - return "BetCoin: integer|Long expected"; - if (message.ReceivedCoin != null && message.hasOwnProperty("ReceivedCoin")) - if (!$util.isInteger(message.ReceivedCoin) && !(message.ReceivedCoin && $util.isInteger(message.ReceivedCoin.low) && $util.isInteger(message.ReceivedCoin.high))) - return "ReceivedCoin: integer|Long expected"; - return null; - }; - - /** - * Creates a BetCoinRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.BetCoinRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.BetCoinRecord} BetCoinRecord - */ - BetCoinRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.BetCoinRecord) - return object; - var message = new $root.gamehall.BetCoinRecord(); - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - if (object.GameName != null) - message.GameName = String(object.GameName); - if (object.RecordId != null) - message.RecordId = String(object.RecordId); - if (object.BetCoin != null) - if ($util.Long) - (message.BetCoin = $util.Long.fromValue(object.BetCoin)).unsigned = false; - else if (typeof object.BetCoin === "string") - message.BetCoin = parseInt(object.BetCoin, 10); - else if (typeof object.BetCoin === "number") - message.BetCoin = object.BetCoin; - else if (typeof object.BetCoin === "object") - message.BetCoin = new $util.LongBits(object.BetCoin.low >>> 0, object.BetCoin.high >>> 0).toNumber(); - if (object.ReceivedCoin != null) - if ($util.Long) - (message.ReceivedCoin = $util.Long.fromValue(object.ReceivedCoin)).unsigned = false; - else if (typeof object.ReceivedCoin === "string") - message.ReceivedCoin = parseInt(object.ReceivedCoin, 10); - else if (typeof object.ReceivedCoin === "number") - message.ReceivedCoin = object.ReceivedCoin; - else if (typeof object.ReceivedCoin === "object") - message.ReceivedCoin = new $util.LongBits(object.ReceivedCoin.low >>> 0, object.ReceivedCoin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a BetCoinRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.BetCoinRecord - * @static - * @param {gamehall.BetCoinRecord} message BetCoinRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - BetCoinRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - object.GameName = ""; - object.RecordId = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.BetCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.BetCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.ReceivedCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.ReceivedCoin = options.longs === String ? "0" : 0; - } - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - if (message.GameName != null && message.hasOwnProperty("GameName")) - object.GameName = message.GameName; - if (message.RecordId != null && message.hasOwnProperty("RecordId")) - object.RecordId = message.RecordId; - if (message.BetCoin != null && message.hasOwnProperty("BetCoin")) - if (typeof message.BetCoin === "number") - object.BetCoin = options.longs === String ? String(message.BetCoin) : message.BetCoin; - else - object.BetCoin = options.longs === String ? $util.Long.prototype.toString.call(message.BetCoin) : options.longs === Number ? new $util.LongBits(message.BetCoin.low >>> 0, message.BetCoin.high >>> 0).toNumber() : message.BetCoin; - if (message.ReceivedCoin != null && message.hasOwnProperty("ReceivedCoin")) - if (typeof message.ReceivedCoin === "number") - object.ReceivedCoin = options.longs === String ? String(message.ReceivedCoin) : message.ReceivedCoin; - else - object.ReceivedCoin = options.longs === String ? $util.Long.prototype.toString.call(message.ReceivedCoin) : options.longs === Number ? new $util.LongBits(message.ReceivedCoin.low >>> 0, message.ReceivedCoin.high >>> 0).toNumber() : message.ReceivedCoin; - return object; - }; - - /** - * Converts this BetCoinRecord to JSON. - * @function toJSON - * @memberof gamehall.BetCoinRecord - * @instance - * @returns {Object.} JSON object - */ - BetCoinRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for BetCoinRecord - * @function getTypeUrl - * @memberof gamehall.BetCoinRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - BetCoinRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.BetCoinRecord"; - }; - - return BetCoinRecord; - })(); - - gamehall.SCBetCoinRecord = (function() { - - /** - * Properties of a SCBetCoinRecord. - * @memberof gamehall - * @interface ISCBetCoinRecord - * @property {Array.|null} [BetCoinRecord] SCBetCoinRecord BetCoinRecord - * @property {number|null} [PageNo] SCBetCoinRecord PageNo - * @property {number|null} [PageSize] SCBetCoinRecord PageSize - * @property {number|null} [PageNum] SCBetCoinRecord PageNum - */ - - /** - * Constructs a new SCBetCoinRecord. - * @memberof gamehall - * @classdesc Represents a SCBetCoinRecord. - * @implements ISCBetCoinRecord - * @constructor - * @param {gamehall.ISCBetCoinRecord=} [properties] Properties to set - */ - function SCBetCoinRecord(properties) { - this.BetCoinRecord = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCBetCoinRecord BetCoinRecord. - * @member {Array.} BetCoinRecord - * @memberof gamehall.SCBetCoinRecord - * @instance - */ - SCBetCoinRecord.prototype.BetCoinRecord = $util.emptyArray; - - /** - * SCBetCoinRecord PageNo. - * @member {number} PageNo - * @memberof gamehall.SCBetCoinRecord - * @instance - */ - SCBetCoinRecord.prototype.PageNo = 0; - - /** - * SCBetCoinRecord PageSize. - * @member {number} PageSize - * @memberof gamehall.SCBetCoinRecord - * @instance - */ - SCBetCoinRecord.prototype.PageSize = 0; - - /** - * SCBetCoinRecord PageNum. - * @member {number} PageNum - * @memberof gamehall.SCBetCoinRecord - * @instance - */ - SCBetCoinRecord.prototype.PageNum = 0; - - /** - * Creates a new SCBetCoinRecord instance using the specified properties. - * @function create - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {gamehall.ISCBetCoinRecord=} [properties] Properties to set - * @returns {gamehall.SCBetCoinRecord} SCBetCoinRecord instance - */ - SCBetCoinRecord.create = function create(properties) { - return new SCBetCoinRecord(properties); - }; - - /** - * Encodes the specified SCBetCoinRecord message. Does not implicitly {@link gamehall.SCBetCoinRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {gamehall.ISCBetCoinRecord} message SCBetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCBetCoinRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.BetCoinRecord != null && message.BetCoinRecord.length) - for (var i = 0; i < message.BetCoinRecord.length; ++i) - $root.gamehall.BetCoinRecord.encode(message.BetCoinRecord[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PageNo); - if (message.PageSize != null && Object.hasOwnProperty.call(message, "PageSize")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.PageSize); - if (message.PageNum != null && Object.hasOwnProperty.call(message, "PageNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.PageNum); - return writer; - }; - - /** - * Encodes the specified SCBetCoinRecord message, length delimited. Does not implicitly {@link gamehall.SCBetCoinRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {gamehall.ISCBetCoinRecord} message SCBetCoinRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCBetCoinRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCBetCoinRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCBetCoinRecord} SCBetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCBetCoinRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCBetCoinRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.BetCoinRecord && message.BetCoinRecord.length)) - message.BetCoinRecord = []; - message.BetCoinRecord.push($root.gamehall.BetCoinRecord.decode(reader, reader.uint32())); - break; - } - case 2: { - message.PageNo = reader.int32(); - break; - } - case 3: { - message.PageSize = reader.int32(); - break; - } - case 4: { - message.PageNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCBetCoinRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCBetCoinRecord} SCBetCoinRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCBetCoinRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCBetCoinRecord message. - * @function verify - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCBetCoinRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.BetCoinRecord != null && message.hasOwnProperty("BetCoinRecord")) { - if (!Array.isArray(message.BetCoinRecord)) - return "BetCoinRecord: array expected"; - for (var i = 0; i < message.BetCoinRecord.length; ++i) { - var error = $root.gamehall.BetCoinRecord.verify(message.BetCoinRecord[i]); - if (error) - return "BetCoinRecord." + error; - } - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - if (!$util.isInteger(message.PageSize)) - return "PageSize: integer expected"; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - if (!$util.isInteger(message.PageNum)) - return "PageNum: integer expected"; - return null; - }; - - /** - * Creates a SCBetCoinRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCBetCoinRecord} SCBetCoinRecord - */ - SCBetCoinRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCBetCoinRecord) - return object; - var message = new $root.gamehall.SCBetCoinRecord(); - if (object.BetCoinRecord) { - if (!Array.isArray(object.BetCoinRecord)) - throw TypeError(".gamehall.SCBetCoinRecord.BetCoinRecord: array expected"); - message.BetCoinRecord = []; - for (var i = 0; i < object.BetCoinRecord.length; ++i) { - if (typeof object.BetCoinRecord[i] !== "object") - throw TypeError(".gamehall.SCBetCoinRecord.BetCoinRecord: object expected"); - message.BetCoinRecord[i] = $root.gamehall.BetCoinRecord.fromObject(object.BetCoinRecord[i]); - } - } - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - if (object.PageSize != null) - message.PageSize = object.PageSize | 0; - if (object.PageNum != null) - message.PageNum = object.PageNum | 0; - return message; - }; - - /** - * Creates a plain object from a SCBetCoinRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {gamehall.SCBetCoinRecord} message SCBetCoinRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCBetCoinRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.BetCoinRecord = []; - if (options.defaults) { - object.PageNo = 0; - object.PageSize = 0; - object.PageNum = 0; - } - if (message.BetCoinRecord && message.BetCoinRecord.length) { - object.BetCoinRecord = []; - for (var j = 0; j < message.BetCoinRecord.length; ++j) - object.BetCoinRecord[j] = $root.gamehall.BetCoinRecord.toObject(message.BetCoinRecord[j], options); - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - object.PageSize = message.PageSize; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - object.PageNum = message.PageNum; - return object; - }; - - /** - * Converts this SCBetCoinRecord to JSON. - * @function toJSON - * @memberof gamehall.SCBetCoinRecord - * @instance - * @returns {Object.} JSON object - */ - SCBetCoinRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCBetCoinRecord - * @function getTypeUrl - * @memberof gamehall.SCBetCoinRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCBetCoinRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCBetCoinRecord"; - }; - - return SCBetCoinRecord; - })(); - - gamehall.CSCoinDetailed = (function() { - - /** - * Properties of a CSCoinDetailed. - * @memberof gamehall - * @interface ICSCoinDetailed - * @property {number|Long|null} [TimeIndex] CSCoinDetailed TimeIndex - * @property {number|Long|null} [CoinType] CSCoinDetailed CoinType - * @property {number|null} [PageNo] CSCoinDetailed PageNo - */ - - /** - * Constructs a new CSCoinDetailed. - * @memberof gamehall - * @classdesc Represents a CSCoinDetailed. - * @implements ICSCoinDetailed - * @constructor - * @param {gamehall.ICSCoinDetailed=} [properties] Properties to set - */ - function CSCoinDetailed(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSCoinDetailed TimeIndex. - * @member {number|Long} TimeIndex - * @memberof gamehall.CSCoinDetailed - * @instance - */ - CSCoinDetailed.prototype.TimeIndex = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CSCoinDetailed CoinType. - * @member {number|Long} CoinType - * @memberof gamehall.CSCoinDetailed - * @instance - */ - CSCoinDetailed.prototype.CoinType = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CSCoinDetailed PageNo. - * @member {number} PageNo - * @memberof gamehall.CSCoinDetailed - * @instance - */ - CSCoinDetailed.prototype.PageNo = 0; - - /** - * Creates a new CSCoinDetailed instance using the specified properties. - * @function create - * @memberof gamehall.CSCoinDetailed - * @static - * @param {gamehall.ICSCoinDetailed=} [properties] Properties to set - * @returns {gamehall.CSCoinDetailed} CSCoinDetailed instance - */ - CSCoinDetailed.create = function create(properties) { - return new CSCoinDetailed(properties); - }; - - /** - * Encodes the specified CSCoinDetailed message. Does not implicitly {@link gamehall.CSCoinDetailed.verify|verify} messages. - * @function encode - * @memberof gamehall.CSCoinDetailed - * @static - * @param {gamehall.ICSCoinDetailed} message CSCoinDetailed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinDetailed.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.TimeIndex != null && Object.hasOwnProperty.call(message, "TimeIndex")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.TimeIndex); - if (message.CoinType != null && Object.hasOwnProperty.call(message, "CoinType")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.CoinType); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.PageNo); - return writer; - }; - - /** - * Encodes the specified CSCoinDetailed message, length delimited. Does not implicitly {@link gamehall.CSCoinDetailed.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSCoinDetailed - * @static - * @param {gamehall.ICSCoinDetailed} message CSCoinDetailed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSCoinDetailed.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSCoinDetailed message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSCoinDetailed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSCoinDetailed} CSCoinDetailed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinDetailed.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSCoinDetailed(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.TimeIndex = reader.int64(); - break; - } - case 2: { - message.CoinType = reader.int64(); - break; - } - case 3: { - message.PageNo = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSCoinDetailed message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSCoinDetailed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSCoinDetailed} CSCoinDetailed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSCoinDetailed.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSCoinDetailed message. - * @function verify - * @memberof gamehall.CSCoinDetailed - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSCoinDetailed.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (!$util.isInteger(message.TimeIndex) && !(message.TimeIndex && $util.isInteger(message.TimeIndex.low) && $util.isInteger(message.TimeIndex.high))) - return "TimeIndex: integer|Long expected"; - if (message.CoinType != null && message.hasOwnProperty("CoinType")) - if (!$util.isInteger(message.CoinType) && !(message.CoinType && $util.isInteger(message.CoinType.low) && $util.isInteger(message.CoinType.high))) - return "CoinType: integer|Long expected"; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - return null; - }; - - /** - * Creates a CSCoinDetailed message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSCoinDetailed - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSCoinDetailed} CSCoinDetailed - */ - CSCoinDetailed.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSCoinDetailed) - return object; - var message = new $root.gamehall.CSCoinDetailed(); - if (object.TimeIndex != null) - if ($util.Long) - (message.TimeIndex = $util.Long.fromValue(object.TimeIndex)).unsigned = false; - else if (typeof object.TimeIndex === "string") - message.TimeIndex = parseInt(object.TimeIndex, 10); - else if (typeof object.TimeIndex === "number") - message.TimeIndex = object.TimeIndex; - else if (typeof object.TimeIndex === "object") - message.TimeIndex = new $util.LongBits(object.TimeIndex.low >>> 0, object.TimeIndex.high >>> 0).toNumber(); - if (object.CoinType != null) - if ($util.Long) - (message.CoinType = $util.Long.fromValue(object.CoinType)).unsigned = false; - else if (typeof object.CoinType === "string") - message.CoinType = parseInt(object.CoinType, 10); - else if (typeof object.CoinType === "number") - message.CoinType = object.CoinType; - else if (typeof object.CoinType === "object") - message.CoinType = new $util.LongBits(object.CoinType.low >>> 0, object.CoinType.high >>> 0).toNumber(); - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - return message; - }; - - /** - * Creates a plain object from a CSCoinDetailed message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSCoinDetailed - * @static - * @param {gamehall.CSCoinDetailed} message CSCoinDetailed - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSCoinDetailed.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TimeIndex = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TimeIndex = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.CoinType = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.CoinType = options.longs === String ? "0" : 0; - object.PageNo = 0; - } - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (typeof message.TimeIndex === "number") - object.TimeIndex = options.longs === String ? String(message.TimeIndex) : message.TimeIndex; - else - object.TimeIndex = options.longs === String ? $util.Long.prototype.toString.call(message.TimeIndex) : options.longs === Number ? new $util.LongBits(message.TimeIndex.low >>> 0, message.TimeIndex.high >>> 0).toNumber() : message.TimeIndex; - if (message.CoinType != null && message.hasOwnProperty("CoinType")) - if (typeof message.CoinType === "number") - object.CoinType = options.longs === String ? String(message.CoinType) : message.CoinType; - else - object.CoinType = options.longs === String ? $util.Long.prototype.toString.call(message.CoinType) : options.longs === Number ? new $util.LongBits(message.CoinType.low >>> 0, message.CoinType.high >>> 0).toNumber() : message.CoinType; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - return object; - }; - - /** - * Converts this CSCoinDetailed to JSON. - * @function toJSON - * @memberof gamehall.CSCoinDetailed - * @instance - * @returns {Object.} JSON object - */ - CSCoinDetailed.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSCoinDetailed - * @function getTypeUrl - * @memberof gamehall.CSCoinDetailed - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSCoinDetailed.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSCoinDetailed"; - }; - - return CSCoinDetailed; - })(); - - gamehall.CoinDetailed = (function() { - - /** - * Properties of a CoinDetailed. - * @memberof gamehall - * @interface ICoinDetailed - * @property {number|Long|null} [Ts] CoinDetailed Ts - * @property {number|Long|null} [CoinType] CoinDetailed CoinType - * @property {number|Long|null} [Income] CoinDetailed Income - * @property {number|Long|null} [Disburse] CoinDetailed Disburse - * @property {number|Long|null} [Coin] CoinDetailed Coin - */ - - /** - * Constructs a new CoinDetailed. - * @memberof gamehall - * @classdesc 账户明细 - * @implements ICoinDetailed - * @constructor - * @param {gamehall.ICoinDetailed=} [properties] Properties to set - */ - function CoinDetailed(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CoinDetailed Ts. - * @member {number|Long} Ts - * @memberof gamehall.CoinDetailed - * @instance - */ - CoinDetailed.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CoinDetailed CoinType. - * @member {number|Long} CoinType - * @memberof gamehall.CoinDetailed - * @instance - */ - CoinDetailed.prototype.CoinType = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CoinDetailed Income. - * @member {number|Long} Income - * @memberof gamehall.CoinDetailed - * @instance - */ - CoinDetailed.prototype.Income = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CoinDetailed Disburse. - * @member {number|Long} Disburse - * @memberof gamehall.CoinDetailed - * @instance - */ - CoinDetailed.prototype.Disburse = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * CoinDetailed Coin. - * @member {number|Long} Coin - * @memberof gamehall.CoinDetailed - * @instance - */ - CoinDetailed.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new CoinDetailed instance using the specified properties. - * @function create - * @memberof gamehall.CoinDetailed - * @static - * @param {gamehall.ICoinDetailed=} [properties] Properties to set - * @returns {gamehall.CoinDetailed} CoinDetailed instance - */ - CoinDetailed.create = function create(properties) { - return new CoinDetailed(properties); - }; - - /** - * Encodes the specified CoinDetailed message. Does not implicitly {@link gamehall.CoinDetailed.verify|verify} messages. - * @function encode - * @memberof gamehall.CoinDetailed - * @static - * @param {gamehall.ICoinDetailed} message CoinDetailed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CoinDetailed.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.Ts); - if (message.CoinType != null && Object.hasOwnProperty.call(message, "CoinType")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.CoinType); - if (message.Income != null && Object.hasOwnProperty.call(message, "Income")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Income); - if (message.Disburse != null && Object.hasOwnProperty.call(message, "Disburse")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.Disburse); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 5, wireType 0 =*/40).int64(message.Coin); - return writer; - }; - - /** - * Encodes the specified CoinDetailed message, length delimited. Does not implicitly {@link gamehall.CoinDetailed.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CoinDetailed - * @static - * @param {gamehall.ICoinDetailed} message CoinDetailed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CoinDetailed.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CoinDetailed message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CoinDetailed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CoinDetailed} CoinDetailed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CoinDetailed.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CoinDetailed(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Ts = reader.int64(); - break; - } - case 2: { - message.CoinType = reader.int64(); - break; - } - case 3: { - message.Income = reader.int64(); - break; - } - case 4: { - message.Disburse = reader.int64(); - break; - } - case 5: { - message.Coin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CoinDetailed message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CoinDetailed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CoinDetailed} CoinDetailed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CoinDetailed.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CoinDetailed message. - * @function verify - * @memberof gamehall.CoinDetailed - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CoinDetailed.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - if (message.CoinType != null && message.hasOwnProperty("CoinType")) - if (!$util.isInteger(message.CoinType) && !(message.CoinType && $util.isInteger(message.CoinType.low) && $util.isInteger(message.CoinType.high))) - return "CoinType: integer|Long expected"; - if (message.Income != null && message.hasOwnProperty("Income")) - if (!$util.isInteger(message.Income) && !(message.Income && $util.isInteger(message.Income.low) && $util.isInteger(message.Income.high))) - return "Income: integer|Long expected"; - if (message.Disburse != null && message.hasOwnProperty("Disburse")) - if (!$util.isInteger(message.Disburse) && !(message.Disburse && $util.isInteger(message.Disburse.low) && $util.isInteger(message.Disburse.high))) - return "Disburse: integer|Long expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - return null; - }; - - /** - * Creates a CoinDetailed message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CoinDetailed - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CoinDetailed} CoinDetailed - */ - CoinDetailed.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CoinDetailed) - return object; - var message = new $root.gamehall.CoinDetailed(); - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - if (object.CoinType != null) - if ($util.Long) - (message.CoinType = $util.Long.fromValue(object.CoinType)).unsigned = false; - else if (typeof object.CoinType === "string") - message.CoinType = parseInt(object.CoinType, 10); - else if (typeof object.CoinType === "number") - message.CoinType = object.CoinType; - else if (typeof object.CoinType === "object") - message.CoinType = new $util.LongBits(object.CoinType.low >>> 0, object.CoinType.high >>> 0).toNumber(); - if (object.Income != null) - if ($util.Long) - (message.Income = $util.Long.fromValue(object.Income)).unsigned = false; - else if (typeof object.Income === "string") - message.Income = parseInt(object.Income, 10); - else if (typeof object.Income === "number") - message.Income = object.Income; - else if (typeof object.Income === "object") - message.Income = new $util.LongBits(object.Income.low >>> 0, object.Income.high >>> 0).toNumber(); - if (object.Disburse != null) - if ($util.Long) - (message.Disburse = $util.Long.fromValue(object.Disburse)).unsigned = false; - else if (typeof object.Disburse === "string") - message.Disburse = parseInt(object.Disburse, 10); - else if (typeof object.Disburse === "number") - message.Disburse = object.Disburse; - else if (typeof object.Disburse === "object") - message.Disburse = new $util.LongBits(object.Disburse.low >>> 0, object.Disburse.high >>> 0).toNumber(); - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a CoinDetailed message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CoinDetailed - * @static - * @param {gamehall.CoinDetailed} message CoinDetailed - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CoinDetailed.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.CoinType = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.CoinType = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Income = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Income = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Disburse = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Disburse = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - } - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - if (message.CoinType != null && message.hasOwnProperty("CoinType")) - if (typeof message.CoinType === "number") - object.CoinType = options.longs === String ? String(message.CoinType) : message.CoinType; - else - object.CoinType = options.longs === String ? $util.Long.prototype.toString.call(message.CoinType) : options.longs === Number ? new $util.LongBits(message.CoinType.low >>> 0, message.CoinType.high >>> 0).toNumber() : message.CoinType; - if (message.Income != null && message.hasOwnProperty("Income")) - if (typeof message.Income === "number") - object.Income = options.longs === String ? String(message.Income) : message.Income; - else - object.Income = options.longs === String ? $util.Long.prototype.toString.call(message.Income) : options.longs === Number ? new $util.LongBits(message.Income.low >>> 0, message.Income.high >>> 0).toNumber() : message.Income; - if (message.Disburse != null && message.hasOwnProperty("Disburse")) - if (typeof message.Disburse === "number") - object.Disburse = options.longs === String ? String(message.Disburse) : message.Disburse; - else - object.Disburse = options.longs === String ? $util.Long.prototype.toString.call(message.Disburse) : options.longs === Number ? new $util.LongBits(message.Disburse.low >>> 0, message.Disburse.high >>> 0).toNumber() : message.Disburse; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - return object; - }; - - /** - * Converts this CoinDetailed to JSON. - * @function toJSON - * @memberof gamehall.CoinDetailed - * @instance - * @returns {Object.} JSON object - */ - CoinDetailed.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CoinDetailed - * @function getTypeUrl - * @memberof gamehall.CoinDetailed - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CoinDetailed.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CoinDetailed"; - }; - - return CoinDetailed; - })(); - - gamehall.SCCoinDetailedTotal = (function() { - - /** - * Properties of a SCCoinDetailedTotal. - * @memberof gamehall - * @interface ISCCoinDetailedTotal - * @property {Array.|null} [CoinDetailed] SCCoinDetailedTotal CoinDetailed - * @property {number|null} [PageNo] SCCoinDetailedTotal PageNo - * @property {number|null} [PageSize] SCCoinDetailedTotal PageSize - * @property {number|null} [PageNum] SCCoinDetailedTotal PageNum - */ - - /** - * Constructs a new SCCoinDetailedTotal. - * @memberof gamehall - * @classdesc Represents a SCCoinDetailedTotal. - * @implements ISCCoinDetailedTotal - * @constructor - * @param {gamehall.ISCCoinDetailedTotal=} [properties] Properties to set - */ - function SCCoinDetailedTotal(properties) { - this.CoinDetailed = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinDetailedTotal CoinDetailed. - * @member {Array.} CoinDetailed - * @memberof gamehall.SCCoinDetailedTotal - * @instance - */ - SCCoinDetailedTotal.prototype.CoinDetailed = $util.emptyArray; - - /** - * SCCoinDetailedTotal PageNo. - * @member {number} PageNo - * @memberof gamehall.SCCoinDetailedTotal - * @instance - */ - SCCoinDetailedTotal.prototype.PageNo = 0; - - /** - * SCCoinDetailedTotal PageSize. - * @member {number} PageSize - * @memberof gamehall.SCCoinDetailedTotal - * @instance - */ - SCCoinDetailedTotal.prototype.PageSize = 0; - - /** - * SCCoinDetailedTotal PageNum. - * @member {number} PageNum - * @memberof gamehall.SCCoinDetailedTotal - * @instance - */ - SCCoinDetailedTotal.prototype.PageNum = 0; - - /** - * Creates a new SCCoinDetailedTotal instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {gamehall.ISCCoinDetailedTotal=} [properties] Properties to set - * @returns {gamehall.SCCoinDetailedTotal} SCCoinDetailedTotal instance - */ - SCCoinDetailedTotal.create = function create(properties) { - return new SCCoinDetailedTotal(properties); - }; - - /** - * Encodes the specified SCCoinDetailedTotal message. Does not implicitly {@link gamehall.SCCoinDetailedTotal.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {gamehall.ISCCoinDetailedTotal} message SCCoinDetailedTotal message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinDetailedTotal.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.CoinDetailed != null && message.CoinDetailed.length) - for (var i = 0; i < message.CoinDetailed.length; ++i) - $root.gamehall.CoinDetailed.encode(message.CoinDetailed[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PageNo); - if (message.PageSize != null && Object.hasOwnProperty.call(message, "PageSize")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.PageSize); - if (message.PageNum != null && Object.hasOwnProperty.call(message, "PageNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.PageNum); - return writer; - }; - - /** - * Encodes the specified SCCoinDetailedTotal message, length delimited. Does not implicitly {@link gamehall.SCCoinDetailedTotal.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {gamehall.ISCCoinDetailedTotal} message SCCoinDetailedTotal message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinDetailedTotal.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinDetailedTotal message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinDetailedTotal} SCCoinDetailedTotal - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinDetailedTotal.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinDetailedTotal(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.CoinDetailed && message.CoinDetailed.length)) - message.CoinDetailed = []; - message.CoinDetailed.push($root.gamehall.CoinDetailed.decode(reader, reader.uint32())); - break; - } - case 2: { - message.PageNo = reader.int32(); - break; - } - case 3: { - message.PageSize = reader.int32(); - break; - } - case 4: { - message.PageNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinDetailedTotal message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinDetailedTotal} SCCoinDetailedTotal - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinDetailedTotal.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinDetailedTotal message. - * @function verify - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinDetailedTotal.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.CoinDetailed != null && message.hasOwnProperty("CoinDetailed")) { - if (!Array.isArray(message.CoinDetailed)) - return "CoinDetailed: array expected"; - for (var i = 0; i < message.CoinDetailed.length; ++i) { - var error = $root.gamehall.CoinDetailed.verify(message.CoinDetailed[i]); - if (error) - return "CoinDetailed." + error; - } - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - if (!$util.isInteger(message.PageSize)) - return "PageSize: integer expected"; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - if (!$util.isInteger(message.PageNum)) - return "PageNum: integer expected"; - return null; - }; - - /** - * Creates a SCCoinDetailedTotal message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinDetailedTotal} SCCoinDetailedTotal - */ - SCCoinDetailedTotal.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinDetailedTotal) - return object; - var message = new $root.gamehall.SCCoinDetailedTotal(); - if (object.CoinDetailed) { - if (!Array.isArray(object.CoinDetailed)) - throw TypeError(".gamehall.SCCoinDetailedTotal.CoinDetailed: array expected"); - message.CoinDetailed = []; - for (var i = 0; i < object.CoinDetailed.length; ++i) { - if (typeof object.CoinDetailed[i] !== "object") - throw TypeError(".gamehall.SCCoinDetailedTotal.CoinDetailed: object expected"); - message.CoinDetailed[i] = $root.gamehall.CoinDetailed.fromObject(object.CoinDetailed[i]); - } - } - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - if (object.PageSize != null) - message.PageSize = object.PageSize | 0; - if (object.PageNum != null) - message.PageNum = object.PageNum | 0; - return message; - }; - - /** - * Creates a plain object from a SCCoinDetailedTotal message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {gamehall.SCCoinDetailedTotal} message SCCoinDetailedTotal - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinDetailedTotal.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.CoinDetailed = []; - if (options.defaults) { - object.PageNo = 0; - object.PageSize = 0; - object.PageNum = 0; - } - if (message.CoinDetailed && message.CoinDetailed.length) { - object.CoinDetailed = []; - for (var j = 0; j < message.CoinDetailed.length; ++j) - object.CoinDetailed[j] = $root.gamehall.CoinDetailed.toObject(message.CoinDetailed[j], options); - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - object.PageSize = message.PageSize; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - object.PageNum = message.PageNum; - return object; - }; - - /** - * Converts this SCCoinDetailedTotal to JSON. - * @function toJSON - * @memberof gamehall.SCCoinDetailedTotal - * @instance - * @returns {Object.} JSON object - */ - SCCoinDetailedTotal.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinDetailedTotal - * @function getTypeUrl - * @memberof gamehall.SCCoinDetailedTotal - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinDetailedTotal.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinDetailedTotal"; - }; - - return SCCoinDetailedTotal; - })(); - - gamehall.SCCoinTotal = (function() { - - /** - * Properties of a SCCoinTotal. - * @memberof gamehall - * @interface ISCCoinTotal - * @property {number|Long|null} [RechargeCoin] SCCoinTotal RechargeCoin - * @property {number|Long|null} [ExchangeCoin] SCCoinTotal ExchangeCoin - * @property {number|Long|null} [ClubAddCoin] SCCoinTotal ClubAddCoin - * @property {number|Long|null} [RebateCoin] SCCoinTotal RebateCoin - * @property {number|Long|null} [Activity] SCCoinTotal Activity - * @property {Array.|null} [TransactionType] SCCoinTotal TransactionType - */ - - /** - * Constructs a new SCCoinTotal. - * @memberof gamehall - * @classdesc Represents a SCCoinTotal. - * @implements ISCCoinTotal - * @constructor - * @param {gamehall.ISCCoinTotal=} [properties] Properties to set - */ - function SCCoinTotal(properties) { - this.TransactionType = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCCoinTotal RechargeCoin. - * @member {number|Long} RechargeCoin - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.RechargeCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCCoinTotal ExchangeCoin. - * @member {number|Long} ExchangeCoin - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.ExchangeCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCCoinTotal ClubAddCoin. - * @member {number|Long} ClubAddCoin - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.ClubAddCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCCoinTotal RebateCoin. - * @member {number|Long} RebateCoin - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.RebateCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCCoinTotal Activity. - * @member {number|Long} Activity - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.Activity = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCCoinTotal TransactionType. - * @member {Array.} TransactionType - * @memberof gamehall.SCCoinTotal - * @instance - */ - SCCoinTotal.prototype.TransactionType = $util.emptyArray; - - /** - * Creates a new SCCoinTotal instance using the specified properties. - * @function create - * @memberof gamehall.SCCoinTotal - * @static - * @param {gamehall.ISCCoinTotal=} [properties] Properties to set - * @returns {gamehall.SCCoinTotal} SCCoinTotal instance - */ - SCCoinTotal.create = function create(properties) { - return new SCCoinTotal(properties); - }; - - /** - * Encodes the specified SCCoinTotal message. Does not implicitly {@link gamehall.SCCoinTotal.verify|verify} messages. - * @function encode - * @memberof gamehall.SCCoinTotal - * @static - * @param {gamehall.ISCCoinTotal} message SCCoinTotal message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinTotal.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.RechargeCoin != null && Object.hasOwnProperty.call(message, "RechargeCoin")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.RechargeCoin); - if (message.ExchangeCoin != null && Object.hasOwnProperty.call(message, "ExchangeCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.ExchangeCoin); - if (message.ClubAddCoin != null && Object.hasOwnProperty.call(message, "ClubAddCoin")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.ClubAddCoin); - if (message.RebateCoin != null && Object.hasOwnProperty.call(message, "RebateCoin")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.RebateCoin); - if (message.Activity != null && Object.hasOwnProperty.call(message, "Activity")) - writer.uint32(/* id 5, wireType 0 =*/40).int64(message.Activity); - if (message.TransactionType != null && message.TransactionType.length) { - writer.uint32(/* id 6, wireType 2 =*/50).fork(); - for (var i = 0; i < message.TransactionType.length; ++i) - writer.int32(message.TransactionType[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCCoinTotal message, length delimited. Does not implicitly {@link gamehall.SCCoinTotal.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCCoinTotal - * @static - * @param {gamehall.ISCCoinTotal} message SCCoinTotal message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCCoinTotal.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCCoinTotal message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCCoinTotal - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCCoinTotal} SCCoinTotal - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinTotal.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCCoinTotal(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.RechargeCoin = reader.int64(); - break; - } - case 2: { - message.ExchangeCoin = reader.int64(); - break; - } - case 3: { - message.ClubAddCoin = reader.int64(); - break; - } - case 4: { - message.RebateCoin = reader.int64(); - break; - } - case 5: { - message.Activity = reader.int64(); - break; - } - case 6: { - if (!(message.TransactionType && message.TransactionType.length)) - message.TransactionType = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.TransactionType.push(reader.int32()); - } else - message.TransactionType.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCCoinTotal message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCCoinTotal - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCCoinTotal} SCCoinTotal - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCCoinTotal.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCCoinTotal message. - * @function verify - * @memberof gamehall.SCCoinTotal - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCCoinTotal.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.RechargeCoin != null && message.hasOwnProperty("RechargeCoin")) - if (!$util.isInteger(message.RechargeCoin) && !(message.RechargeCoin && $util.isInteger(message.RechargeCoin.low) && $util.isInteger(message.RechargeCoin.high))) - return "RechargeCoin: integer|Long expected"; - if (message.ExchangeCoin != null && message.hasOwnProperty("ExchangeCoin")) - if (!$util.isInteger(message.ExchangeCoin) && !(message.ExchangeCoin && $util.isInteger(message.ExchangeCoin.low) && $util.isInteger(message.ExchangeCoin.high))) - return "ExchangeCoin: integer|Long expected"; - if (message.ClubAddCoin != null && message.hasOwnProperty("ClubAddCoin")) - if (!$util.isInteger(message.ClubAddCoin) && !(message.ClubAddCoin && $util.isInteger(message.ClubAddCoin.low) && $util.isInteger(message.ClubAddCoin.high))) - return "ClubAddCoin: integer|Long expected"; - if (message.RebateCoin != null && message.hasOwnProperty("RebateCoin")) - if (!$util.isInteger(message.RebateCoin) && !(message.RebateCoin && $util.isInteger(message.RebateCoin.low) && $util.isInteger(message.RebateCoin.high))) - return "RebateCoin: integer|Long expected"; - if (message.Activity != null && message.hasOwnProperty("Activity")) - if (!$util.isInteger(message.Activity) && !(message.Activity && $util.isInteger(message.Activity.low) && $util.isInteger(message.Activity.high))) - return "Activity: integer|Long expected"; - if (message.TransactionType != null && message.hasOwnProperty("TransactionType")) { - if (!Array.isArray(message.TransactionType)) - return "TransactionType: array expected"; - for (var i = 0; i < message.TransactionType.length; ++i) - if (!$util.isInteger(message.TransactionType[i])) - return "TransactionType: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCCoinTotal message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCCoinTotal - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCCoinTotal} SCCoinTotal - */ - SCCoinTotal.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCCoinTotal) - return object; - var message = new $root.gamehall.SCCoinTotal(); - if (object.RechargeCoin != null) - if ($util.Long) - (message.RechargeCoin = $util.Long.fromValue(object.RechargeCoin)).unsigned = false; - else if (typeof object.RechargeCoin === "string") - message.RechargeCoin = parseInt(object.RechargeCoin, 10); - else if (typeof object.RechargeCoin === "number") - message.RechargeCoin = object.RechargeCoin; - else if (typeof object.RechargeCoin === "object") - message.RechargeCoin = new $util.LongBits(object.RechargeCoin.low >>> 0, object.RechargeCoin.high >>> 0).toNumber(); - if (object.ExchangeCoin != null) - if ($util.Long) - (message.ExchangeCoin = $util.Long.fromValue(object.ExchangeCoin)).unsigned = false; - else if (typeof object.ExchangeCoin === "string") - message.ExchangeCoin = parseInt(object.ExchangeCoin, 10); - else if (typeof object.ExchangeCoin === "number") - message.ExchangeCoin = object.ExchangeCoin; - else if (typeof object.ExchangeCoin === "object") - message.ExchangeCoin = new $util.LongBits(object.ExchangeCoin.low >>> 0, object.ExchangeCoin.high >>> 0).toNumber(); - if (object.ClubAddCoin != null) - if ($util.Long) - (message.ClubAddCoin = $util.Long.fromValue(object.ClubAddCoin)).unsigned = false; - else if (typeof object.ClubAddCoin === "string") - message.ClubAddCoin = parseInt(object.ClubAddCoin, 10); - else if (typeof object.ClubAddCoin === "number") - message.ClubAddCoin = object.ClubAddCoin; - else if (typeof object.ClubAddCoin === "object") - message.ClubAddCoin = new $util.LongBits(object.ClubAddCoin.low >>> 0, object.ClubAddCoin.high >>> 0).toNumber(); - if (object.RebateCoin != null) - if ($util.Long) - (message.RebateCoin = $util.Long.fromValue(object.RebateCoin)).unsigned = false; - else if (typeof object.RebateCoin === "string") - message.RebateCoin = parseInt(object.RebateCoin, 10); - else if (typeof object.RebateCoin === "number") - message.RebateCoin = object.RebateCoin; - else if (typeof object.RebateCoin === "object") - message.RebateCoin = new $util.LongBits(object.RebateCoin.low >>> 0, object.RebateCoin.high >>> 0).toNumber(); - if (object.Activity != null) - if ($util.Long) - (message.Activity = $util.Long.fromValue(object.Activity)).unsigned = false; - else if (typeof object.Activity === "string") - message.Activity = parseInt(object.Activity, 10); - else if (typeof object.Activity === "number") - message.Activity = object.Activity; - else if (typeof object.Activity === "object") - message.Activity = new $util.LongBits(object.Activity.low >>> 0, object.Activity.high >>> 0).toNumber(); - if (object.TransactionType) { - if (!Array.isArray(object.TransactionType)) - throw TypeError(".gamehall.SCCoinTotal.TransactionType: array expected"); - message.TransactionType = []; - for (var i = 0; i < object.TransactionType.length; ++i) - message.TransactionType[i] = object.TransactionType[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCCoinTotal message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCCoinTotal - * @static - * @param {gamehall.SCCoinTotal} message SCCoinTotal - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCCoinTotal.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.TransactionType = []; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.RechargeCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.RechargeCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.ExchangeCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.ExchangeCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.ClubAddCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.ClubAddCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.RebateCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.RebateCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Activity = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Activity = options.longs === String ? "0" : 0; - } - if (message.RechargeCoin != null && message.hasOwnProperty("RechargeCoin")) - if (typeof message.RechargeCoin === "number") - object.RechargeCoin = options.longs === String ? String(message.RechargeCoin) : message.RechargeCoin; - else - object.RechargeCoin = options.longs === String ? $util.Long.prototype.toString.call(message.RechargeCoin) : options.longs === Number ? new $util.LongBits(message.RechargeCoin.low >>> 0, message.RechargeCoin.high >>> 0).toNumber() : message.RechargeCoin; - if (message.ExchangeCoin != null && message.hasOwnProperty("ExchangeCoin")) - if (typeof message.ExchangeCoin === "number") - object.ExchangeCoin = options.longs === String ? String(message.ExchangeCoin) : message.ExchangeCoin; - else - object.ExchangeCoin = options.longs === String ? $util.Long.prototype.toString.call(message.ExchangeCoin) : options.longs === Number ? new $util.LongBits(message.ExchangeCoin.low >>> 0, message.ExchangeCoin.high >>> 0).toNumber() : message.ExchangeCoin; - if (message.ClubAddCoin != null && message.hasOwnProperty("ClubAddCoin")) - if (typeof message.ClubAddCoin === "number") - object.ClubAddCoin = options.longs === String ? String(message.ClubAddCoin) : message.ClubAddCoin; - else - object.ClubAddCoin = options.longs === String ? $util.Long.prototype.toString.call(message.ClubAddCoin) : options.longs === Number ? new $util.LongBits(message.ClubAddCoin.low >>> 0, message.ClubAddCoin.high >>> 0).toNumber() : message.ClubAddCoin; - if (message.RebateCoin != null && message.hasOwnProperty("RebateCoin")) - if (typeof message.RebateCoin === "number") - object.RebateCoin = options.longs === String ? String(message.RebateCoin) : message.RebateCoin; - else - object.RebateCoin = options.longs === String ? $util.Long.prototype.toString.call(message.RebateCoin) : options.longs === Number ? new $util.LongBits(message.RebateCoin.low >>> 0, message.RebateCoin.high >>> 0).toNumber() : message.RebateCoin; - if (message.Activity != null && message.hasOwnProperty("Activity")) - if (typeof message.Activity === "number") - object.Activity = options.longs === String ? String(message.Activity) : message.Activity; - else - object.Activity = options.longs === String ? $util.Long.prototype.toString.call(message.Activity) : options.longs === Number ? new $util.LongBits(message.Activity.low >>> 0, message.Activity.high >>> 0).toNumber() : message.Activity; - if (message.TransactionType && message.TransactionType.length) { - object.TransactionType = []; - for (var j = 0; j < message.TransactionType.length; ++j) - object.TransactionType[j] = message.TransactionType[j]; - } - return object; - }; - - /** - * Converts this SCCoinTotal to JSON. - * @function toJSON - * @memberof gamehall.SCCoinTotal - * @instance - * @returns {Object.} JSON object - */ - SCCoinTotal.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCCoinTotal - * @function getTypeUrl - * @memberof gamehall.SCCoinTotal - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCCoinTotal.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCCoinTotal"; - }; - - return SCCoinTotal; - })(); - - gamehall.CSReportForm = (function() { - - /** - * Properties of a CSReportForm. - * @memberof gamehall - * @interface ICSReportForm - * @property {gamehall.HallOperaCode|null} [ShowTypeId] CSReportForm ShowTypeId - * @property {number|Long|null} [TimeIndex] CSReportForm TimeIndex - */ - - /** - * Constructs a new CSReportForm. - * @memberof gamehall - * @classdesc Represents a CSReportForm. - * @implements ICSReportForm - * @constructor - * @param {gamehall.ICSReportForm=} [properties] Properties to set - */ - function CSReportForm(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSReportForm ShowTypeId. - * @member {gamehall.HallOperaCode} ShowTypeId - * @memberof gamehall.CSReportForm - * @instance - */ - CSReportForm.prototype.ShowTypeId = 0; - - /** - * CSReportForm TimeIndex. - * @member {number|Long} TimeIndex - * @memberof gamehall.CSReportForm - * @instance - */ - CSReportForm.prototype.TimeIndex = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new CSReportForm instance using the specified properties. - * @function create - * @memberof gamehall.CSReportForm - * @static - * @param {gamehall.ICSReportForm=} [properties] Properties to set - * @returns {gamehall.CSReportForm} CSReportForm instance - */ - CSReportForm.create = function create(properties) { - return new CSReportForm(properties); - }; - - /** - * Encodes the specified CSReportForm message. Does not implicitly {@link gamehall.CSReportForm.verify|verify} messages. - * @function encode - * @memberof gamehall.CSReportForm - * @static - * @param {gamehall.ICSReportForm} message CSReportForm message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReportForm.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowTypeId != null && Object.hasOwnProperty.call(message, "ShowTypeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowTypeId); - if (message.TimeIndex != null && Object.hasOwnProperty.call(message, "TimeIndex")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.TimeIndex); - return writer; - }; - - /** - * Encodes the specified CSReportForm message, length delimited. Does not implicitly {@link gamehall.CSReportForm.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSReportForm - * @static - * @param {gamehall.ICSReportForm} message CSReportForm message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReportForm.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSReportForm message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSReportForm - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSReportForm} CSReportForm - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReportForm.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSReportForm(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowTypeId = reader.int32(); - break; - } - case 2: { - message.TimeIndex = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSReportForm message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSReportForm - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSReportForm} CSReportForm - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReportForm.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSReportForm message. - * @function verify - * @memberof gamehall.CSReportForm - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSReportForm.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - switch (message.ShowTypeId) { - default: - return "ShowTypeId: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 101: - break; - } - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (!$util.isInteger(message.TimeIndex) && !(message.TimeIndex && $util.isInteger(message.TimeIndex.low) && $util.isInteger(message.TimeIndex.high))) - return "TimeIndex: integer|Long expected"; - return null; - }; - - /** - * Creates a CSReportForm message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSReportForm - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSReportForm} CSReportForm - */ - CSReportForm.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSReportForm) - return object; - var message = new $root.gamehall.CSReportForm(); - switch (object.ShowTypeId) { - default: - if (typeof object.ShowTypeId === "number") { - message.ShowTypeId = object.ShowTypeId; - break; - } - break; - case "HallOperaZero": - case 0: - message.ShowTypeId = 0; - break; - case "HallChessGame": - case 1: - message.ShowTypeId = 1; - break; - case "HallElectronicGame": - case 2: - message.ShowTypeId = 2; - break; - case "HallFishingGame": - case 3: - message.ShowTypeId = 3; - break; - case "HallLiveVideo": - case 4: - message.ShowTypeId = 4; - break; - case "HallLotteryGame": - case 5: - message.ShowTypeId = 5; - break; - case "HallSportsGame": - case 6: - message.ShowTypeId = 6; - break; - case "HallPrivateRoom": - case 7: - message.ShowTypeId = 7; - break; - case "HallClubRoom": - case 8: - message.ShowTypeId = 8; - break; - case "HallThirdPlt": - case 101: - message.ShowTypeId = 101; - break; - } - if (object.TimeIndex != null) - if ($util.Long) - (message.TimeIndex = $util.Long.fromValue(object.TimeIndex)).unsigned = false; - else if (typeof object.TimeIndex === "string") - message.TimeIndex = parseInt(object.TimeIndex, 10); - else if (typeof object.TimeIndex === "number") - message.TimeIndex = object.TimeIndex; - else if (typeof object.TimeIndex === "object") - message.TimeIndex = new $util.LongBits(object.TimeIndex.low >>> 0, object.TimeIndex.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a CSReportForm message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSReportForm - * @static - * @param {gamehall.CSReportForm} message CSReportForm - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSReportForm.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ShowTypeId = options.enums === String ? "HallOperaZero" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TimeIndex = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TimeIndex = options.longs === String ? "0" : 0; - } - if (message.ShowTypeId != null && message.hasOwnProperty("ShowTypeId")) - object.ShowTypeId = options.enums === String ? $root.gamehall.HallOperaCode[message.ShowTypeId] === undefined ? message.ShowTypeId : $root.gamehall.HallOperaCode[message.ShowTypeId] : message.ShowTypeId; - if (message.TimeIndex != null && message.hasOwnProperty("TimeIndex")) - if (typeof message.TimeIndex === "number") - object.TimeIndex = options.longs === String ? String(message.TimeIndex) : message.TimeIndex; - else - object.TimeIndex = options.longs === String ? $util.Long.prototype.toString.call(message.TimeIndex) : options.longs === Number ? new $util.LongBits(message.TimeIndex.low >>> 0, message.TimeIndex.high >>> 0).toNumber() : message.TimeIndex; - return object; - }; - - /** - * Converts this CSReportForm to JSON. - * @function toJSON - * @memberof gamehall.CSReportForm - * @instance - * @returns {Object.} JSON object - */ - CSReportForm.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSReportForm - * @function getTypeUrl - * @memberof gamehall.CSReportForm - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSReportForm.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSReportForm"; - }; - - return CSReportForm; - })(); - - gamehall.SCReportForm = (function() { - - /** - * Properties of a SCReportForm. - * @memberof gamehall - * @interface ISCReportForm - * @property {number|null} [ShowType] SCReportForm ShowType - * @property {number|Long|null} [ProfitCoin] SCReportForm ProfitCoin - * @property {number|Long|null} [BetCoin] SCReportForm BetCoin - * @property {number|Long|null} [FlowCoin] SCReportForm FlowCoin - */ - - /** - * Constructs a new SCReportForm. - * @memberof gamehall - * @classdesc Represents a SCReportForm. - * @implements ISCReportForm - * @constructor - * @param {gamehall.ISCReportForm=} [properties] Properties to set - */ - function SCReportForm(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCReportForm ShowType. - * @member {number} ShowType - * @memberof gamehall.SCReportForm - * @instance - */ - SCReportForm.prototype.ShowType = 0; - - /** - * SCReportForm ProfitCoin. - * @member {number|Long} ProfitCoin - * @memberof gamehall.SCReportForm - * @instance - */ - SCReportForm.prototype.ProfitCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCReportForm BetCoin. - * @member {number|Long} BetCoin - * @memberof gamehall.SCReportForm - * @instance - */ - SCReportForm.prototype.BetCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * SCReportForm FlowCoin. - * @member {number|Long} FlowCoin - * @memberof gamehall.SCReportForm - * @instance - */ - SCReportForm.prototype.FlowCoin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCReportForm instance using the specified properties. - * @function create - * @memberof gamehall.SCReportForm - * @static - * @param {gamehall.ISCReportForm=} [properties] Properties to set - * @returns {gamehall.SCReportForm} SCReportForm instance - */ - SCReportForm.create = function create(properties) { - return new SCReportForm(properties); - }; - - /** - * Encodes the specified SCReportForm message. Does not implicitly {@link gamehall.SCReportForm.verify|verify} messages. - * @function encode - * @memberof gamehall.SCReportForm - * @static - * @param {gamehall.ISCReportForm} message SCReportForm message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReportForm.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowType != null && Object.hasOwnProperty.call(message, "ShowType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowType); - if (message.ProfitCoin != null && Object.hasOwnProperty.call(message, "ProfitCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.ProfitCoin); - if (message.BetCoin != null && Object.hasOwnProperty.call(message, "BetCoin")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.BetCoin); - if (message.FlowCoin != null && Object.hasOwnProperty.call(message, "FlowCoin")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.FlowCoin); - return writer; - }; - - /** - * Encodes the specified SCReportForm message, length delimited. Does not implicitly {@link gamehall.SCReportForm.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCReportForm - * @static - * @param {gamehall.ISCReportForm} message SCReportForm message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReportForm.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCReportForm message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCReportForm - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCReportForm} SCReportForm - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReportForm.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCReportForm(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowType = reader.int32(); - break; - } - case 2: { - message.ProfitCoin = reader.int64(); - break; - } - case 3: { - message.BetCoin = reader.int64(); - break; - } - case 4: { - message.FlowCoin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCReportForm message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCReportForm - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCReportForm} SCReportForm - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReportForm.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCReportForm message. - * @function verify - * @memberof gamehall.SCReportForm - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCReportForm.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - if (!$util.isInteger(message.ShowType)) - return "ShowType: integer expected"; - if (message.ProfitCoin != null && message.hasOwnProperty("ProfitCoin")) - if (!$util.isInteger(message.ProfitCoin) && !(message.ProfitCoin && $util.isInteger(message.ProfitCoin.low) && $util.isInteger(message.ProfitCoin.high))) - return "ProfitCoin: integer|Long expected"; - if (message.BetCoin != null && message.hasOwnProperty("BetCoin")) - if (!$util.isInteger(message.BetCoin) && !(message.BetCoin && $util.isInteger(message.BetCoin.low) && $util.isInteger(message.BetCoin.high))) - return "BetCoin: integer|Long expected"; - if (message.FlowCoin != null && message.hasOwnProperty("FlowCoin")) - if (!$util.isInteger(message.FlowCoin) && !(message.FlowCoin && $util.isInteger(message.FlowCoin.low) && $util.isInteger(message.FlowCoin.high))) - return "FlowCoin: integer|Long expected"; - return null; - }; - - /** - * Creates a SCReportForm message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCReportForm - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCReportForm} SCReportForm - */ - SCReportForm.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCReportForm) - return object; - var message = new $root.gamehall.SCReportForm(); - if (object.ShowType != null) - message.ShowType = object.ShowType | 0; - if (object.ProfitCoin != null) - if ($util.Long) - (message.ProfitCoin = $util.Long.fromValue(object.ProfitCoin)).unsigned = false; - else if (typeof object.ProfitCoin === "string") - message.ProfitCoin = parseInt(object.ProfitCoin, 10); - else if (typeof object.ProfitCoin === "number") - message.ProfitCoin = object.ProfitCoin; - else if (typeof object.ProfitCoin === "object") - message.ProfitCoin = new $util.LongBits(object.ProfitCoin.low >>> 0, object.ProfitCoin.high >>> 0).toNumber(); - if (object.BetCoin != null) - if ($util.Long) - (message.BetCoin = $util.Long.fromValue(object.BetCoin)).unsigned = false; - else if (typeof object.BetCoin === "string") - message.BetCoin = parseInt(object.BetCoin, 10); - else if (typeof object.BetCoin === "number") - message.BetCoin = object.BetCoin; - else if (typeof object.BetCoin === "object") - message.BetCoin = new $util.LongBits(object.BetCoin.low >>> 0, object.BetCoin.high >>> 0).toNumber(); - if (object.FlowCoin != null) - if ($util.Long) - (message.FlowCoin = $util.Long.fromValue(object.FlowCoin)).unsigned = false; - else if (typeof object.FlowCoin === "string") - message.FlowCoin = parseInt(object.FlowCoin, 10); - else if (typeof object.FlowCoin === "number") - message.FlowCoin = object.FlowCoin; - else if (typeof object.FlowCoin === "object") - message.FlowCoin = new $util.LongBits(object.FlowCoin.low >>> 0, object.FlowCoin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCReportForm message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCReportForm - * @static - * @param {gamehall.SCReportForm} message SCReportForm - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCReportForm.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ShowType = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.ProfitCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.ProfitCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.BetCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.BetCoin = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.FlowCoin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.FlowCoin = options.longs === String ? "0" : 0; - } - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - object.ShowType = message.ShowType; - if (message.ProfitCoin != null && message.hasOwnProperty("ProfitCoin")) - if (typeof message.ProfitCoin === "number") - object.ProfitCoin = options.longs === String ? String(message.ProfitCoin) : message.ProfitCoin; - else - object.ProfitCoin = options.longs === String ? $util.Long.prototype.toString.call(message.ProfitCoin) : options.longs === Number ? new $util.LongBits(message.ProfitCoin.low >>> 0, message.ProfitCoin.high >>> 0).toNumber() : message.ProfitCoin; - if (message.BetCoin != null && message.hasOwnProperty("BetCoin")) - if (typeof message.BetCoin === "number") - object.BetCoin = options.longs === String ? String(message.BetCoin) : message.BetCoin; - else - object.BetCoin = options.longs === String ? $util.Long.prototype.toString.call(message.BetCoin) : options.longs === Number ? new $util.LongBits(message.BetCoin.low >>> 0, message.BetCoin.high >>> 0).toNumber() : message.BetCoin; - if (message.FlowCoin != null && message.hasOwnProperty("FlowCoin")) - if (typeof message.FlowCoin === "number") - object.FlowCoin = options.longs === String ? String(message.FlowCoin) : message.FlowCoin; - else - object.FlowCoin = options.longs === String ? $util.Long.prototype.toString.call(message.FlowCoin) : options.longs === Number ? new $util.LongBits(message.FlowCoin.low >>> 0, message.FlowCoin.high >>> 0).toNumber() : message.FlowCoin; - return object; - }; - - /** - * Converts this SCReportForm to JSON. - * @function toJSON - * @memberof gamehall.SCReportForm - * @instance - * @returns {Object.} JSON object - */ - SCReportForm.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCReportForm - * @function getTypeUrl - * @memberof gamehall.SCReportForm - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCReportForm.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCReportForm"; - }; - - return SCReportForm; - })(); - - gamehall.CSHistoryRecord = (function() { - - /** - * Properties of a CSHistoryRecord. - * @memberof gamehall - * @interface ICSHistoryRecord - * @property {number|null} [PageNo] CSHistoryRecord PageNo - */ - - /** - * Constructs a new CSHistoryRecord. - * @memberof gamehall - * @classdesc Represents a CSHistoryRecord. - * @implements ICSHistoryRecord - * @constructor - * @param {gamehall.ICSHistoryRecord=} [properties] Properties to set - */ - function CSHistoryRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSHistoryRecord PageNo. - * @member {number} PageNo - * @memberof gamehall.CSHistoryRecord - * @instance - */ - CSHistoryRecord.prototype.PageNo = 0; - - /** - * Creates a new CSHistoryRecord instance using the specified properties. - * @function create - * @memberof gamehall.CSHistoryRecord - * @static - * @param {gamehall.ICSHistoryRecord=} [properties] Properties to set - * @returns {gamehall.CSHistoryRecord} CSHistoryRecord instance - */ - CSHistoryRecord.create = function create(properties) { - return new CSHistoryRecord(properties); - }; - - /** - * Encodes the specified CSHistoryRecord message. Does not implicitly {@link gamehall.CSHistoryRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHistoryRecord - * @static - * @param {gamehall.ICSHistoryRecord} message CSHistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHistoryRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.PageNo); - return writer; - }; - - /** - * Encodes the specified CSHistoryRecord message, length delimited. Does not implicitly {@link gamehall.CSHistoryRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHistoryRecord - * @static - * @param {gamehall.ICSHistoryRecord} message CSHistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHistoryRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHistoryRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHistoryRecord} CSHistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHistoryRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHistoryRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.PageNo = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHistoryRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHistoryRecord} CSHistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHistoryRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHistoryRecord message. - * @function verify - * @memberof gamehall.CSHistoryRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHistoryRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - return null; - }; - - /** - * Creates a CSHistoryRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHistoryRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHistoryRecord} CSHistoryRecord - */ - CSHistoryRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHistoryRecord) - return object; - var message = new $root.gamehall.CSHistoryRecord(); - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - return message; - }; - - /** - * Creates a plain object from a CSHistoryRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHistoryRecord - * @static - * @param {gamehall.CSHistoryRecord} message CSHistoryRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHistoryRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.PageNo = 0; - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - return object; - }; - - /** - * Converts this CSHistoryRecord to JSON. - * @function toJSON - * @memberof gamehall.CSHistoryRecord - * @instance - * @returns {Object.} JSON object - */ - CSHistoryRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHistoryRecord - * @function getTypeUrl - * @memberof gamehall.CSHistoryRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHistoryRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHistoryRecord"; - }; - - return CSHistoryRecord; - })(); - - gamehall.HistoryRecord = (function() { - - /** - * Properties of a HistoryRecord. - * @memberof gamehall - * @interface IHistoryRecord - * @property {number|Long|null} [Ts] HistoryRecord Ts - * @property {number|null} [CodeCoin] HistoryRecord CodeCoin - * @property {number|null} [Coin] HistoryRecord Coin - * @property {number|null} [ReceiveType] HistoryRecord ReceiveType - */ - - /** - * Constructs a new HistoryRecord. - * @memberof gamehall - * @classdesc Represents a HistoryRecord. - * @implements IHistoryRecord - * @constructor - * @param {gamehall.IHistoryRecord=} [properties] Properties to set - */ - function HistoryRecord(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * HistoryRecord Ts. - * @member {number|Long} Ts - * @memberof gamehall.HistoryRecord - * @instance - */ - HistoryRecord.prototype.Ts = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * HistoryRecord CodeCoin. - * @member {number} CodeCoin - * @memberof gamehall.HistoryRecord - * @instance - */ - HistoryRecord.prototype.CodeCoin = 0; - - /** - * HistoryRecord Coin. - * @member {number} Coin - * @memberof gamehall.HistoryRecord - * @instance - */ - HistoryRecord.prototype.Coin = 0; - - /** - * HistoryRecord ReceiveType. - * @member {number} ReceiveType - * @memberof gamehall.HistoryRecord - * @instance - */ - HistoryRecord.prototype.ReceiveType = 0; - - /** - * Creates a new HistoryRecord instance using the specified properties. - * @function create - * @memberof gamehall.HistoryRecord - * @static - * @param {gamehall.IHistoryRecord=} [properties] Properties to set - * @returns {gamehall.HistoryRecord} HistoryRecord instance - */ - HistoryRecord.create = function create(properties) { - return new HistoryRecord(properties); - }; - - /** - * Encodes the specified HistoryRecord message. Does not implicitly {@link gamehall.HistoryRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.HistoryRecord - * @static - * @param {gamehall.IHistoryRecord} message HistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HistoryRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Ts != null && Object.hasOwnProperty.call(message, "Ts")) - writer.uint32(/* id 1, wireType 0 =*/8).int64(message.Ts); - if (message.CodeCoin != null && Object.hasOwnProperty.call(message, "CodeCoin")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.CodeCoin); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.Coin); - if (message.ReceiveType != null && Object.hasOwnProperty.call(message, "ReceiveType")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.ReceiveType); - return writer; - }; - - /** - * Encodes the specified HistoryRecord message, length delimited. Does not implicitly {@link gamehall.HistoryRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.HistoryRecord - * @static - * @param {gamehall.IHistoryRecord} message HistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - HistoryRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a HistoryRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.HistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.HistoryRecord} HistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HistoryRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.HistoryRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Ts = reader.int64(); - break; - } - case 2: { - message.CodeCoin = reader.int32(); - break; - } - case 3: { - message.Coin = reader.int32(); - break; - } - case 4: { - message.ReceiveType = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a HistoryRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.HistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.HistoryRecord} HistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - HistoryRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a HistoryRecord message. - * @function verify - * @memberof gamehall.HistoryRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - HistoryRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (!$util.isInteger(message.Ts) && !(message.Ts && $util.isInteger(message.Ts.low) && $util.isInteger(message.Ts.high))) - return "Ts: integer|Long expected"; - if (message.CodeCoin != null && message.hasOwnProperty("CodeCoin")) - if (!$util.isInteger(message.CodeCoin)) - return "CodeCoin: integer expected"; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin)) - return "Coin: integer expected"; - if (message.ReceiveType != null && message.hasOwnProperty("ReceiveType")) - if (!$util.isInteger(message.ReceiveType)) - return "ReceiveType: integer expected"; - return null; - }; - - /** - * Creates a HistoryRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.HistoryRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.HistoryRecord} HistoryRecord - */ - HistoryRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.HistoryRecord) - return object; - var message = new $root.gamehall.HistoryRecord(); - if (object.Ts != null) - if ($util.Long) - (message.Ts = $util.Long.fromValue(object.Ts)).unsigned = false; - else if (typeof object.Ts === "string") - message.Ts = parseInt(object.Ts, 10); - else if (typeof object.Ts === "number") - message.Ts = object.Ts; - else if (typeof object.Ts === "object") - message.Ts = new $util.LongBits(object.Ts.low >>> 0, object.Ts.high >>> 0).toNumber(); - if (object.CodeCoin != null) - message.CodeCoin = object.CodeCoin | 0; - if (object.Coin != null) - message.Coin = object.Coin | 0; - if (object.ReceiveType != null) - message.ReceiveType = object.ReceiveType | 0; - return message; - }; - - /** - * Creates a plain object from a HistoryRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.HistoryRecord - * @static - * @param {gamehall.HistoryRecord} message HistoryRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - HistoryRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Ts = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Ts = options.longs === String ? "0" : 0; - object.CodeCoin = 0; - object.Coin = 0; - object.ReceiveType = 0; - } - if (message.Ts != null && message.hasOwnProperty("Ts")) - if (typeof message.Ts === "number") - object.Ts = options.longs === String ? String(message.Ts) : message.Ts; - else - object.Ts = options.longs === String ? $util.Long.prototype.toString.call(message.Ts) : options.longs === Number ? new $util.LongBits(message.Ts.low >>> 0, message.Ts.high >>> 0).toNumber() : message.Ts; - if (message.CodeCoin != null && message.hasOwnProperty("CodeCoin")) - object.CodeCoin = message.CodeCoin; - if (message.Coin != null && message.hasOwnProperty("Coin")) - object.Coin = message.Coin; - if (message.ReceiveType != null && message.hasOwnProperty("ReceiveType")) - object.ReceiveType = message.ReceiveType; - return object; - }; - - /** - * Converts this HistoryRecord to JSON. - * @function toJSON - * @memberof gamehall.HistoryRecord - * @instance - * @returns {Object.} JSON object - */ - HistoryRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for HistoryRecord - * @function getTypeUrl - * @memberof gamehall.HistoryRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - HistoryRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.HistoryRecord"; - }; - - return HistoryRecord; - })(); - - gamehall.SCHistoryRecord = (function() { - - /** - * Properties of a SCHistoryRecord. - * @memberof gamehall - * @interface ISCHistoryRecord - * @property {Array.|null} [HistoryRecord] SCHistoryRecord HistoryRecord - * @property {number|null} [PageNo] SCHistoryRecord PageNo - * @property {number|null} [PageSize] SCHistoryRecord PageSize - * @property {number|null} [PageNum] SCHistoryRecord PageNum - */ - - /** - * Constructs a new SCHistoryRecord. - * @memberof gamehall - * @classdesc Represents a SCHistoryRecord. - * @implements ISCHistoryRecord - * @constructor - * @param {gamehall.ISCHistoryRecord=} [properties] Properties to set - */ - function SCHistoryRecord(properties) { - this.HistoryRecord = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCHistoryRecord HistoryRecord. - * @member {Array.} HistoryRecord - * @memberof gamehall.SCHistoryRecord - * @instance - */ - SCHistoryRecord.prototype.HistoryRecord = $util.emptyArray; - - /** - * SCHistoryRecord PageNo. - * @member {number} PageNo - * @memberof gamehall.SCHistoryRecord - * @instance - */ - SCHistoryRecord.prototype.PageNo = 0; - - /** - * SCHistoryRecord PageSize. - * @member {number} PageSize - * @memberof gamehall.SCHistoryRecord - * @instance - */ - SCHistoryRecord.prototype.PageSize = 0; - - /** - * SCHistoryRecord PageNum. - * @member {number} PageNum - * @memberof gamehall.SCHistoryRecord - * @instance - */ - SCHistoryRecord.prototype.PageNum = 0; - - /** - * Creates a new SCHistoryRecord instance using the specified properties. - * @function create - * @memberof gamehall.SCHistoryRecord - * @static - * @param {gamehall.ISCHistoryRecord=} [properties] Properties to set - * @returns {gamehall.SCHistoryRecord} SCHistoryRecord instance - */ - SCHistoryRecord.create = function create(properties) { - return new SCHistoryRecord(properties); - }; - - /** - * Encodes the specified SCHistoryRecord message. Does not implicitly {@link gamehall.SCHistoryRecord.verify|verify} messages. - * @function encode - * @memberof gamehall.SCHistoryRecord - * @static - * @param {gamehall.ISCHistoryRecord} message SCHistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHistoryRecord.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.HistoryRecord != null && message.HistoryRecord.length) - for (var i = 0; i < message.HistoryRecord.length; ++i) - $root.gamehall.HistoryRecord.encode(message.HistoryRecord[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.PageNo != null && Object.hasOwnProperty.call(message, "PageNo")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.PageNo); - if (message.PageSize != null && Object.hasOwnProperty.call(message, "PageSize")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.PageSize); - if (message.PageNum != null && Object.hasOwnProperty.call(message, "PageNum")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.PageNum); - return writer; - }; - - /** - * Encodes the specified SCHistoryRecord message, length delimited. Does not implicitly {@link gamehall.SCHistoryRecord.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCHistoryRecord - * @static - * @param {gamehall.ISCHistoryRecord} message SCHistoryRecord message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHistoryRecord.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCHistoryRecord message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCHistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCHistoryRecord} SCHistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHistoryRecord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCHistoryRecord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.HistoryRecord && message.HistoryRecord.length)) - message.HistoryRecord = []; - message.HistoryRecord.push($root.gamehall.HistoryRecord.decode(reader, reader.uint32())); - break; - } - case 2: { - message.PageNo = reader.int32(); - break; - } - case 3: { - message.PageSize = reader.int32(); - break; - } - case 4: { - message.PageNum = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCHistoryRecord message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCHistoryRecord - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCHistoryRecord} SCHistoryRecord - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHistoryRecord.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCHistoryRecord message. - * @function verify - * @memberof gamehall.SCHistoryRecord - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCHistoryRecord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.HistoryRecord != null && message.hasOwnProperty("HistoryRecord")) { - if (!Array.isArray(message.HistoryRecord)) - return "HistoryRecord: array expected"; - for (var i = 0; i < message.HistoryRecord.length; ++i) { - var error = $root.gamehall.HistoryRecord.verify(message.HistoryRecord[i]); - if (error) - return "HistoryRecord." + error; - } - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - if (!$util.isInteger(message.PageNo)) - return "PageNo: integer expected"; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - if (!$util.isInteger(message.PageSize)) - return "PageSize: integer expected"; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - if (!$util.isInteger(message.PageNum)) - return "PageNum: integer expected"; - return null; - }; - - /** - * Creates a SCHistoryRecord message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCHistoryRecord - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCHistoryRecord} SCHistoryRecord - */ - SCHistoryRecord.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCHistoryRecord) - return object; - var message = new $root.gamehall.SCHistoryRecord(); - if (object.HistoryRecord) { - if (!Array.isArray(object.HistoryRecord)) - throw TypeError(".gamehall.SCHistoryRecord.HistoryRecord: array expected"); - message.HistoryRecord = []; - for (var i = 0; i < object.HistoryRecord.length; ++i) { - if (typeof object.HistoryRecord[i] !== "object") - throw TypeError(".gamehall.SCHistoryRecord.HistoryRecord: object expected"); - message.HistoryRecord[i] = $root.gamehall.HistoryRecord.fromObject(object.HistoryRecord[i]); - } - } - if (object.PageNo != null) - message.PageNo = object.PageNo | 0; - if (object.PageSize != null) - message.PageSize = object.PageSize | 0; - if (object.PageNum != null) - message.PageNum = object.PageNum | 0; - return message; - }; - - /** - * Creates a plain object from a SCHistoryRecord message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCHistoryRecord - * @static - * @param {gamehall.SCHistoryRecord} message SCHistoryRecord - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCHistoryRecord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.HistoryRecord = []; - if (options.defaults) { - object.PageNo = 0; - object.PageSize = 0; - object.PageNum = 0; - } - if (message.HistoryRecord && message.HistoryRecord.length) { - object.HistoryRecord = []; - for (var j = 0; j < message.HistoryRecord.length; ++j) - object.HistoryRecord[j] = $root.gamehall.HistoryRecord.toObject(message.HistoryRecord[j], options); - } - if (message.PageNo != null && message.hasOwnProperty("PageNo")) - object.PageNo = message.PageNo; - if (message.PageSize != null && message.hasOwnProperty("PageSize")) - object.PageSize = message.PageSize; - if (message.PageNum != null && message.hasOwnProperty("PageNum")) - object.PageNum = message.PageNum; - return object; - }; - - /** - * Converts this SCHistoryRecord to JSON. - * @function toJSON - * @memberof gamehall.SCHistoryRecord - * @instance - * @returns {Object.} JSON object - */ - SCHistoryRecord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCHistoryRecord - * @function getTypeUrl - * @memberof gamehall.SCHistoryRecord - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCHistoryRecord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCHistoryRecord"; - }; - - return SCHistoryRecord; - })(); - - gamehall.CSReceiveCodeCoin = (function() { - - /** - * Properties of a CSReceiveCodeCoin. - * @memberof gamehall - * @interface ICSReceiveCodeCoin - */ - - /** - * Constructs a new CSReceiveCodeCoin. - * @memberof gamehall - * @classdesc Represents a CSReceiveCodeCoin. - * @implements ICSReceiveCodeCoin - * @constructor - * @param {gamehall.ICSReceiveCodeCoin=} [properties] Properties to set - */ - function CSReceiveCodeCoin(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSReceiveCodeCoin instance using the specified properties. - * @function create - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {gamehall.ICSReceiveCodeCoin=} [properties] Properties to set - * @returns {gamehall.CSReceiveCodeCoin} CSReceiveCodeCoin instance - */ - CSReceiveCodeCoin.create = function create(properties) { - return new CSReceiveCodeCoin(properties); - }; - - /** - * Encodes the specified CSReceiveCodeCoin message. Does not implicitly {@link gamehall.CSReceiveCodeCoin.verify|verify} messages. - * @function encode - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {gamehall.ICSReceiveCodeCoin} message CSReceiveCodeCoin message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReceiveCodeCoin.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSReceiveCodeCoin message, length delimited. Does not implicitly {@link gamehall.CSReceiveCodeCoin.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {gamehall.ICSReceiveCodeCoin} message CSReceiveCodeCoin message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSReceiveCodeCoin.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSReceiveCodeCoin message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSReceiveCodeCoin} CSReceiveCodeCoin - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReceiveCodeCoin.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSReceiveCodeCoin(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSReceiveCodeCoin message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSReceiveCodeCoin} CSReceiveCodeCoin - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSReceiveCodeCoin.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSReceiveCodeCoin message. - * @function verify - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSReceiveCodeCoin.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSReceiveCodeCoin message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSReceiveCodeCoin} CSReceiveCodeCoin - */ - CSReceiveCodeCoin.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSReceiveCodeCoin) - return object; - return new $root.gamehall.CSReceiveCodeCoin(); - }; - - /** - * Creates a plain object from a CSReceiveCodeCoin message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {gamehall.CSReceiveCodeCoin} message CSReceiveCodeCoin - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSReceiveCodeCoin.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSReceiveCodeCoin to JSON. - * @function toJSON - * @memberof gamehall.CSReceiveCodeCoin - * @instance - * @returns {Object.} JSON object - */ - CSReceiveCodeCoin.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSReceiveCodeCoin - * @function getTypeUrl - * @memberof gamehall.CSReceiveCodeCoin - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSReceiveCodeCoin.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSReceiveCodeCoin"; - }; - - return CSReceiveCodeCoin; - })(); - - gamehall.SCReceiveCodeCoin = (function() { - - /** - * Properties of a SCReceiveCodeCoin. - * @memberof gamehall - * @interface ISCReceiveCodeCoin - * @property {gamehall.OpResultCode_Hall|null} [OpRetCode] SCReceiveCodeCoin OpRetCode - * @property {number|Long|null} [Coin] SCReceiveCodeCoin Coin - */ - - /** - * Constructs a new SCReceiveCodeCoin. - * @memberof gamehall - * @classdesc Represents a SCReceiveCodeCoin. - * @implements ISCReceiveCodeCoin - * @constructor - * @param {gamehall.ISCReceiveCodeCoin=} [properties] Properties to set - */ - function SCReceiveCodeCoin(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCReceiveCodeCoin OpRetCode. - * @member {gamehall.OpResultCode_Hall} OpRetCode - * @memberof gamehall.SCReceiveCodeCoin - * @instance - */ - SCReceiveCodeCoin.prototype.OpRetCode = 0; - - /** - * SCReceiveCodeCoin Coin. - * @member {number|Long} Coin - * @memberof gamehall.SCReceiveCodeCoin - * @instance - */ - SCReceiveCodeCoin.prototype.Coin = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new SCReceiveCodeCoin instance using the specified properties. - * @function create - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {gamehall.ISCReceiveCodeCoin=} [properties] Properties to set - * @returns {gamehall.SCReceiveCodeCoin} SCReceiveCodeCoin instance - */ - SCReceiveCodeCoin.create = function create(properties) { - return new SCReceiveCodeCoin(properties); - }; - - /** - * Encodes the specified SCReceiveCodeCoin message. Does not implicitly {@link gamehall.SCReceiveCodeCoin.verify|verify} messages. - * @function encode - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {gamehall.ISCReceiveCodeCoin} message SCReceiveCodeCoin message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReceiveCodeCoin.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpRetCode != null && Object.hasOwnProperty.call(message, "OpRetCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpRetCode); - if (message.Coin != null && Object.hasOwnProperty.call(message, "Coin")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.Coin); - return writer; - }; - - /** - * Encodes the specified SCReceiveCodeCoin message, length delimited. Does not implicitly {@link gamehall.SCReceiveCodeCoin.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {gamehall.ISCReceiveCodeCoin} message SCReceiveCodeCoin message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCReceiveCodeCoin.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCReceiveCodeCoin message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCReceiveCodeCoin} SCReceiveCodeCoin - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReceiveCodeCoin.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCReceiveCodeCoin(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpRetCode = reader.int32(); - break; - } - case 2: { - message.Coin = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCReceiveCodeCoin message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCReceiveCodeCoin} SCReceiveCodeCoin - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCReceiveCodeCoin.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCReceiveCodeCoin message. - * @function verify - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCReceiveCodeCoin.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - switch (message.OpRetCode) { - default: - return "OpRetCode: enum value expected"; - case 0: - case 1: - case 10008: - break; - } - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (!$util.isInteger(message.Coin) && !(message.Coin && $util.isInteger(message.Coin.low) && $util.isInteger(message.Coin.high))) - return "Coin: integer|Long expected"; - return null; - }; - - /** - * Creates a SCReceiveCodeCoin message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCReceiveCodeCoin} SCReceiveCodeCoin - */ - SCReceiveCodeCoin.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCReceiveCodeCoin) - return object; - var message = new $root.gamehall.SCReceiveCodeCoin(); - switch (object.OpRetCode) { - default: - if (typeof object.OpRetCode === "number") { - message.OpRetCode = object.OpRetCode; - break; - } - break; - case "OPRC_Sucess_Hall": - case 0: - message.OpRetCode = 0; - break; - case "OPRC_Error_Hall": - case 1: - message.OpRetCode = 1; - break; - case "OPRC_OnlineReward_Info_FindPlatform_Fail_Hall": - case 10008: - message.OpRetCode = 10008; - break; - } - if (object.Coin != null) - if ($util.Long) - (message.Coin = $util.Long.fromValue(object.Coin)).unsigned = false; - else if (typeof object.Coin === "string") - message.Coin = parseInt(object.Coin, 10); - else if (typeof object.Coin === "number") - message.Coin = object.Coin; - else if (typeof object.Coin === "object") - message.Coin = new $util.LongBits(object.Coin.low >>> 0, object.Coin.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a SCReceiveCodeCoin message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {gamehall.SCReceiveCodeCoin} message SCReceiveCodeCoin - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCReceiveCodeCoin.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.OpRetCode = options.enums === String ? "OPRC_Sucess_Hall" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Coin = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Coin = options.longs === String ? "0" : 0; - } - if (message.OpRetCode != null && message.hasOwnProperty("OpRetCode")) - object.OpRetCode = options.enums === String ? $root.gamehall.OpResultCode_Hall[message.OpRetCode] === undefined ? message.OpRetCode : $root.gamehall.OpResultCode_Hall[message.OpRetCode] : message.OpRetCode; - if (message.Coin != null && message.hasOwnProperty("Coin")) - if (typeof message.Coin === "number") - object.Coin = options.longs === String ? String(message.Coin) : message.Coin; - else - object.Coin = options.longs === String ? $util.Long.prototype.toString.call(message.Coin) : options.longs === Number ? new $util.LongBits(message.Coin.low >>> 0, message.Coin.high >>> 0).toNumber() : message.Coin; - return object; - }; - - /** - * Converts this SCReceiveCodeCoin to JSON. - * @function toJSON - * @memberof gamehall.SCReceiveCodeCoin - * @instance - * @returns {Object.} JSON object - */ - SCReceiveCodeCoin.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCReceiveCodeCoin - * @function getTypeUrl - * @memberof gamehall.SCReceiveCodeCoin - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCReceiveCodeCoin.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCReceiveCodeCoin"; - }; - - return SCReceiveCodeCoin; - })(); - - gamehall.CSGetRankInfo = (function() { - - /** - * Properties of a CSGetRankInfo. - * @memberof gamehall - * @interface ICSGetRankInfo - * @property {string|null} [Plt] CSGetRankInfo Plt - * @property {number|null} [GameFreeId] CSGetRankInfo GameFreeId - */ - - /** - * Constructs a new CSGetRankInfo. - * @memberof gamehall - * @classdesc Represents a CSGetRankInfo. - * @implements ICSGetRankInfo - * @constructor - * @param {gamehall.ICSGetRankInfo=} [properties] Properties to set - */ - function CSGetRankInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSGetRankInfo Plt. - * @member {string} Plt - * @memberof gamehall.CSGetRankInfo - * @instance - */ - CSGetRankInfo.prototype.Plt = ""; - - /** - * CSGetRankInfo GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.CSGetRankInfo - * @instance - */ - CSGetRankInfo.prototype.GameFreeId = 0; - - /** - * Creates a new CSGetRankInfo instance using the specified properties. - * @function create - * @memberof gamehall.CSGetRankInfo - * @static - * @param {gamehall.ICSGetRankInfo=} [properties] Properties to set - * @returns {gamehall.CSGetRankInfo} CSGetRankInfo instance - */ - CSGetRankInfo.create = function create(properties) { - return new CSGetRankInfo(properties); - }; - - /** - * Encodes the specified CSGetRankInfo message. Does not implicitly {@link gamehall.CSGetRankInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.CSGetRankInfo - * @static - * @param {gamehall.ICSGetRankInfo} message CSGetRankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetRankInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Plt != null && Object.hasOwnProperty.call(message, "Plt")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.Plt); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameFreeId); - return writer; - }; - - /** - * Encodes the specified CSGetRankInfo message, length delimited. Does not implicitly {@link gamehall.CSGetRankInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSGetRankInfo - * @static - * @param {gamehall.ICSGetRankInfo} message CSGetRankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSGetRankInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSGetRankInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSGetRankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSGetRankInfo} CSGetRankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetRankInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSGetRankInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Plt = reader.string(); - break; - } - case 2: { - message.GameFreeId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSGetRankInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSGetRankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSGetRankInfo} CSGetRankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSGetRankInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSGetRankInfo message. - * @function verify - * @memberof gamehall.CSGetRankInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSGetRankInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Plt != null && message.hasOwnProperty("Plt")) - if (!$util.isString(message.Plt)) - return "Plt: string expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - return null; - }; - - /** - * Creates a CSGetRankInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSGetRankInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSGetRankInfo} CSGetRankInfo - */ - CSGetRankInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSGetRankInfo) - return object; - var message = new $root.gamehall.CSGetRankInfo(); - if (object.Plt != null) - message.Plt = String(object.Plt); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - return message; - }; - - /** - * Creates a plain object from a CSGetRankInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSGetRankInfo - * @static - * @param {gamehall.CSGetRankInfo} message CSGetRankInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSGetRankInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Plt = ""; - object.GameFreeId = 0; - } - if (message.Plt != null && message.hasOwnProperty("Plt")) - object.Plt = message.Plt; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - return object; - }; - - /** - * Converts this CSGetRankInfo to JSON. - * @function toJSON - * @memberof gamehall.CSGetRankInfo - * @instance - * @returns {Object.} JSON object - */ - CSGetRankInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSGetRankInfo - * @function getTypeUrl - * @memberof gamehall.CSGetRankInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSGetRankInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSGetRankInfo"; - }; - - return CSGetRankInfo; - })(); - - gamehall.RankInfo = (function() { - - /** - * Properties of a RankInfo. - * @memberof gamehall - * @interface IRankInfo - * @property {number|null} [Snid] RankInfo Snid - * @property {string|null} [Name] RankInfo Name - * @property {number|Long|null} [TotalIn] RankInfo TotalIn - * @property {number|Long|null} [TotalOut] RankInfo TotalOut - */ - - /** - * Constructs a new RankInfo. - * @memberof gamehall - * @classdesc Represents a RankInfo. - * @implements IRankInfo - * @constructor - * @param {gamehall.IRankInfo=} [properties] Properties to set - */ - function RankInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * RankInfo Snid. - * @member {number} Snid - * @memberof gamehall.RankInfo - * @instance - */ - RankInfo.prototype.Snid = 0; - - /** - * RankInfo Name. - * @member {string} Name - * @memberof gamehall.RankInfo - * @instance - */ - RankInfo.prototype.Name = ""; - - /** - * RankInfo TotalIn. - * @member {number|Long} TotalIn - * @memberof gamehall.RankInfo - * @instance - */ - RankInfo.prototype.TotalIn = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * RankInfo TotalOut. - * @member {number|Long} TotalOut - * @memberof gamehall.RankInfo - * @instance - */ - RankInfo.prototype.TotalOut = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new RankInfo instance using the specified properties. - * @function create - * @memberof gamehall.RankInfo - * @static - * @param {gamehall.IRankInfo=} [properties] Properties to set - * @returns {gamehall.RankInfo} RankInfo instance - */ - RankInfo.create = function create(properties) { - return new RankInfo(properties); - }; - - /** - * Encodes the specified RankInfo message. Does not implicitly {@link gamehall.RankInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.RankInfo - * @static - * @param {gamehall.IRankInfo} message RankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RankInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Snid != null && Object.hasOwnProperty.call(message, "Snid")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Snid); - if (message.Name != null && Object.hasOwnProperty.call(message, "Name")) - writer.uint32(/* id 2, wireType 2 =*/18).string(message.Name); - if (message.TotalIn != null && Object.hasOwnProperty.call(message, "TotalIn")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.TotalIn); - if (message.TotalOut != null && Object.hasOwnProperty.call(message, "TotalOut")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.TotalOut); - return writer; - }; - - /** - * Encodes the specified RankInfo message, length delimited. Does not implicitly {@link gamehall.RankInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.RankInfo - * @static - * @param {gamehall.IRankInfo} message RankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - RankInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a RankInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.RankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.RankInfo} RankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RankInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.RankInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Snid = reader.int32(); - break; - } - case 2: { - message.Name = reader.string(); - break; - } - case 3: { - message.TotalIn = reader.int64(); - break; - } - case 4: { - message.TotalOut = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a RankInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.RankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.RankInfo} RankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - RankInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a RankInfo message. - * @function verify - * @memberof gamehall.RankInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - RankInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Snid != null && message.hasOwnProperty("Snid")) - if (!$util.isInteger(message.Snid)) - return "Snid: integer expected"; - if (message.Name != null && message.hasOwnProperty("Name")) - if (!$util.isString(message.Name)) - return "Name: string expected"; - if (message.TotalIn != null && message.hasOwnProperty("TotalIn")) - if (!$util.isInteger(message.TotalIn) && !(message.TotalIn && $util.isInteger(message.TotalIn.low) && $util.isInteger(message.TotalIn.high))) - return "TotalIn: integer|Long expected"; - if (message.TotalOut != null && message.hasOwnProperty("TotalOut")) - if (!$util.isInteger(message.TotalOut) && !(message.TotalOut && $util.isInteger(message.TotalOut.low) && $util.isInteger(message.TotalOut.high))) - return "TotalOut: integer|Long expected"; - return null; - }; - - /** - * Creates a RankInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.RankInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.RankInfo} RankInfo - */ - RankInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.RankInfo) - return object; - var message = new $root.gamehall.RankInfo(); - if (object.Snid != null) - message.Snid = object.Snid | 0; - if (object.Name != null) - message.Name = String(object.Name); - if (object.TotalIn != null) - if ($util.Long) - (message.TotalIn = $util.Long.fromValue(object.TotalIn)).unsigned = false; - else if (typeof object.TotalIn === "string") - message.TotalIn = parseInt(object.TotalIn, 10); - else if (typeof object.TotalIn === "number") - message.TotalIn = object.TotalIn; - else if (typeof object.TotalIn === "object") - message.TotalIn = new $util.LongBits(object.TotalIn.low >>> 0, object.TotalIn.high >>> 0).toNumber(); - if (object.TotalOut != null) - if ($util.Long) - (message.TotalOut = $util.Long.fromValue(object.TotalOut)).unsigned = false; - else if (typeof object.TotalOut === "string") - message.TotalOut = parseInt(object.TotalOut, 10); - else if (typeof object.TotalOut === "number") - message.TotalOut = object.TotalOut; - else if (typeof object.TotalOut === "object") - message.TotalOut = new $util.LongBits(object.TotalOut.low >>> 0, object.TotalOut.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a RankInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.RankInfo - * @static - * @param {gamehall.RankInfo} message RankInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - RankInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.Snid = 0; - object.Name = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalIn = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalIn = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalOut = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalOut = options.longs === String ? "0" : 0; - } - if (message.Snid != null && message.hasOwnProperty("Snid")) - object.Snid = message.Snid; - if (message.Name != null && message.hasOwnProperty("Name")) - object.Name = message.Name; - if (message.TotalIn != null && message.hasOwnProperty("TotalIn")) - if (typeof message.TotalIn === "number") - object.TotalIn = options.longs === String ? String(message.TotalIn) : message.TotalIn; - else - object.TotalIn = options.longs === String ? $util.Long.prototype.toString.call(message.TotalIn) : options.longs === Number ? new $util.LongBits(message.TotalIn.low >>> 0, message.TotalIn.high >>> 0).toNumber() : message.TotalIn; - if (message.TotalOut != null && message.hasOwnProperty("TotalOut")) - if (typeof message.TotalOut === "number") - object.TotalOut = options.longs === String ? String(message.TotalOut) : message.TotalOut; - else - object.TotalOut = options.longs === String ? $util.Long.prototype.toString.call(message.TotalOut) : options.longs === Number ? new $util.LongBits(message.TotalOut.low >>> 0, message.TotalOut.high >>> 0).toNumber() : message.TotalOut; - return object; - }; - - /** - * Converts this RankInfo to JSON. - * @function toJSON - * @memberof gamehall.RankInfo - * @instance - * @returns {Object.} JSON object - */ - RankInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for RankInfo - * @function getTypeUrl - * @memberof gamehall.RankInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - RankInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.RankInfo"; - }; - - return RankInfo; - })(); - - gamehall.SCGetRankInfo = (function() { - - /** - * Properties of a SCGetRankInfo. - * @memberof gamehall - * @interface ISCGetRankInfo - * @property {Array.|null} [Info] SCGetRankInfo Info - */ - - /** - * Constructs a new SCGetRankInfo. - * @memberof gamehall - * @classdesc Represents a SCGetRankInfo. - * @implements ISCGetRankInfo - * @constructor - * @param {gamehall.ISCGetRankInfo=} [properties] Properties to set - */ - function SCGetRankInfo(properties) { - this.Info = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCGetRankInfo Info. - * @member {Array.} Info - * @memberof gamehall.SCGetRankInfo - * @instance - */ - SCGetRankInfo.prototype.Info = $util.emptyArray; - - /** - * Creates a new SCGetRankInfo instance using the specified properties. - * @function create - * @memberof gamehall.SCGetRankInfo - * @static - * @param {gamehall.ISCGetRankInfo=} [properties] Properties to set - * @returns {gamehall.SCGetRankInfo} SCGetRankInfo instance - */ - SCGetRankInfo.create = function create(properties) { - return new SCGetRankInfo(properties); - }; - - /** - * Encodes the specified SCGetRankInfo message. Does not implicitly {@link gamehall.SCGetRankInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.SCGetRankInfo - * @static - * @param {gamehall.ISCGetRankInfo} message SCGetRankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetRankInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Info != null && message.Info.length) - for (var i = 0; i < message.Info.length; ++i) - $root.gamehall.RankInfo.encode(message.Info[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCGetRankInfo message, length delimited. Does not implicitly {@link gamehall.SCGetRankInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCGetRankInfo - * @static - * @param {gamehall.ISCGetRankInfo} message SCGetRankInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCGetRankInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCGetRankInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCGetRankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCGetRankInfo} SCGetRankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetRankInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCGetRankInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Info && message.Info.length)) - message.Info = []; - message.Info.push($root.gamehall.RankInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCGetRankInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCGetRankInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCGetRankInfo} SCGetRankInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCGetRankInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCGetRankInfo message. - * @function verify - * @memberof gamehall.SCGetRankInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCGetRankInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Info != null && message.hasOwnProperty("Info")) { - if (!Array.isArray(message.Info)) - return "Info: array expected"; - for (var i = 0; i < message.Info.length; ++i) { - var error = $root.gamehall.RankInfo.verify(message.Info[i]); - if (error) - return "Info." + error; - } - } - return null; - }; - - /** - * Creates a SCGetRankInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCGetRankInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCGetRankInfo} SCGetRankInfo - */ - SCGetRankInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCGetRankInfo) - return object; - var message = new $root.gamehall.SCGetRankInfo(); - if (object.Info) { - if (!Array.isArray(object.Info)) - throw TypeError(".gamehall.SCGetRankInfo.Info: array expected"); - message.Info = []; - for (var i = 0; i < object.Info.length; ++i) { - if (typeof object.Info[i] !== "object") - throw TypeError(".gamehall.SCGetRankInfo.Info: object expected"); - message.Info[i] = $root.gamehall.RankInfo.fromObject(object.Info[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCGetRankInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCGetRankInfo - * @static - * @param {gamehall.SCGetRankInfo} message SCGetRankInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCGetRankInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Info = []; - if (message.Info && message.Info.length) { - object.Info = []; - for (var j = 0; j < message.Info.length; ++j) - object.Info[j] = $root.gamehall.RankInfo.toObject(message.Info[j], options); - } - return object; - }; - - /** - * Converts this SCGetRankInfo to JSON. - * @function toJSON - * @memberof gamehall.SCGetRankInfo - * @instance - * @returns {Object.} JSON object - */ - SCGetRankInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCGetRankInfo - * @function getTypeUrl - * @memberof gamehall.SCGetRankInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCGetRankInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCGetRankInfo"; - }; - - return SCGetRankInfo; - })(); - - /** - * ShowRedCode enum. - * @name gamehall.ShowRedCode - * @enum {number} - * @property {number} Mail=0 Mail value - * @property {number} Shop=1 Shop value - * @property {number} Role=2 Role value - * @property {number} Pet=3 Pet value - * @property {number} Welfare=4 Welfare value - */ - gamehall.ShowRedCode = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "Mail"] = 0; - values[valuesById[1] = "Shop"] = 1; - values[valuesById[2] = "Role"] = 2; - values[valuesById[3] = "Pet"] = 3; - values[valuesById[4] = "Welfare"] = 4; - return values; - })(); - - gamehall.ShowRed = (function() { - - /** - * Properties of a ShowRed. - * @memberof gamehall - * @interface IShowRed - * @property {gamehall.ShowRedCode|null} [ShowType] ShowRed ShowType - * @property {number|null} [ShowChild] ShowRed ShowChild - * @property {number|null} [IsShow] ShowRed IsShow - */ - - /** - * Constructs a new ShowRed. - * @memberof gamehall - * @classdesc Represents a ShowRed. - * @implements IShowRed - * @constructor - * @param {gamehall.IShowRed=} [properties] Properties to set - */ - function ShowRed(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * ShowRed ShowType. - * @member {gamehall.ShowRedCode} ShowType - * @memberof gamehall.ShowRed - * @instance - */ - ShowRed.prototype.ShowType = 0; - - /** - * ShowRed ShowChild. - * @member {number} ShowChild - * @memberof gamehall.ShowRed - * @instance - */ - ShowRed.prototype.ShowChild = 0; - - /** - * ShowRed IsShow. - * @member {number} IsShow - * @memberof gamehall.ShowRed - * @instance - */ - ShowRed.prototype.IsShow = 0; - - /** - * Creates a new ShowRed instance using the specified properties. - * @function create - * @memberof gamehall.ShowRed - * @static - * @param {gamehall.IShowRed=} [properties] Properties to set - * @returns {gamehall.ShowRed} ShowRed instance - */ - ShowRed.create = function create(properties) { - return new ShowRed(properties); - }; - - /** - * Encodes the specified ShowRed message. Does not implicitly {@link gamehall.ShowRed.verify|verify} messages. - * @function encode - * @memberof gamehall.ShowRed - * @static - * @param {gamehall.IShowRed} message ShowRed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ShowRed.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowType != null && Object.hasOwnProperty.call(message, "ShowType")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.ShowType); - if (message.ShowChild != null && Object.hasOwnProperty.call(message, "ShowChild")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.ShowChild); - if (message.IsShow != null && Object.hasOwnProperty.call(message, "IsShow")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.IsShow); - return writer; - }; - - /** - * Encodes the specified ShowRed message, length delimited. Does not implicitly {@link gamehall.ShowRed.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.ShowRed - * @static - * @param {gamehall.IShowRed} message ShowRed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - ShowRed.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a ShowRed message from the specified reader or buffer. - * @function decode - * @memberof gamehall.ShowRed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.ShowRed} ShowRed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ShowRed.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.ShowRed(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowType = reader.int32(); - break; - } - case 2: { - message.ShowChild = reader.int32(); - break; - } - case 3: { - message.IsShow = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a ShowRed message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.ShowRed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.ShowRed} ShowRed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - ShowRed.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a ShowRed message. - * @function verify - * @memberof gamehall.ShowRed - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - ShowRed.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - switch (message.ShowType) { - default: - return "ShowType: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - break; - } - if (message.ShowChild != null && message.hasOwnProperty("ShowChild")) - if (!$util.isInteger(message.ShowChild)) - return "ShowChild: integer expected"; - if (message.IsShow != null && message.hasOwnProperty("IsShow")) - if (!$util.isInteger(message.IsShow)) - return "IsShow: integer expected"; - return null; - }; - - /** - * Creates a ShowRed message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.ShowRed - * @static - * @param {Object.} object Plain object - * @returns {gamehall.ShowRed} ShowRed - */ - ShowRed.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.ShowRed) - return object; - var message = new $root.gamehall.ShowRed(); - switch (object.ShowType) { - default: - if (typeof object.ShowType === "number") { - message.ShowType = object.ShowType; - break; - } - break; - case "Mail": - case 0: - message.ShowType = 0; - break; - case "Shop": - case 1: - message.ShowType = 1; - break; - case "Role": - case 2: - message.ShowType = 2; - break; - case "Pet": - case 3: - message.ShowType = 3; - break; - case "Welfare": - case 4: - message.ShowType = 4; - break; - } - if (object.ShowChild != null) - message.ShowChild = object.ShowChild | 0; - if (object.IsShow != null) - message.IsShow = object.IsShow | 0; - return message; - }; - - /** - * Creates a plain object from a ShowRed message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.ShowRed - * @static - * @param {gamehall.ShowRed} message ShowRed - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - ShowRed.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.ShowType = options.enums === String ? "Mail" : 0; - object.ShowChild = 0; - object.IsShow = 0; - } - if (message.ShowType != null && message.hasOwnProperty("ShowType")) - object.ShowType = options.enums === String ? $root.gamehall.ShowRedCode[message.ShowType] === undefined ? message.ShowType : $root.gamehall.ShowRedCode[message.ShowType] : message.ShowType; - if (message.ShowChild != null && message.hasOwnProperty("ShowChild")) - object.ShowChild = message.ShowChild; - if (message.IsShow != null && message.hasOwnProperty("IsShow")) - object.IsShow = message.IsShow; - return object; - }; - - /** - * Converts this ShowRed to JSON. - * @function toJSON - * @memberof gamehall.ShowRed - * @instance - * @returns {Object.} JSON object - */ - ShowRed.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for ShowRed - * @function getTypeUrl - * @memberof gamehall.ShowRed - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - ShowRed.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.ShowRed"; - }; - - return ShowRed; - })(); - - gamehall.SCShowRed = (function() { - - /** - * Properties of a SCShowRed. - * @memberof gamehall - * @interface ISCShowRed - * @property {gamehall.IShowRed|null} [ShowRed] SCShowRed ShowRed - */ - - /** - * Constructs a new SCShowRed. - * @memberof gamehall - * @classdesc Represents a SCShowRed. - * @implements ISCShowRed - * @constructor - * @param {gamehall.ISCShowRed=} [properties] Properties to set - */ - function SCShowRed(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCShowRed ShowRed. - * @member {gamehall.IShowRed|null|undefined} ShowRed - * @memberof gamehall.SCShowRed - * @instance - */ - SCShowRed.prototype.ShowRed = null; - - /** - * Creates a new SCShowRed instance using the specified properties. - * @function create - * @memberof gamehall.SCShowRed - * @static - * @param {gamehall.ISCShowRed=} [properties] Properties to set - * @returns {gamehall.SCShowRed} SCShowRed instance - */ - SCShowRed.create = function create(properties) { - return new SCShowRed(properties); - }; - - /** - * Encodes the specified SCShowRed message. Does not implicitly {@link gamehall.SCShowRed.verify|verify} messages. - * @function encode - * @memberof gamehall.SCShowRed - * @static - * @param {gamehall.ISCShowRed} message SCShowRed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShowRed.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.ShowRed != null && Object.hasOwnProperty.call(message, "ShowRed")) - $root.gamehall.ShowRed.encode(message.ShowRed, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCShowRed message, length delimited. Does not implicitly {@link gamehall.SCShowRed.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCShowRed - * @static - * @param {gamehall.ISCShowRed} message SCShowRed message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCShowRed.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCShowRed message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCShowRed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCShowRed} SCShowRed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShowRed.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCShowRed(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.ShowRed = $root.gamehall.ShowRed.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCShowRed message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCShowRed - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCShowRed} SCShowRed - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCShowRed.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCShowRed message. - * @function verify - * @memberof gamehall.SCShowRed - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCShowRed.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.ShowRed != null && message.hasOwnProperty("ShowRed")) { - var error = $root.gamehall.ShowRed.verify(message.ShowRed); - if (error) - return "ShowRed." + error; - } - return null; - }; - - /** - * Creates a SCShowRed message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCShowRed - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCShowRed} SCShowRed - */ - SCShowRed.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCShowRed) - return object; - var message = new $root.gamehall.SCShowRed(); - if (object.ShowRed != null) { - if (typeof object.ShowRed !== "object") - throw TypeError(".gamehall.SCShowRed.ShowRed: object expected"); - message.ShowRed = $root.gamehall.ShowRed.fromObject(object.ShowRed); - } - return message; - }; - - /** - * Creates a plain object from a SCShowRed message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCShowRed - * @static - * @param {gamehall.SCShowRed} message SCShowRed - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCShowRed.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.ShowRed = null; - if (message.ShowRed != null && message.hasOwnProperty("ShowRed")) - object.ShowRed = $root.gamehall.ShowRed.toObject(message.ShowRed, options); - return object; - }; - - /** - * Converts this SCShowRed to JSON. - * @function toJSON - * @memberof gamehall.SCShowRed - * @instance - * @returns {Object.} JSON object - */ - SCShowRed.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCShowRed - * @function getTypeUrl - * @memberof gamehall.SCShowRed - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCShowRed.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCShowRed"; - }; - - return SCShowRed; - })(); - - /** - * OpResultCode_Hundred enum. - * @name gamehall.OpResultCode_Hundred - * @enum {number} - * @property {number} OPRC_Sucess_Hundred=0 OPRC_Sucess_Hundred value - * @property {number} OPRC_Error_Hundred=1 OPRC_Error_Hundred value - * @property {number} OPRC_YourResVerIsLow_Hundred=1044 OPRC_YourResVerIsLow_Hundred value - * @property {number} OPRC_YourAppVerIsLow_Hundred=1045 OPRC_YourAppVerIsLow_Hundred value - * @property {number} OPRC_RoomHadClosed_Hundred=1053 OPRC_RoomHadClosed_Hundred value - * @property {number} OPRC_SceneServerMaintain_Hundred=1054 OPRC_SceneServerMaintain_Hundred value - * @property {number} OPRC_CoinNotEnough_Hundred=1056 OPRC_CoinNotEnough_Hundred value - * @property {number} OPRC_CoinTooMore_Hundred=1058 OPRC_CoinTooMore_Hundred value - * @property {number} OPRC_RoomGameTimes_Hundred=1103 OPRC_RoomGameTimes_Hundred value - * @property {number} OPRC_MustBindPromoter_Hundred=1113 OPRC_MustBindPromoter_Hundred value - */ - gamehall.OpResultCode_Hundred = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "OPRC_Sucess_Hundred"] = 0; - values[valuesById[1] = "OPRC_Error_Hundred"] = 1; - values[valuesById[1044] = "OPRC_YourResVerIsLow_Hundred"] = 1044; - values[valuesById[1045] = "OPRC_YourAppVerIsLow_Hundred"] = 1045; - values[valuesById[1053] = "OPRC_RoomHadClosed_Hundred"] = 1053; - values[valuesById[1054] = "OPRC_SceneServerMaintain_Hundred"] = 1054; - values[valuesById[1056] = "OPRC_CoinNotEnough_Hundred"] = 1056; - values[valuesById[1058] = "OPRC_CoinTooMore_Hundred"] = 1058; - values[valuesById[1103] = "OPRC_RoomGameTimes_Hundred"] = 1103; - values[valuesById[1113] = "OPRC_MustBindPromoter_Hundred"] = 1113; - return values; - })(); - - /** - * HundredScenePacketID enum. - * @name gamehall.HundredScenePacketID - * @enum {number} - * @property {number} PACKET_HundredScene_ZERO=0 PACKET_HundredScene_ZERO value - * @property {number} PACKET_CS_HUNDREDSCENE_OP=2380 PACKET_CS_HUNDREDSCENE_OP value - * @property {number} PACKET_SC_HUNDREDSCENE_OP=2381 PACKET_SC_HUNDREDSCENE_OP value - * @property {number} PACKET_CS_HUNDREDSCENE_GETPLAYERNUM=2382 PACKET_CS_HUNDREDSCENE_GETPLAYERNUM value - * @property {number} PACKET_SC_HUNDREDSCENE_GETPLAYERNUM=2383 PACKET_SC_HUNDREDSCENE_GETPLAYERNUM value - * @property {number} PACKET_CS_GAMEJACKPOT=2384 PACKET_CS_GAMEJACKPOT value - * @property {number} PACKET_SC_GAMEJACKPOT=2385 PACKET_SC_GAMEJACKPOT value - * @property {number} PACKET_CS_GAMEHISTORYINFO=2386 PACKET_CS_GAMEHISTORYINFO value - * @property {number} PACKET_SC_GAMEPLAYERHISTORY=2387 PACKET_SC_GAMEPLAYERHISTORY value - * @property {number} PACKET_SC_GAMEBIGWINHISTORY=2388 PACKET_SC_GAMEBIGWINHISTORY value - * @property {number} PACKET_BD_GAMEJACKPOT=2389 PACKET_BD_GAMEJACKPOT value - */ - gamehall.HundredScenePacketID = (function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "PACKET_HundredScene_ZERO"] = 0; - values[valuesById[2380] = "PACKET_CS_HUNDREDSCENE_OP"] = 2380; - values[valuesById[2381] = "PACKET_SC_HUNDREDSCENE_OP"] = 2381; - values[valuesById[2382] = "PACKET_CS_HUNDREDSCENE_GETPLAYERNUM"] = 2382; - values[valuesById[2383] = "PACKET_SC_HUNDREDSCENE_GETPLAYERNUM"] = 2383; - values[valuesById[2384] = "PACKET_CS_GAMEJACKPOT"] = 2384; - values[valuesById[2385] = "PACKET_SC_GAMEJACKPOT"] = 2385; - values[valuesById[2386] = "PACKET_CS_GAMEHISTORYINFO"] = 2386; - values[valuesById[2387] = "PACKET_SC_GAMEPLAYERHISTORY"] = 2387; - values[valuesById[2388] = "PACKET_SC_GAMEBIGWINHISTORY"] = 2388; - values[valuesById[2389] = "PACKET_BD_GAMEJACKPOT"] = 2389; - return values; - })(); - - gamehall.CSHundredSceneOp = (function() { - - /** - * Properties of a CSHundredSceneOp. - * @memberof gamehall - * @interface ICSHundredSceneOp - * @property {number|null} [Id] CSHundredSceneOp Id - * @property {number|null} [OpType] CSHundredSceneOp OpType - * @property {Array.|null} [OpParams] CSHundredSceneOp OpParams - * @property {number|null} [ApkVer] CSHundredSceneOp ApkVer - * @property {number|null} [ResVer] CSHundredSceneOp ResVer - */ - - /** - * Constructs a new CSHundredSceneOp. - * @memberof gamehall - * @classdesc Represents a CSHundredSceneOp. - * @implements ICSHundredSceneOp - * @constructor - * @param {gamehall.ICSHundredSceneOp=} [properties] Properties to set - */ - function CSHundredSceneOp(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSHundredSceneOp Id. - * @member {number} Id - * @memberof gamehall.CSHundredSceneOp - * @instance - */ - CSHundredSceneOp.prototype.Id = 0; - - /** - * CSHundredSceneOp OpType. - * @member {number} OpType - * @memberof gamehall.CSHundredSceneOp - * @instance - */ - CSHundredSceneOp.prototype.OpType = 0; - - /** - * CSHundredSceneOp OpParams. - * @member {Array.} OpParams - * @memberof gamehall.CSHundredSceneOp - * @instance - */ - CSHundredSceneOp.prototype.OpParams = $util.emptyArray; - - /** - * CSHundredSceneOp ApkVer. - * @member {number} ApkVer - * @memberof gamehall.CSHundredSceneOp - * @instance - */ - CSHundredSceneOp.prototype.ApkVer = 0; - - /** - * CSHundredSceneOp ResVer. - * @member {number} ResVer - * @memberof gamehall.CSHundredSceneOp - * @instance - */ - CSHundredSceneOp.prototype.ResVer = 0; - - /** - * Creates a new CSHundredSceneOp instance using the specified properties. - * @function create - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {gamehall.ICSHundredSceneOp=} [properties] Properties to set - * @returns {gamehall.CSHundredSceneOp} CSHundredSceneOp instance - */ - CSHundredSceneOp.create = function create(properties) { - return new CSHundredSceneOp(properties); - }; - - /** - * Encodes the specified CSHundredSceneOp message. Does not implicitly {@link gamehall.CSHundredSceneOp.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {gamehall.ICSHundredSceneOp} message CSHundredSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneOp.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.Id); - if (message.OpType != null && Object.hasOwnProperty.call(message, "OpType")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.OpType); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 3, wireType 2 =*/26).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - if (message.ApkVer != null && Object.hasOwnProperty.call(message, "ApkVer")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.ApkVer); - if (message.ResVer != null && Object.hasOwnProperty.call(message, "ResVer")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.ResVer); - return writer; - }; - - /** - * Encodes the specified CSHundredSceneOp message, length delimited. Does not implicitly {@link gamehall.CSHundredSceneOp.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {gamehall.ICSHundredSceneOp} message CSHundredSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneOp.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHundredSceneOp message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHundredSceneOp} CSHundredSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneOp.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHundredSceneOp(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.Id = reader.int32(); - break; - } - case 2: { - message.OpType = reader.int32(); - break; - } - case 3: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - case 4: { - message.ApkVer = reader.int32(); - break; - } - case 5: { - message.ResVer = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHundredSceneOp message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHundredSceneOp} CSHundredSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneOp.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHundredSceneOp message. - * @function verify - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHundredSceneOp.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpType != null && message.hasOwnProperty("OpType")) - if (!$util.isInteger(message.OpType)) - return "OpType: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - if (!$util.isInteger(message.ApkVer)) - return "ApkVer: integer expected"; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - if (!$util.isInteger(message.ResVer)) - return "ResVer: integer expected"; - return null; - }; - - /** - * Creates a CSHundredSceneOp message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHundredSceneOp} CSHundredSceneOp - */ - CSHundredSceneOp.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHundredSceneOp) - return object; - var message = new $root.gamehall.CSHundredSceneOp(); - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpType != null) - message.OpType = object.OpType | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.CSHundredSceneOp.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - if (object.ApkVer != null) - message.ApkVer = object.ApkVer | 0; - if (object.ResVer != null) - message.ResVer = object.ResVer | 0; - return message; - }; - - /** - * Creates a plain object from a CSHundredSceneOp message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {gamehall.CSHundredSceneOp} message CSHundredSceneOp - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHundredSceneOp.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.Id = 0; - object.OpType = 0; - object.ApkVer = 0; - object.ResVer = 0; - } - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpType != null && message.hasOwnProperty("OpType")) - object.OpType = message.OpType; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - if (message.ApkVer != null && message.hasOwnProperty("ApkVer")) - object.ApkVer = message.ApkVer; - if (message.ResVer != null && message.hasOwnProperty("ResVer")) - object.ResVer = message.ResVer; - return object; - }; - - /** - * Converts this CSHundredSceneOp to JSON. - * @function toJSON - * @memberof gamehall.CSHundredSceneOp - * @instance - * @returns {Object.} JSON object - */ - CSHundredSceneOp.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHundredSceneOp - * @function getTypeUrl - * @memberof gamehall.CSHundredSceneOp - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHundredSceneOp.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHundredSceneOp"; - }; - - return CSHundredSceneOp; - })(); - - gamehall.SCHundredSceneOp = (function() { - - /** - * Properties of a SCHundredSceneOp. - * @memberof gamehall - * @interface ISCHundredSceneOp - * @property {gamehall.OpResultCode_Hundred|null} [OpCode] SCHundredSceneOp OpCode - * @property {number|null} [Id] SCHundredSceneOp Id - * @property {number|null} [OpType] SCHundredSceneOp OpType - * @property {Array.|null} [OpParams] SCHundredSceneOp OpParams - * @property {number|null} [MinApkVer] SCHundredSceneOp MinApkVer - * @property {number|null} [LatestApkVer] SCHundredSceneOp LatestApkVer - * @property {number|null} [MinResVer] SCHundredSceneOp MinResVer - * @property {number|null} [LatestResVer] SCHundredSceneOp LatestResVer - */ - - /** - * Constructs a new SCHundredSceneOp. - * @memberof gamehall - * @classdesc Represents a SCHundredSceneOp. - * @implements ISCHundredSceneOp - * @constructor - * @param {gamehall.ISCHundredSceneOp=} [properties] Properties to set - */ - function SCHundredSceneOp(properties) { - this.OpParams = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCHundredSceneOp OpCode. - * @member {gamehall.OpResultCode_Hundred} OpCode - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.OpCode = 0; - - /** - * SCHundredSceneOp Id. - * @member {number} Id - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.Id = 0; - - /** - * SCHundredSceneOp OpType. - * @member {number} OpType - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.OpType = 0; - - /** - * SCHundredSceneOp OpParams. - * @member {Array.} OpParams - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.OpParams = $util.emptyArray; - - /** - * SCHundredSceneOp MinApkVer. - * @member {number} MinApkVer - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.MinApkVer = 0; - - /** - * SCHundredSceneOp LatestApkVer. - * @member {number} LatestApkVer - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.LatestApkVer = 0; - - /** - * SCHundredSceneOp MinResVer. - * @member {number} MinResVer - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.MinResVer = 0; - - /** - * SCHundredSceneOp LatestResVer. - * @member {number} LatestResVer - * @memberof gamehall.SCHundredSceneOp - * @instance - */ - SCHundredSceneOp.prototype.LatestResVer = 0; - - /** - * Creates a new SCHundredSceneOp instance using the specified properties. - * @function create - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {gamehall.ISCHundredSceneOp=} [properties] Properties to set - * @returns {gamehall.SCHundredSceneOp} SCHundredSceneOp instance - */ - SCHundredSceneOp.create = function create(properties) { - return new SCHundredSceneOp(properties); - }; - - /** - * Encodes the specified SCHundredSceneOp message. Does not implicitly {@link gamehall.SCHundredSceneOp.verify|verify} messages. - * @function encode - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {gamehall.ISCHundredSceneOp} message SCHundredSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneOp.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.OpCode != null && Object.hasOwnProperty.call(message, "OpCode")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.OpCode); - if (message.Id != null && Object.hasOwnProperty.call(message, "Id")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.Id); - if (message.OpType != null && Object.hasOwnProperty.call(message, "OpType")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.OpType); - if (message.OpParams != null && message.OpParams.length) { - writer.uint32(/* id 4, wireType 2 =*/34).fork(); - for (var i = 0; i < message.OpParams.length; ++i) - writer.int32(message.OpParams[i]); - writer.ldelim(); - } - if (message.MinApkVer != null && Object.hasOwnProperty.call(message, "MinApkVer")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.MinApkVer); - if (message.LatestApkVer != null && Object.hasOwnProperty.call(message, "LatestApkVer")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.LatestApkVer); - if (message.MinResVer != null && Object.hasOwnProperty.call(message, "MinResVer")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.MinResVer); - if (message.LatestResVer != null && Object.hasOwnProperty.call(message, "LatestResVer")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.LatestResVer); - return writer; - }; - - /** - * Encodes the specified SCHundredSceneOp message, length delimited. Does not implicitly {@link gamehall.SCHundredSceneOp.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {gamehall.ISCHundredSceneOp} message SCHundredSceneOp message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneOp.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCHundredSceneOp message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCHundredSceneOp} SCHundredSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneOp.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCHundredSceneOp(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.OpCode = reader.int32(); - break; - } - case 2: { - message.Id = reader.int32(); - break; - } - case 3: { - message.OpType = reader.int32(); - break; - } - case 4: { - if (!(message.OpParams && message.OpParams.length)) - message.OpParams = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.OpParams.push(reader.int32()); - } else - message.OpParams.push(reader.int32()); - break; - } - case 5: { - message.MinApkVer = reader.int32(); - break; - } - case 6: { - message.LatestApkVer = reader.int32(); - break; - } - case 7: { - message.MinResVer = reader.int32(); - break; - } - case 8: { - message.LatestResVer = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCHundredSceneOp message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCHundredSceneOp} SCHundredSceneOp - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneOp.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCHundredSceneOp message. - * @function verify - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCHundredSceneOp.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - switch (message.OpCode) { - default: - return "OpCode: enum value expected"; - case 0: - case 1: - case 1044: - case 1045: - case 1053: - case 1054: - case 1056: - case 1058: - case 1103: - case 1113: - break; - } - if (message.Id != null && message.hasOwnProperty("Id")) - if (!$util.isInteger(message.Id)) - return "Id: integer expected"; - if (message.OpType != null && message.hasOwnProperty("OpType")) - if (!$util.isInteger(message.OpType)) - return "OpType: integer expected"; - if (message.OpParams != null && message.hasOwnProperty("OpParams")) { - if (!Array.isArray(message.OpParams)) - return "OpParams: array expected"; - for (var i = 0; i < message.OpParams.length; ++i) - if (!$util.isInteger(message.OpParams[i])) - return "OpParams: integer[] expected"; - } - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - if (!$util.isInteger(message.MinApkVer)) - return "MinApkVer: integer expected"; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - if (!$util.isInteger(message.LatestApkVer)) - return "LatestApkVer: integer expected"; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - if (!$util.isInteger(message.MinResVer)) - return "MinResVer: integer expected"; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - if (!$util.isInteger(message.LatestResVer)) - return "LatestResVer: integer expected"; - return null; - }; - - /** - * Creates a SCHundredSceneOp message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCHundredSceneOp} SCHundredSceneOp - */ - SCHundredSceneOp.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCHundredSceneOp) - return object; - var message = new $root.gamehall.SCHundredSceneOp(); - switch (object.OpCode) { - default: - if (typeof object.OpCode === "number") { - message.OpCode = object.OpCode; - break; - } - break; - case "OPRC_Sucess_Hundred": - case 0: - message.OpCode = 0; - break; - case "OPRC_Error_Hundred": - case 1: - message.OpCode = 1; - break; - case "OPRC_YourResVerIsLow_Hundred": - case 1044: - message.OpCode = 1044; - break; - case "OPRC_YourAppVerIsLow_Hundred": - case 1045: - message.OpCode = 1045; - break; - case "OPRC_RoomHadClosed_Hundred": - case 1053: - message.OpCode = 1053; - break; - case "OPRC_SceneServerMaintain_Hundred": - case 1054: - message.OpCode = 1054; - break; - case "OPRC_CoinNotEnough_Hundred": - case 1056: - message.OpCode = 1056; - break; - case "OPRC_CoinTooMore_Hundred": - case 1058: - message.OpCode = 1058; - break; - case "OPRC_RoomGameTimes_Hundred": - case 1103: - message.OpCode = 1103; - break; - case "OPRC_MustBindPromoter_Hundred": - case 1113: - message.OpCode = 1113; - break; - } - if (object.Id != null) - message.Id = object.Id | 0; - if (object.OpType != null) - message.OpType = object.OpType | 0; - if (object.OpParams) { - if (!Array.isArray(object.OpParams)) - throw TypeError(".gamehall.SCHundredSceneOp.OpParams: array expected"); - message.OpParams = []; - for (var i = 0; i < object.OpParams.length; ++i) - message.OpParams[i] = object.OpParams[i] | 0; - } - if (object.MinApkVer != null) - message.MinApkVer = object.MinApkVer | 0; - if (object.LatestApkVer != null) - message.LatestApkVer = object.LatestApkVer | 0; - if (object.MinResVer != null) - message.MinResVer = object.MinResVer | 0; - if (object.LatestResVer != null) - message.LatestResVer = object.LatestResVer | 0; - return message; - }; - - /** - * Creates a plain object from a SCHundredSceneOp message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {gamehall.SCHundredSceneOp} message SCHundredSceneOp - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCHundredSceneOp.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.OpParams = []; - if (options.defaults) { - object.OpCode = options.enums === String ? "OPRC_Sucess_Hundred" : 0; - object.Id = 0; - object.OpType = 0; - object.MinApkVer = 0; - object.LatestApkVer = 0; - object.MinResVer = 0; - object.LatestResVer = 0; - } - if (message.OpCode != null && message.hasOwnProperty("OpCode")) - object.OpCode = options.enums === String ? $root.gamehall.OpResultCode_Hundred[message.OpCode] === undefined ? message.OpCode : $root.gamehall.OpResultCode_Hundred[message.OpCode] : message.OpCode; - if (message.Id != null && message.hasOwnProperty("Id")) - object.Id = message.Id; - if (message.OpType != null && message.hasOwnProperty("OpType")) - object.OpType = message.OpType; - if (message.OpParams && message.OpParams.length) { - object.OpParams = []; - for (var j = 0; j < message.OpParams.length; ++j) - object.OpParams[j] = message.OpParams[j]; - } - if (message.MinApkVer != null && message.hasOwnProperty("MinApkVer")) - object.MinApkVer = message.MinApkVer; - if (message.LatestApkVer != null && message.hasOwnProperty("LatestApkVer")) - object.LatestApkVer = message.LatestApkVer; - if (message.MinResVer != null && message.hasOwnProperty("MinResVer")) - object.MinResVer = message.MinResVer; - if (message.LatestResVer != null && message.hasOwnProperty("LatestResVer")) - object.LatestResVer = message.LatestResVer; - return object; - }; - - /** - * Converts this SCHundredSceneOp to JSON. - * @function toJSON - * @memberof gamehall.SCHundredSceneOp - * @instance - * @returns {Object.} JSON object - */ - SCHundredSceneOp.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCHundredSceneOp - * @function getTypeUrl - * @memberof gamehall.SCHundredSceneOp - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCHundredSceneOp.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCHundredSceneOp"; - }; - - return SCHundredSceneOp; - })(); - - gamehall.CSHundredSceneGetPlayerNum = (function() { - - /** - * Properties of a CSHundredSceneGetPlayerNum. - * @memberof gamehall - * @interface ICSHundredSceneGetPlayerNum - * @property {number|null} [GameId] CSHundredSceneGetPlayerNum GameId - * @property {number|null} [GameModel] CSHundredSceneGetPlayerNum GameModel - */ - - /** - * Constructs a new CSHundredSceneGetPlayerNum. - * @memberof gamehall - * @classdesc Represents a CSHundredSceneGetPlayerNum. - * @implements ICSHundredSceneGetPlayerNum - * @constructor - * @param {gamehall.ICSHundredSceneGetPlayerNum=} [properties] Properties to set - */ - function CSHundredSceneGetPlayerNum(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSHundredSceneGetPlayerNum GameId. - * @member {number} GameId - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @instance - */ - CSHundredSceneGetPlayerNum.prototype.GameId = 0; - - /** - * CSHundredSceneGetPlayerNum GameModel. - * @member {number} GameModel - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @instance - */ - CSHundredSceneGetPlayerNum.prototype.GameModel = 0; - - /** - * Creates a new CSHundredSceneGetPlayerNum instance using the specified properties. - * @function create - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {gamehall.ICSHundredSceneGetPlayerNum=} [properties] Properties to set - * @returns {gamehall.CSHundredSceneGetPlayerNum} CSHundredSceneGetPlayerNum instance - */ - CSHundredSceneGetPlayerNum.create = function create(properties) { - return new CSHundredSceneGetPlayerNum(properties); - }; - - /** - * Encodes the specified CSHundredSceneGetPlayerNum message. Does not implicitly {@link gamehall.CSHundredSceneGetPlayerNum.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {gamehall.ICSHundredSceneGetPlayerNum} message CSHundredSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetPlayerNum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.GameModel != null && Object.hasOwnProperty.call(message, "GameModel")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameModel); - return writer; - }; - - /** - * Encodes the specified CSHundredSceneGetPlayerNum message, length delimited. Does not implicitly {@link gamehall.CSHundredSceneGetPlayerNum.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {gamehall.ICSHundredSceneGetPlayerNum} message CSHundredSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetPlayerNum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHundredSceneGetPlayerNum message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHundredSceneGetPlayerNum} CSHundredSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetPlayerNum.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHundredSceneGetPlayerNum(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.GameModel = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHundredSceneGetPlayerNum message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHundredSceneGetPlayerNum} CSHundredSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetPlayerNum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHundredSceneGetPlayerNum message. - * @function verify - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHundredSceneGetPlayerNum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.GameModel != null && message.hasOwnProperty("GameModel")) - if (!$util.isInteger(message.GameModel)) - return "GameModel: integer expected"; - return null; - }; - - /** - * Creates a CSHundredSceneGetPlayerNum message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHundredSceneGetPlayerNum} CSHundredSceneGetPlayerNum - */ - CSHundredSceneGetPlayerNum.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHundredSceneGetPlayerNum) - return object; - var message = new $root.gamehall.CSHundredSceneGetPlayerNum(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.GameModel != null) - message.GameModel = object.GameModel | 0; - return message; - }; - - /** - * Creates a plain object from a CSHundredSceneGetPlayerNum message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {gamehall.CSHundredSceneGetPlayerNum} message CSHundredSceneGetPlayerNum - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHundredSceneGetPlayerNum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.GameModel = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.GameModel != null && message.hasOwnProperty("GameModel")) - object.GameModel = message.GameModel; - return object; - }; - - /** - * Converts this CSHundredSceneGetPlayerNum to JSON. - * @function toJSON - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @instance - * @returns {Object.} JSON object - */ - CSHundredSceneGetPlayerNum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHundredSceneGetPlayerNum - * @function getTypeUrl - * @memberof gamehall.CSHundredSceneGetPlayerNum - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHundredSceneGetPlayerNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHundredSceneGetPlayerNum"; - }; - - return CSHundredSceneGetPlayerNum; - })(); - - gamehall.SCHundredSceneGetPlayerNum = (function() { - - /** - * Properties of a SCHundredSceneGetPlayerNum. - * @memberof gamehall - * @interface ISCHundredSceneGetPlayerNum - * @property {Array.|null} [Nums] SCHundredSceneGetPlayerNum Nums - */ - - /** - * Constructs a new SCHundredSceneGetPlayerNum. - * @memberof gamehall - * @classdesc Represents a SCHundredSceneGetPlayerNum. - * @implements ISCHundredSceneGetPlayerNum - * @constructor - * @param {gamehall.ISCHundredSceneGetPlayerNum=} [properties] Properties to set - */ - function SCHundredSceneGetPlayerNum(properties) { - this.Nums = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCHundredSceneGetPlayerNum Nums. - * @member {Array.} Nums - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @instance - */ - SCHundredSceneGetPlayerNum.prototype.Nums = $util.emptyArray; - - /** - * Creates a new SCHundredSceneGetPlayerNum instance using the specified properties. - * @function create - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {gamehall.ISCHundredSceneGetPlayerNum=} [properties] Properties to set - * @returns {gamehall.SCHundredSceneGetPlayerNum} SCHundredSceneGetPlayerNum instance - */ - SCHundredSceneGetPlayerNum.create = function create(properties) { - return new SCHundredSceneGetPlayerNum(properties); - }; - - /** - * Encodes the specified SCHundredSceneGetPlayerNum message. Does not implicitly {@link gamehall.SCHundredSceneGetPlayerNum.verify|verify} messages. - * @function encode - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {gamehall.ISCHundredSceneGetPlayerNum} message SCHundredSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneGetPlayerNum.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.Nums != null && message.Nums.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.Nums.length; ++i) - writer.int32(message.Nums[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified SCHundredSceneGetPlayerNum message, length delimited. Does not implicitly {@link gamehall.SCHundredSceneGetPlayerNum.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {gamehall.ISCHundredSceneGetPlayerNum} message SCHundredSceneGetPlayerNum message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneGetPlayerNum.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCHundredSceneGetPlayerNum message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCHundredSceneGetPlayerNum} SCHundredSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneGetPlayerNum.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCHundredSceneGetPlayerNum(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.Nums && message.Nums.length)) - message.Nums = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Nums.push(reader.int32()); - } else - message.Nums.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCHundredSceneGetPlayerNum message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCHundredSceneGetPlayerNum} SCHundredSceneGetPlayerNum - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneGetPlayerNum.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCHundredSceneGetPlayerNum message. - * @function verify - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCHundredSceneGetPlayerNum.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.Nums != null && message.hasOwnProperty("Nums")) { - if (!Array.isArray(message.Nums)) - return "Nums: array expected"; - for (var i = 0; i < message.Nums.length; ++i) - if (!$util.isInteger(message.Nums[i])) - return "Nums: integer[] expected"; - } - return null; - }; - - /** - * Creates a SCHundredSceneGetPlayerNum message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCHundredSceneGetPlayerNum} SCHundredSceneGetPlayerNum - */ - SCHundredSceneGetPlayerNum.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCHundredSceneGetPlayerNum) - return object; - var message = new $root.gamehall.SCHundredSceneGetPlayerNum(); - if (object.Nums) { - if (!Array.isArray(object.Nums)) - throw TypeError(".gamehall.SCHundredSceneGetPlayerNum.Nums: array expected"); - message.Nums = []; - for (var i = 0; i < object.Nums.length; ++i) - message.Nums[i] = object.Nums[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a SCHundredSceneGetPlayerNum message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {gamehall.SCHundredSceneGetPlayerNum} message SCHundredSceneGetPlayerNum - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCHundredSceneGetPlayerNum.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Nums = []; - if (message.Nums && message.Nums.length) { - object.Nums = []; - for (var j = 0; j < message.Nums.length; ++j) - object.Nums[j] = message.Nums[j]; - } - return object; - }; - - /** - * Converts this SCHundredSceneGetPlayerNum to JSON. - * @function toJSON - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @instance - * @returns {Object.} JSON object - */ - SCHundredSceneGetPlayerNum.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCHundredSceneGetPlayerNum - * @function getTypeUrl - * @memberof gamehall.SCHundredSceneGetPlayerNum - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCHundredSceneGetPlayerNum.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCHundredSceneGetPlayerNum"; - }; - - return SCHundredSceneGetPlayerNum; - })(); - - gamehall.CSHundredSceneGetGameJackpot = (function() { - - /** - * Properties of a CSHundredSceneGetGameJackpot. - * @memberof gamehall - * @interface ICSHundredSceneGetGameJackpot - */ - - /** - * Constructs a new CSHundredSceneGetGameJackpot. - * @memberof gamehall - * @classdesc Represents a CSHundredSceneGetGameJackpot. - * @implements ICSHundredSceneGetGameJackpot - * @constructor - * @param {gamehall.ICSHundredSceneGetGameJackpot=} [properties] Properties to set - */ - function CSHundredSceneGetGameJackpot(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * Creates a new CSHundredSceneGetGameJackpot instance using the specified properties. - * @function create - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {gamehall.ICSHundredSceneGetGameJackpot=} [properties] Properties to set - * @returns {gamehall.CSHundredSceneGetGameJackpot} CSHundredSceneGetGameJackpot instance - */ - CSHundredSceneGetGameJackpot.create = function create(properties) { - return new CSHundredSceneGetGameJackpot(properties); - }; - - /** - * Encodes the specified CSHundredSceneGetGameJackpot message. Does not implicitly {@link gamehall.CSHundredSceneGetGameJackpot.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {gamehall.ICSHundredSceneGetGameJackpot} message CSHundredSceneGetGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetGameJackpot.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - return writer; - }; - - /** - * Encodes the specified CSHundredSceneGetGameJackpot message, length delimited. Does not implicitly {@link gamehall.CSHundredSceneGetGameJackpot.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {gamehall.ICSHundredSceneGetGameJackpot} message CSHundredSceneGetGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetGameJackpot.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHundredSceneGetGameJackpot message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHundredSceneGetGameJackpot} CSHundredSceneGetGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetGameJackpot.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHundredSceneGetGameJackpot(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHundredSceneGetGameJackpot message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHundredSceneGetGameJackpot} CSHundredSceneGetGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetGameJackpot.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHundredSceneGetGameJackpot message. - * @function verify - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHundredSceneGetGameJackpot.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - return null; - }; - - /** - * Creates a CSHundredSceneGetGameJackpot message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHundredSceneGetGameJackpot} CSHundredSceneGetGameJackpot - */ - CSHundredSceneGetGameJackpot.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHundredSceneGetGameJackpot) - return object; - return new $root.gamehall.CSHundredSceneGetGameJackpot(); - }; - - /** - * Creates a plain object from a CSHundredSceneGetGameJackpot message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {gamehall.CSHundredSceneGetGameJackpot} message CSHundredSceneGetGameJackpot - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHundredSceneGetGameJackpot.toObject = function toObject() { - return {}; - }; - - /** - * Converts this CSHundredSceneGetGameJackpot to JSON. - * @function toJSON - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @instance - * @returns {Object.} JSON object - */ - CSHundredSceneGetGameJackpot.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHundredSceneGetGameJackpot - * @function getTypeUrl - * @memberof gamehall.CSHundredSceneGetGameJackpot - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHundredSceneGetGameJackpot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHundredSceneGetGameJackpot"; - }; - - return CSHundredSceneGetGameJackpot; - })(); - - gamehall.GameJackpotFundInfo = (function() { - - /** - * Properties of a GameJackpotFundInfo. - * @memberof gamehall - * @interface IGameJackpotFundInfo - * @property {number|null} [GameFreeId] GameJackpotFundInfo GameFreeId - * @property {number|Long|null} [JackPotFund] GameJackpotFundInfo JackPotFund - */ - - /** - * Constructs a new GameJackpotFundInfo. - * @memberof gamehall - * @classdesc Represents a GameJackpotFundInfo. - * @implements IGameJackpotFundInfo - * @constructor - * @param {gamehall.IGameJackpotFundInfo=} [properties] Properties to set - */ - function GameJackpotFundInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameJackpotFundInfo GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.GameJackpotFundInfo - * @instance - */ - GameJackpotFundInfo.prototype.GameFreeId = 0; - - /** - * GameJackpotFundInfo JackPotFund. - * @member {number|Long} JackPotFund - * @memberof gamehall.GameJackpotFundInfo - * @instance - */ - GameJackpotFundInfo.prototype.JackPotFund = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new GameJackpotFundInfo instance using the specified properties. - * @function create - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {gamehall.IGameJackpotFundInfo=} [properties] Properties to set - * @returns {gamehall.GameJackpotFundInfo} GameJackpotFundInfo instance - */ - GameJackpotFundInfo.create = function create(properties) { - return new GameJackpotFundInfo(properties); - }; - - /** - * Encodes the specified GameJackpotFundInfo message. Does not implicitly {@link gamehall.GameJackpotFundInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {gamehall.IGameJackpotFundInfo} message GameJackpotFundInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameJackpotFundInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameFreeId); - if (message.JackPotFund != null && Object.hasOwnProperty.call(message, "JackPotFund")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.JackPotFund); - return writer; - }; - - /** - * Encodes the specified GameJackpotFundInfo message, length delimited. Does not implicitly {@link gamehall.GameJackpotFundInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {gamehall.IGameJackpotFundInfo} message GameJackpotFundInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameJackpotFundInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameJackpotFundInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameJackpotFundInfo} GameJackpotFundInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameJackpotFundInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameJackpotFundInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameFreeId = reader.int32(); - break; - } - case 2: { - message.JackPotFund = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameJackpotFundInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameJackpotFundInfo} GameJackpotFundInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameJackpotFundInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameJackpotFundInfo message. - * @function verify - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameJackpotFundInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - if (message.JackPotFund != null && message.hasOwnProperty("JackPotFund")) - if (!$util.isInteger(message.JackPotFund) && !(message.JackPotFund && $util.isInteger(message.JackPotFund.low) && $util.isInteger(message.JackPotFund.high))) - return "JackPotFund: integer|Long expected"; - return null; - }; - - /** - * Creates a GameJackpotFundInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameJackpotFundInfo} GameJackpotFundInfo - */ - GameJackpotFundInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameJackpotFundInfo) - return object; - var message = new $root.gamehall.GameJackpotFundInfo(); - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - if (object.JackPotFund != null) - if ($util.Long) - (message.JackPotFund = $util.Long.fromValue(object.JackPotFund)).unsigned = false; - else if (typeof object.JackPotFund === "string") - message.JackPotFund = parseInt(object.JackPotFund, 10); - else if (typeof object.JackPotFund === "number") - message.JackPotFund = object.JackPotFund; - else if (typeof object.JackPotFund === "object") - message.JackPotFund = new $util.LongBits(object.JackPotFund.low >>> 0, object.JackPotFund.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a GameJackpotFundInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {gamehall.GameJackpotFundInfo} message GameJackpotFundInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameJackpotFundInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameFreeId = 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.JackPotFund = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.JackPotFund = options.longs === String ? "0" : 0; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - if (message.JackPotFund != null && message.hasOwnProperty("JackPotFund")) - if (typeof message.JackPotFund === "number") - object.JackPotFund = options.longs === String ? String(message.JackPotFund) : message.JackPotFund; - else - object.JackPotFund = options.longs === String ? $util.Long.prototype.toString.call(message.JackPotFund) : options.longs === Number ? new $util.LongBits(message.JackPotFund.low >>> 0, message.JackPotFund.high >>> 0).toNumber() : message.JackPotFund; - return object; - }; - - /** - * Converts this GameJackpotFundInfo to JSON. - * @function toJSON - * @memberof gamehall.GameJackpotFundInfo - * @instance - * @returns {Object.} JSON object - */ - GameJackpotFundInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameJackpotFundInfo - * @function getTypeUrl - * @memberof gamehall.GameJackpotFundInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameJackpotFundInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameJackpotFundInfo"; - }; - - return GameJackpotFundInfo; - })(); - - gamehall.SCHundredSceneGetGameJackpot = (function() { - - /** - * Properties of a SCHundredSceneGetGameJackpot. - * @memberof gamehall - * @interface ISCHundredSceneGetGameJackpot - * @property {Array.|null} [GameJackpotFund] SCHundredSceneGetGameJackpot GameJackpotFund - */ - - /** - * Constructs a new SCHundredSceneGetGameJackpot. - * @memberof gamehall - * @classdesc Represents a SCHundredSceneGetGameJackpot. - * @implements ISCHundredSceneGetGameJackpot - * @constructor - * @param {gamehall.ISCHundredSceneGetGameJackpot=} [properties] Properties to set - */ - function SCHundredSceneGetGameJackpot(properties) { - this.GameJackpotFund = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCHundredSceneGetGameJackpot GameJackpotFund. - * @member {Array.} GameJackpotFund - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @instance - */ - SCHundredSceneGetGameJackpot.prototype.GameJackpotFund = $util.emptyArray; - - /** - * Creates a new SCHundredSceneGetGameJackpot instance using the specified properties. - * @function create - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {gamehall.ISCHundredSceneGetGameJackpot=} [properties] Properties to set - * @returns {gamehall.SCHundredSceneGetGameJackpot} SCHundredSceneGetGameJackpot instance - */ - SCHundredSceneGetGameJackpot.create = function create(properties) { - return new SCHundredSceneGetGameJackpot(properties); - }; - - /** - * Encodes the specified SCHundredSceneGetGameJackpot message. Does not implicitly {@link gamehall.SCHundredSceneGetGameJackpot.verify|verify} messages. - * @function encode - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {gamehall.ISCHundredSceneGetGameJackpot} message SCHundredSceneGetGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneGetGameJackpot.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameJackpotFund != null && message.GameJackpotFund.length) - for (var i = 0; i < message.GameJackpotFund.length; ++i) - $root.gamehall.GameJackpotFundInfo.encode(message.GameJackpotFund[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCHundredSceneGetGameJackpot message, length delimited. Does not implicitly {@link gamehall.SCHundredSceneGetGameJackpot.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {gamehall.ISCHundredSceneGetGameJackpot} message SCHundredSceneGetGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCHundredSceneGetGameJackpot.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCHundredSceneGetGameJackpot message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCHundredSceneGetGameJackpot} SCHundredSceneGetGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneGetGameJackpot.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCHundredSceneGetGameJackpot(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.GameJackpotFund && message.GameJackpotFund.length)) - message.GameJackpotFund = []; - message.GameJackpotFund.push($root.gamehall.GameJackpotFundInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCHundredSceneGetGameJackpot message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCHundredSceneGetGameJackpot} SCHundredSceneGetGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCHundredSceneGetGameJackpot.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCHundredSceneGetGameJackpot message. - * @function verify - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCHundredSceneGetGameJackpot.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameJackpotFund != null && message.hasOwnProperty("GameJackpotFund")) { - if (!Array.isArray(message.GameJackpotFund)) - return "GameJackpotFund: array expected"; - for (var i = 0; i < message.GameJackpotFund.length; ++i) { - var error = $root.gamehall.GameJackpotFundInfo.verify(message.GameJackpotFund[i]); - if (error) - return "GameJackpotFund." + error; - } - } - return null; - }; - - /** - * Creates a SCHundredSceneGetGameJackpot message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCHundredSceneGetGameJackpot} SCHundredSceneGetGameJackpot - */ - SCHundredSceneGetGameJackpot.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCHundredSceneGetGameJackpot) - return object; - var message = new $root.gamehall.SCHundredSceneGetGameJackpot(); - if (object.GameJackpotFund) { - if (!Array.isArray(object.GameJackpotFund)) - throw TypeError(".gamehall.SCHundredSceneGetGameJackpot.GameJackpotFund: array expected"); - message.GameJackpotFund = []; - for (var i = 0; i < object.GameJackpotFund.length; ++i) { - if (typeof object.GameJackpotFund[i] !== "object") - throw TypeError(".gamehall.SCHundredSceneGetGameJackpot.GameJackpotFund: object expected"); - message.GameJackpotFund[i] = $root.gamehall.GameJackpotFundInfo.fromObject(object.GameJackpotFund[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCHundredSceneGetGameJackpot message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {gamehall.SCHundredSceneGetGameJackpot} message SCHundredSceneGetGameJackpot - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCHundredSceneGetGameJackpot.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.GameJackpotFund = []; - if (message.GameJackpotFund && message.GameJackpotFund.length) { - object.GameJackpotFund = []; - for (var j = 0; j < message.GameJackpotFund.length; ++j) - object.GameJackpotFund[j] = $root.gamehall.GameJackpotFundInfo.toObject(message.GameJackpotFund[j], options); - } - return object; - }; - - /** - * Converts this SCHundredSceneGetGameJackpot to JSON. - * @function toJSON - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @instance - * @returns {Object.} JSON object - */ - SCHundredSceneGetGameJackpot.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCHundredSceneGetGameJackpot - * @function getTypeUrl - * @memberof gamehall.SCHundredSceneGetGameJackpot - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCHundredSceneGetGameJackpot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCHundredSceneGetGameJackpot"; - }; - - return SCHundredSceneGetGameJackpot; - })(); - - gamehall.BroadcastGameJackpot = (function() { - - /** - * Properties of a BroadcastGameJackpot. - * @memberof gamehall - * @interface IBroadcastGameJackpot - * @property {Array.|null} [JackpotFund] BroadcastGameJackpot JackpotFund - * @property {number|null} [GameFreeId] BroadcastGameJackpot GameFreeId - */ - - /** - * Constructs a new BroadcastGameJackpot. - * @memberof gamehall - * @classdesc Represents a BroadcastGameJackpot. - * @implements IBroadcastGameJackpot - * @constructor - * @param {gamehall.IBroadcastGameJackpot=} [properties] Properties to set - */ - function BroadcastGameJackpot(properties) { - this.JackpotFund = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * BroadcastGameJackpot JackpotFund. - * @member {Array.} JackpotFund - * @memberof gamehall.BroadcastGameJackpot - * @instance - */ - BroadcastGameJackpot.prototype.JackpotFund = $util.emptyArray; - - /** - * BroadcastGameJackpot GameFreeId. - * @member {number} GameFreeId - * @memberof gamehall.BroadcastGameJackpot - * @instance - */ - BroadcastGameJackpot.prototype.GameFreeId = 0; - - /** - * Creates a new BroadcastGameJackpot instance using the specified properties. - * @function create - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {gamehall.IBroadcastGameJackpot=} [properties] Properties to set - * @returns {gamehall.BroadcastGameJackpot} BroadcastGameJackpot instance - */ - BroadcastGameJackpot.create = function create(properties) { - return new BroadcastGameJackpot(properties); - }; - - /** - * Encodes the specified BroadcastGameJackpot message. Does not implicitly {@link gamehall.BroadcastGameJackpot.verify|verify} messages. - * @function encode - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {gamehall.IBroadcastGameJackpot} message BroadcastGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BroadcastGameJackpot.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.JackpotFund != null && message.JackpotFund.length) { - writer.uint32(/* id 1, wireType 2 =*/10).fork(); - for (var i = 0; i < message.JackpotFund.length; ++i) - writer.int64(message.JackpotFund[i]); - writer.ldelim(); - } - if (message.GameFreeId != null && Object.hasOwnProperty.call(message, "GameFreeId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameFreeId); - return writer; - }; - - /** - * Encodes the specified BroadcastGameJackpot message, length delimited. Does not implicitly {@link gamehall.BroadcastGameJackpot.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {gamehall.IBroadcastGameJackpot} message BroadcastGameJackpot message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BroadcastGameJackpot.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a BroadcastGameJackpot message from the specified reader or buffer. - * @function decode - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.BroadcastGameJackpot} BroadcastGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BroadcastGameJackpot.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.BroadcastGameJackpot(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.JackpotFund && message.JackpotFund.length)) - message.JackpotFund = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.JackpotFund.push(reader.int64()); - } else - message.JackpotFund.push(reader.int64()); - break; - } - case 2: { - message.GameFreeId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a BroadcastGameJackpot message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.BroadcastGameJackpot} BroadcastGameJackpot - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BroadcastGameJackpot.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a BroadcastGameJackpot message. - * @function verify - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - BroadcastGameJackpot.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.JackpotFund != null && message.hasOwnProperty("JackpotFund")) { - if (!Array.isArray(message.JackpotFund)) - return "JackpotFund: array expected"; - for (var i = 0; i < message.JackpotFund.length; ++i) - if (!$util.isInteger(message.JackpotFund[i]) && !(message.JackpotFund[i] && $util.isInteger(message.JackpotFund[i].low) && $util.isInteger(message.JackpotFund[i].high))) - return "JackpotFund: integer|Long[] expected"; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - if (!$util.isInteger(message.GameFreeId)) - return "GameFreeId: integer expected"; - return null; - }; - - /** - * Creates a BroadcastGameJackpot message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {Object.} object Plain object - * @returns {gamehall.BroadcastGameJackpot} BroadcastGameJackpot - */ - BroadcastGameJackpot.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.BroadcastGameJackpot) - return object; - var message = new $root.gamehall.BroadcastGameJackpot(); - if (object.JackpotFund) { - if (!Array.isArray(object.JackpotFund)) - throw TypeError(".gamehall.BroadcastGameJackpot.JackpotFund: array expected"); - message.JackpotFund = []; - for (var i = 0; i < object.JackpotFund.length; ++i) - if ($util.Long) - (message.JackpotFund[i] = $util.Long.fromValue(object.JackpotFund[i])).unsigned = false; - else if (typeof object.JackpotFund[i] === "string") - message.JackpotFund[i] = parseInt(object.JackpotFund[i], 10); - else if (typeof object.JackpotFund[i] === "number") - message.JackpotFund[i] = object.JackpotFund[i]; - else if (typeof object.JackpotFund[i] === "object") - message.JackpotFund[i] = new $util.LongBits(object.JackpotFund[i].low >>> 0, object.JackpotFund[i].high >>> 0).toNumber(); - } - if (object.GameFreeId != null) - message.GameFreeId = object.GameFreeId | 0; - return message; - }; - - /** - * Creates a plain object from a BroadcastGameJackpot message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {gamehall.BroadcastGameJackpot} message BroadcastGameJackpot - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - BroadcastGameJackpot.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.JackpotFund = []; - if (options.defaults) - object.GameFreeId = 0; - if (message.JackpotFund && message.JackpotFund.length) { - object.JackpotFund = []; - for (var j = 0; j < message.JackpotFund.length; ++j) - if (typeof message.JackpotFund[j] === "number") - object.JackpotFund[j] = options.longs === String ? String(message.JackpotFund[j]) : message.JackpotFund[j]; - else - object.JackpotFund[j] = options.longs === String ? $util.Long.prototype.toString.call(message.JackpotFund[j]) : options.longs === Number ? new $util.LongBits(message.JackpotFund[j].low >>> 0, message.JackpotFund[j].high >>> 0).toNumber() : message.JackpotFund[j]; - } - if (message.GameFreeId != null && message.hasOwnProperty("GameFreeId")) - object.GameFreeId = message.GameFreeId; - return object; - }; - - /** - * Converts this BroadcastGameJackpot to JSON. - * @function toJSON - * @memberof gamehall.BroadcastGameJackpot - * @instance - * @returns {Object.} JSON object - */ - BroadcastGameJackpot.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for BroadcastGameJackpot - * @function getTypeUrl - * @memberof gamehall.BroadcastGameJackpot - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - BroadcastGameJackpot.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.BroadcastGameJackpot"; - }; - - return BroadcastGameJackpot; - })(); - - gamehall.CSHundredSceneGetHistoryInfo = (function() { - - /** - * Properties of a CSHundredSceneGetHistoryInfo. - * @memberof gamehall - * @interface ICSHundredSceneGetHistoryInfo - * @property {number|null} [GameId] CSHundredSceneGetHistoryInfo GameId - * @property {number|null} [GameHistoryModel] CSHundredSceneGetHistoryInfo GameHistoryModel - */ - - /** - * Constructs a new CSHundredSceneGetHistoryInfo. - * @memberof gamehall - * @classdesc Represents a CSHundredSceneGetHistoryInfo. - * @implements ICSHundredSceneGetHistoryInfo - * @constructor - * @param {gamehall.ICSHundredSceneGetHistoryInfo=} [properties] Properties to set - */ - function CSHundredSceneGetHistoryInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * CSHundredSceneGetHistoryInfo GameId. - * @member {number} GameId - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @instance - */ - CSHundredSceneGetHistoryInfo.prototype.GameId = 0; - - /** - * CSHundredSceneGetHistoryInfo GameHistoryModel. - * @member {number} GameHistoryModel - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @instance - */ - CSHundredSceneGetHistoryInfo.prototype.GameHistoryModel = 0; - - /** - * Creates a new CSHundredSceneGetHistoryInfo instance using the specified properties. - * @function create - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {gamehall.ICSHundredSceneGetHistoryInfo=} [properties] Properties to set - * @returns {gamehall.CSHundredSceneGetHistoryInfo} CSHundredSceneGetHistoryInfo instance - */ - CSHundredSceneGetHistoryInfo.create = function create(properties) { - return new CSHundredSceneGetHistoryInfo(properties); - }; - - /** - * Encodes the specified CSHundredSceneGetHistoryInfo message. Does not implicitly {@link gamehall.CSHundredSceneGetHistoryInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {gamehall.ICSHundredSceneGetHistoryInfo} message CSHundredSceneGetHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetHistoryInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.GameId); - if (message.GameHistoryModel != null && Object.hasOwnProperty.call(message, "GameHistoryModel")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameHistoryModel); - return writer; - }; - - /** - * Encodes the specified CSHundredSceneGetHistoryInfo message, length delimited. Does not implicitly {@link gamehall.CSHundredSceneGetHistoryInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {gamehall.ICSHundredSceneGetHistoryInfo} message CSHundredSceneGetHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - CSHundredSceneGetHistoryInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a CSHundredSceneGetHistoryInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.CSHundredSceneGetHistoryInfo} CSHundredSceneGetHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetHistoryInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.CSHundredSceneGetHistoryInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameId = reader.int32(); - break; - } - case 2: { - message.GameHistoryModel = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a CSHundredSceneGetHistoryInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.CSHundredSceneGetHistoryInfo} CSHundredSceneGetHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - CSHundredSceneGetHistoryInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a CSHundredSceneGetHistoryInfo message. - * @function verify - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - CSHundredSceneGetHistoryInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - if (message.GameHistoryModel != null && message.hasOwnProperty("GameHistoryModel")) - if (!$util.isInteger(message.GameHistoryModel)) - return "GameHistoryModel: integer expected"; - return null; - }; - - /** - * Creates a CSHundredSceneGetHistoryInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.CSHundredSceneGetHistoryInfo} CSHundredSceneGetHistoryInfo - */ - CSHundredSceneGetHistoryInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.CSHundredSceneGetHistoryInfo) - return object; - var message = new $root.gamehall.CSHundredSceneGetHistoryInfo(); - if (object.GameId != null) - message.GameId = object.GameId | 0; - if (object.GameHistoryModel != null) - message.GameHistoryModel = object.GameHistoryModel | 0; - return message; - }; - - /** - * Creates a plain object from a CSHundredSceneGetHistoryInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {gamehall.CSHundredSceneGetHistoryInfo} message CSHundredSceneGetHistoryInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - CSHundredSceneGetHistoryInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameId = 0; - object.GameHistoryModel = 0; - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - if (message.GameHistoryModel != null && message.hasOwnProperty("GameHistoryModel")) - object.GameHistoryModel = message.GameHistoryModel; - return object; - }; - - /** - * Converts this CSHundredSceneGetHistoryInfo to JSON. - * @function toJSON - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @instance - * @returns {Object.} JSON object - */ - CSHundredSceneGetHistoryInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for CSHundredSceneGetHistoryInfo - * @function getTypeUrl - * @memberof gamehall.CSHundredSceneGetHistoryInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - CSHundredSceneGetHistoryInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.CSHundredSceneGetHistoryInfo"; - }; - - return CSHundredSceneGetHistoryInfo; - })(); - - gamehall.GameHistoryInfo = (function() { - - /** - * Properties of a GameHistoryInfo. - * @memberof gamehall - * @interface IGameHistoryInfo - * @property {string|null} [GameNumber] GameHistoryInfo GameNumber - * @property {number|Long|null} [CreatedTime] GameHistoryInfo CreatedTime - * @property {number|Long|null} [Multiple] GameHistoryInfo Multiple - * @property {string|null} [Hash] GameHistoryInfo Hash - */ - - /** - * Constructs a new GameHistoryInfo. - * @memberof gamehall - * @classdesc Represents a GameHistoryInfo. - * @implements IGameHistoryInfo - * @constructor - * @param {gamehall.IGameHistoryInfo=} [properties] Properties to set - */ - function GameHistoryInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * GameHistoryInfo GameNumber. - * @member {string} GameNumber - * @memberof gamehall.GameHistoryInfo - * @instance - */ - GameHistoryInfo.prototype.GameNumber = ""; - - /** - * GameHistoryInfo CreatedTime. - * @member {number|Long} CreatedTime - * @memberof gamehall.GameHistoryInfo - * @instance - */ - GameHistoryInfo.prototype.CreatedTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * GameHistoryInfo Multiple. - * @member {number|Long} Multiple - * @memberof gamehall.GameHistoryInfo - * @instance - */ - GameHistoryInfo.prototype.Multiple = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * GameHistoryInfo Hash. - * @member {string} Hash - * @memberof gamehall.GameHistoryInfo - * @instance - */ - GameHistoryInfo.prototype.Hash = ""; - - /** - * Creates a new GameHistoryInfo instance using the specified properties. - * @function create - * @memberof gamehall.GameHistoryInfo - * @static - * @param {gamehall.IGameHistoryInfo=} [properties] Properties to set - * @returns {gamehall.GameHistoryInfo} GameHistoryInfo instance - */ - GameHistoryInfo.create = function create(properties) { - return new GameHistoryInfo(properties); - }; - - /** - * Encodes the specified GameHistoryInfo message. Does not implicitly {@link gamehall.GameHistoryInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.GameHistoryInfo - * @static - * @param {gamehall.IGameHistoryInfo} message GameHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameHistoryInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.GameNumber != null && Object.hasOwnProperty.call(message, "GameNumber")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.GameNumber); - if (message.CreatedTime != null && Object.hasOwnProperty.call(message, "CreatedTime")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.CreatedTime); - if (message.Multiple != null && Object.hasOwnProperty.call(message, "Multiple")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.Multiple); - if (message.Hash != null && Object.hasOwnProperty.call(message, "Hash")) - writer.uint32(/* id 4, wireType 2 =*/34).string(message.Hash); - return writer; - }; - - /** - * Encodes the specified GameHistoryInfo message, length delimited. Does not implicitly {@link gamehall.GameHistoryInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.GameHistoryInfo - * @static - * @param {gamehall.IGameHistoryInfo} message GameHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - GameHistoryInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a GameHistoryInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.GameHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.GameHistoryInfo} GameHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameHistoryInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.GameHistoryInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.GameNumber = reader.string(); - break; - } - case 2: { - message.CreatedTime = reader.int64(); - break; - } - case 3: { - message.Multiple = reader.int64(); - break; - } - case 4: { - message.Hash = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a GameHistoryInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.GameHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.GameHistoryInfo} GameHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - GameHistoryInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a GameHistoryInfo message. - * @function verify - * @memberof gamehall.GameHistoryInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - GameHistoryInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.GameNumber != null && message.hasOwnProperty("GameNumber")) - if (!$util.isString(message.GameNumber)) - return "GameNumber: string expected"; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (!$util.isInteger(message.CreatedTime) && !(message.CreatedTime && $util.isInteger(message.CreatedTime.low) && $util.isInteger(message.CreatedTime.high))) - return "CreatedTime: integer|Long expected"; - if (message.Multiple != null && message.hasOwnProperty("Multiple")) - if (!$util.isInteger(message.Multiple) && !(message.Multiple && $util.isInteger(message.Multiple.low) && $util.isInteger(message.Multiple.high))) - return "Multiple: integer|Long expected"; - if (message.Hash != null && message.hasOwnProperty("Hash")) - if (!$util.isString(message.Hash)) - return "Hash: string expected"; - return null; - }; - - /** - * Creates a GameHistoryInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.GameHistoryInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.GameHistoryInfo} GameHistoryInfo - */ - GameHistoryInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.GameHistoryInfo) - return object; - var message = new $root.gamehall.GameHistoryInfo(); - if (object.GameNumber != null) - message.GameNumber = String(object.GameNumber); - if (object.CreatedTime != null) - if ($util.Long) - (message.CreatedTime = $util.Long.fromValue(object.CreatedTime)).unsigned = false; - else if (typeof object.CreatedTime === "string") - message.CreatedTime = parseInt(object.CreatedTime, 10); - else if (typeof object.CreatedTime === "number") - message.CreatedTime = object.CreatedTime; - else if (typeof object.CreatedTime === "object") - message.CreatedTime = new $util.LongBits(object.CreatedTime.low >>> 0, object.CreatedTime.high >>> 0).toNumber(); - if (object.Multiple != null) - if ($util.Long) - (message.Multiple = $util.Long.fromValue(object.Multiple)).unsigned = false; - else if (typeof object.Multiple === "string") - message.Multiple = parseInt(object.Multiple, 10); - else if (typeof object.Multiple === "number") - message.Multiple = object.Multiple; - else if (typeof object.Multiple === "object") - message.Multiple = new $util.LongBits(object.Multiple.low >>> 0, object.Multiple.high >>> 0).toNumber(); - if (object.Hash != null) - message.Hash = String(object.Hash); - return message; - }; - - /** - * Creates a plain object from a GameHistoryInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.GameHistoryInfo - * @static - * @param {gamehall.GameHistoryInfo} message GameHistoryInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - GameHistoryInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.GameNumber = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.CreatedTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.CreatedTime = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Multiple = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Multiple = options.longs === String ? "0" : 0; - object.Hash = ""; - } - if (message.GameNumber != null && message.hasOwnProperty("GameNumber")) - object.GameNumber = message.GameNumber; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (typeof message.CreatedTime === "number") - object.CreatedTime = options.longs === String ? String(message.CreatedTime) : message.CreatedTime; - else - object.CreatedTime = options.longs === String ? $util.Long.prototype.toString.call(message.CreatedTime) : options.longs === Number ? new $util.LongBits(message.CreatedTime.low >>> 0, message.CreatedTime.high >>> 0).toNumber() : message.CreatedTime; - if (message.Multiple != null && message.hasOwnProperty("Multiple")) - if (typeof message.Multiple === "number") - object.Multiple = options.longs === String ? String(message.Multiple) : message.Multiple; - else - object.Multiple = options.longs === String ? $util.Long.prototype.toString.call(message.Multiple) : options.longs === Number ? new $util.LongBits(message.Multiple.low >>> 0, message.Multiple.high >>> 0).toNumber() : message.Multiple; - if (message.Hash != null && message.hasOwnProperty("Hash")) - object.Hash = message.Hash; - return object; - }; - - /** - * Converts this GameHistoryInfo to JSON. - * @function toJSON - * @memberof gamehall.GameHistoryInfo - * @instance - * @returns {Object.} JSON object - */ - GameHistoryInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for GameHistoryInfo - * @function getTypeUrl - * @memberof gamehall.GameHistoryInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - GameHistoryInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.GameHistoryInfo"; - }; - - return GameHistoryInfo; - })(); - - gamehall.PlayerHistoryInfo = (function() { - - /** - * Properties of a PlayerHistoryInfo. - * @memberof gamehall - * @interface IPlayerHistoryInfo - * @property {string|null} [SpinID] PlayerHistoryInfo SpinID - * @property {number|Long|null} [CreatedTime] PlayerHistoryInfo CreatedTime - * @property {number|Long|null} [TotalBetValue] PlayerHistoryInfo TotalBetValue - * @property {number|Long|null} [TotalPriceValue] PlayerHistoryInfo TotalPriceValue - * @property {boolean|null} [IsFree] PlayerHistoryInfo IsFree - * @property {number|Long|null} [TotalBonusValue] PlayerHistoryInfo TotalBonusValue - * @property {number|Long|null} [Multiple] PlayerHistoryInfo Multiple - */ - - /** - * Constructs a new PlayerHistoryInfo. - * @memberof gamehall - * @classdesc Represents a PlayerHistoryInfo. - * @implements IPlayerHistoryInfo - * @constructor - * @param {gamehall.IPlayerHistoryInfo=} [properties] Properties to set - */ - function PlayerHistoryInfo(properties) { - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * PlayerHistoryInfo SpinID. - * @member {string} SpinID - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.SpinID = ""; - - /** - * PlayerHistoryInfo CreatedTime. - * @member {number|Long} CreatedTime - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.CreatedTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerHistoryInfo TotalBetValue. - * @member {number|Long} TotalBetValue - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.TotalBetValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerHistoryInfo TotalPriceValue. - * @member {number|Long} TotalPriceValue - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.TotalPriceValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerHistoryInfo IsFree. - * @member {boolean} IsFree - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.IsFree = false; - - /** - * PlayerHistoryInfo TotalBonusValue. - * @member {number|Long} TotalBonusValue - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.TotalBonusValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * PlayerHistoryInfo Multiple. - * @member {number|Long} Multiple - * @memberof gamehall.PlayerHistoryInfo - * @instance - */ - PlayerHistoryInfo.prototype.Multiple = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * Creates a new PlayerHistoryInfo instance using the specified properties. - * @function create - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {gamehall.IPlayerHistoryInfo=} [properties] Properties to set - * @returns {gamehall.PlayerHistoryInfo} PlayerHistoryInfo instance - */ - PlayerHistoryInfo.create = function create(properties) { - return new PlayerHistoryInfo(properties); - }; - - /** - * Encodes the specified PlayerHistoryInfo message. Does not implicitly {@link gamehall.PlayerHistoryInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {gamehall.IPlayerHistoryInfo} message PlayerHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerHistoryInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.SpinID != null && Object.hasOwnProperty.call(message, "SpinID")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.SpinID); - if (message.CreatedTime != null && Object.hasOwnProperty.call(message, "CreatedTime")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.CreatedTime); - if (message.TotalBetValue != null && Object.hasOwnProperty.call(message, "TotalBetValue")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.TotalBetValue); - if (message.TotalPriceValue != null && Object.hasOwnProperty.call(message, "TotalPriceValue")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.TotalPriceValue); - if (message.IsFree != null && Object.hasOwnProperty.call(message, "IsFree")) - writer.uint32(/* id 5, wireType 0 =*/40).bool(message.IsFree); - if (message.TotalBonusValue != null && Object.hasOwnProperty.call(message, "TotalBonusValue")) - writer.uint32(/* id 6, wireType 0 =*/48).int64(message.TotalBonusValue); - if (message.Multiple != null && Object.hasOwnProperty.call(message, "Multiple")) - writer.uint32(/* id 7, wireType 0 =*/56).int64(message.Multiple); - return writer; - }; - - /** - * Encodes the specified PlayerHistoryInfo message, length delimited. Does not implicitly {@link gamehall.PlayerHistoryInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {gamehall.IPlayerHistoryInfo} message PlayerHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - PlayerHistoryInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a PlayerHistoryInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.PlayerHistoryInfo} PlayerHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerHistoryInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.PlayerHistoryInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.SpinID = reader.string(); - break; - } - case 2: { - message.CreatedTime = reader.int64(); - break; - } - case 3: { - message.TotalBetValue = reader.int64(); - break; - } - case 4: { - message.TotalPriceValue = reader.int64(); - break; - } - case 5: { - message.IsFree = reader.bool(); - break; - } - case 6: { - message.TotalBonusValue = reader.int64(); - break; - } - case 7: { - message.Multiple = reader.int64(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a PlayerHistoryInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.PlayerHistoryInfo} PlayerHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - PlayerHistoryInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a PlayerHistoryInfo message. - * @function verify - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - PlayerHistoryInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.SpinID != null && message.hasOwnProperty("SpinID")) - if (!$util.isString(message.SpinID)) - return "SpinID: string expected"; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (!$util.isInteger(message.CreatedTime) && !(message.CreatedTime && $util.isInteger(message.CreatedTime.low) && $util.isInteger(message.CreatedTime.high))) - return "CreatedTime: integer|Long expected"; - if (message.TotalBetValue != null && message.hasOwnProperty("TotalBetValue")) - if (!$util.isInteger(message.TotalBetValue) && !(message.TotalBetValue && $util.isInteger(message.TotalBetValue.low) && $util.isInteger(message.TotalBetValue.high))) - return "TotalBetValue: integer|Long expected"; - if (message.TotalPriceValue != null && message.hasOwnProperty("TotalPriceValue")) - if (!$util.isInteger(message.TotalPriceValue) && !(message.TotalPriceValue && $util.isInteger(message.TotalPriceValue.low) && $util.isInteger(message.TotalPriceValue.high))) - return "TotalPriceValue: integer|Long expected"; - if (message.IsFree != null && message.hasOwnProperty("IsFree")) - if (typeof message.IsFree !== "boolean") - return "IsFree: boolean expected"; - if (message.TotalBonusValue != null && message.hasOwnProperty("TotalBonusValue")) - if (!$util.isInteger(message.TotalBonusValue) && !(message.TotalBonusValue && $util.isInteger(message.TotalBonusValue.low) && $util.isInteger(message.TotalBonusValue.high))) - return "TotalBonusValue: integer|Long expected"; - if (message.Multiple != null && message.hasOwnProperty("Multiple")) - if (!$util.isInteger(message.Multiple) && !(message.Multiple && $util.isInteger(message.Multiple.low) && $util.isInteger(message.Multiple.high))) - return "Multiple: integer|Long expected"; - return null; - }; - - /** - * Creates a PlayerHistoryInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.PlayerHistoryInfo} PlayerHistoryInfo - */ - PlayerHistoryInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.PlayerHistoryInfo) - return object; - var message = new $root.gamehall.PlayerHistoryInfo(); - if (object.SpinID != null) - message.SpinID = String(object.SpinID); - if (object.CreatedTime != null) - if ($util.Long) - (message.CreatedTime = $util.Long.fromValue(object.CreatedTime)).unsigned = false; - else if (typeof object.CreatedTime === "string") - message.CreatedTime = parseInt(object.CreatedTime, 10); - else if (typeof object.CreatedTime === "number") - message.CreatedTime = object.CreatedTime; - else if (typeof object.CreatedTime === "object") - message.CreatedTime = new $util.LongBits(object.CreatedTime.low >>> 0, object.CreatedTime.high >>> 0).toNumber(); - if (object.TotalBetValue != null) - if ($util.Long) - (message.TotalBetValue = $util.Long.fromValue(object.TotalBetValue)).unsigned = false; - else if (typeof object.TotalBetValue === "string") - message.TotalBetValue = parseInt(object.TotalBetValue, 10); - else if (typeof object.TotalBetValue === "number") - message.TotalBetValue = object.TotalBetValue; - else if (typeof object.TotalBetValue === "object") - message.TotalBetValue = new $util.LongBits(object.TotalBetValue.low >>> 0, object.TotalBetValue.high >>> 0).toNumber(); - if (object.TotalPriceValue != null) - if ($util.Long) - (message.TotalPriceValue = $util.Long.fromValue(object.TotalPriceValue)).unsigned = false; - else if (typeof object.TotalPriceValue === "string") - message.TotalPriceValue = parseInt(object.TotalPriceValue, 10); - else if (typeof object.TotalPriceValue === "number") - message.TotalPriceValue = object.TotalPriceValue; - else if (typeof object.TotalPriceValue === "object") - message.TotalPriceValue = new $util.LongBits(object.TotalPriceValue.low >>> 0, object.TotalPriceValue.high >>> 0).toNumber(); - if (object.IsFree != null) - message.IsFree = Boolean(object.IsFree); - if (object.TotalBonusValue != null) - if ($util.Long) - (message.TotalBonusValue = $util.Long.fromValue(object.TotalBonusValue)).unsigned = false; - else if (typeof object.TotalBonusValue === "string") - message.TotalBonusValue = parseInt(object.TotalBonusValue, 10); - else if (typeof object.TotalBonusValue === "number") - message.TotalBonusValue = object.TotalBonusValue; - else if (typeof object.TotalBonusValue === "object") - message.TotalBonusValue = new $util.LongBits(object.TotalBonusValue.low >>> 0, object.TotalBonusValue.high >>> 0).toNumber(); - if (object.Multiple != null) - if ($util.Long) - (message.Multiple = $util.Long.fromValue(object.Multiple)).unsigned = false; - else if (typeof object.Multiple === "string") - message.Multiple = parseInt(object.Multiple, 10); - else if (typeof object.Multiple === "number") - message.Multiple = object.Multiple; - else if (typeof object.Multiple === "object") - message.Multiple = new $util.LongBits(object.Multiple.low >>> 0, object.Multiple.high >>> 0).toNumber(); - return message; - }; - - /** - * Creates a plain object from a PlayerHistoryInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {gamehall.PlayerHistoryInfo} message PlayerHistoryInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - PlayerHistoryInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.SpinID = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.CreatedTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.CreatedTime = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalBetValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalBetValue = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalPriceValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalPriceValue = options.longs === String ? "0" : 0; - object.IsFree = false; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalBonusValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalBonusValue = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.Multiple = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.Multiple = options.longs === String ? "0" : 0; - } - if (message.SpinID != null && message.hasOwnProperty("SpinID")) - object.SpinID = message.SpinID; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (typeof message.CreatedTime === "number") - object.CreatedTime = options.longs === String ? String(message.CreatedTime) : message.CreatedTime; - else - object.CreatedTime = options.longs === String ? $util.Long.prototype.toString.call(message.CreatedTime) : options.longs === Number ? new $util.LongBits(message.CreatedTime.low >>> 0, message.CreatedTime.high >>> 0).toNumber() : message.CreatedTime; - if (message.TotalBetValue != null && message.hasOwnProperty("TotalBetValue")) - if (typeof message.TotalBetValue === "number") - object.TotalBetValue = options.longs === String ? String(message.TotalBetValue) : message.TotalBetValue; - else - object.TotalBetValue = options.longs === String ? $util.Long.prototype.toString.call(message.TotalBetValue) : options.longs === Number ? new $util.LongBits(message.TotalBetValue.low >>> 0, message.TotalBetValue.high >>> 0).toNumber() : message.TotalBetValue; - if (message.TotalPriceValue != null && message.hasOwnProperty("TotalPriceValue")) - if (typeof message.TotalPriceValue === "number") - object.TotalPriceValue = options.longs === String ? String(message.TotalPriceValue) : message.TotalPriceValue; - else - object.TotalPriceValue = options.longs === String ? $util.Long.prototype.toString.call(message.TotalPriceValue) : options.longs === Number ? new $util.LongBits(message.TotalPriceValue.low >>> 0, message.TotalPriceValue.high >>> 0).toNumber() : message.TotalPriceValue; - if (message.IsFree != null && message.hasOwnProperty("IsFree")) - object.IsFree = message.IsFree; - if (message.TotalBonusValue != null && message.hasOwnProperty("TotalBonusValue")) - if (typeof message.TotalBonusValue === "number") - object.TotalBonusValue = options.longs === String ? String(message.TotalBonusValue) : message.TotalBonusValue; - else - object.TotalBonusValue = options.longs === String ? $util.Long.prototype.toString.call(message.TotalBonusValue) : options.longs === Number ? new $util.LongBits(message.TotalBonusValue.low >>> 0, message.TotalBonusValue.high >>> 0).toNumber() : message.TotalBonusValue; - if (message.Multiple != null && message.hasOwnProperty("Multiple")) - if (typeof message.Multiple === "number") - object.Multiple = options.longs === String ? String(message.Multiple) : message.Multiple; - else - object.Multiple = options.longs === String ? $util.Long.prototype.toString.call(message.Multiple) : options.longs === Number ? new $util.LongBits(message.Multiple.low >>> 0, message.Multiple.high >>> 0).toNumber() : message.Multiple; - return object; - }; - - /** - * Converts this PlayerHistoryInfo to JSON. - * @function toJSON - * @memberof gamehall.PlayerHistoryInfo - * @instance - * @returns {Object.} JSON object - */ - PlayerHistoryInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for PlayerHistoryInfo - * @function getTypeUrl - * @memberof gamehall.PlayerHistoryInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - PlayerHistoryInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.PlayerHistoryInfo"; - }; - - return PlayerHistoryInfo; - })(); - - gamehall.SCPlayerHistory = (function() { - - /** - * Properties of a SCPlayerHistory. - * @memberof gamehall - * @interface ISCPlayerHistory - * @property {Array.|null} [PlayerHistory] SCPlayerHistory PlayerHistory - * @property {Array.|null} [GameHistory] SCPlayerHistory GameHistory - */ - - /** - * Constructs a new SCPlayerHistory. - * @memberof gamehall - * @classdesc Represents a SCPlayerHistory. - * @implements ISCPlayerHistory - * @constructor - * @param {gamehall.ISCPlayerHistory=} [properties] Properties to set - */ - function SCPlayerHistory(properties) { - this.PlayerHistory = []; - this.GameHistory = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCPlayerHistory PlayerHistory. - * @member {Array.} PlayerHistory - * @memberof gamehall.SCPlayerHistory - * @instance - */ - SCPlayerHistory.prototype.PlayerHistory = $util.emptyArray; - - /** - * SCPlayerHistory GameHistory. - * @member {Array.} GameHistory - * @memberof gamehall.SCPlayerHistory - * @instance - */ - SCPlayerHistory.prototype.GameHistory = $util.emptyArray; - - /** - * Creates a new SCPlayerHistory instance using the specified properties. - * @function create - * @memberof gamehall.SCPlayerHistory - * @static - * @param {gamehall.ISCPlayerHistory=} [properties] Properties to set - * @returns {gamehall.SCPlayerHistory} SCPlayerHistory instance - */ - SCPlayerHistory.create = function create(properties) { - return new SCPlayerHistory(properties); - }; - - /** - * Encodes the specified SCPlayerHistory message. Does not implicitly {@link gamehall.SCPlayerHistory.verify|verify} messages. - * @function encode - * @memberof gamehall.SCPlayerHistory - * @static - * @param {gamehall.ISCPlayerHistory} message SCPlayerHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCPlayerHistory.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.PlayerHistory != null && message.PlayerHistory.length) - for (var i = 0; i < message.PlayerHistory.length; ++i) - $root.gamehall.PlayerHistoryInfo.encode(message.PlayerHistory[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.GameHistory != null && message.GameHistory.length) - for (var i = 0; i < message.GameHistory.length; ++i) - $root.gamehall.GameHistoryInfo.encode(message.GameHistory[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim(); - return writer; - }; - - /** - * Encodes the specified SCPlayerHistory message, length delimited. Does not implicitly {@link gamehall.SCPlayerHistory.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCPlayerHistory - * @static - * @param {gamehall.ISCPlayerHistory} message SCPlayerHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCPlayerHistory.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCPlayerHistory message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCPlayerHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCPlayerHistory} SCPlayerHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCPlayerHistory.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCPlayerHistory(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.PlayerHistory && message.PlayerHistory.length)) - message.PlayerHistory = []; - message.PlayerHistory.push($root.gamehall.PlayerHistoryInfo.decode(reader, reader.uint32())); - break; - } - case 2: { - if (!(message.GameHistory && message.GameHistory.length)) - message.GameHistory = []; - message.GameHistory.push($root.gamehall.GameHistoryInfo.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCPlayerHistory message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCPlayerHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCPlayerHistory} SCPlayerHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCPlayerHistory.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCPlayerHistory message. - * @function verify - * @memberof gamehall.SCPlayerHistory - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCPlayerHistory.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.PlayerHistory != null && message.hasOwnProperty("PlayerHistory")) { - if (!Array.isArray(message.PlayerHistory)) - return "PlayerHistory: array expected"; - for (var i = 0; i < message.PlayerHistory.length; ++i) { - var error = $root.gamehall.PlayerHistoryInfo.verify(message.PlayerHistory[i]); - if (error) - return "PlayerHistory." + error; - } - } - if (message.GameHistory != null && message.hasOwnProperty("GameHistory")) { - if (!Array.isArray(message.GameHistory)) - return "GameHistory: array expected"; - for (var i = 0; i < message.GameHistory.length; ++i) { - var error = $root.gamehall.GameHistoryInfo.verify(message.GameHistory[i]); - if (error) - return "GameHistory." + error; - } - } - return null; - }; - - /** - * Creates a SCPlayerHistory message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCPlayerHistory - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCPlayerHistory} SCPlayerHistory - */ - SCPlayerHistory.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCPlayerHistory) - return object; - var message = new $root.gamehall.SCPlayerHistory(); - if (object.PlayerHistory) { - if (!Array.isArray(object.PlayerHistory)) - throw TypeError(".gamehall.SCPlayerHistory.PlayerHistory: array expected"); - message.PlayerHistory = []; - for (var i = 0; i < object.PlayerHistory.length; ++i) { - if (typeof object.PlayerHistory[i] !== "object") - throw TypeError(".gamehall.SCPlayerHistory.PlayerHistory: object expected"); - message.PlayerHistory[i] = $root.gamehall.PlayerHistoryInfo.fromObject(object.PlayerHistory[i]); - } - } - if (object.GameHistory) { - if (!Array.isArray(object.GameHistory)) - throw TypeError(".gamehall.SCPlayerHistory.GameHistory: array expected"); - message.GameHistory = []; - for (var i = 0; i < object.GameHistory.length; ++i) { - if (typeof object.GameHistory[i] !== "object") - throw TypeError(".gamehall.SCPlayerHistory.GameHistory: object expected"); - message.GameHistory[i] = $root.gamehall.GameHistoryInfo.fromObject(object.GameHistory[i]); - } - } - return message; - }; - - /** - * Creates a plain object from a SCPlayerHistory message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCPlayerHistory - * @static - * @param {gamehall.SCPlayerHistory} message SCPlayerHistory - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCPlayerHistory.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.PlayerHistory = []; - object.GameHistory = []; - } - if (message.PlayerHistory && message.PlayerHistory.length) { - object.PlayerHistory = []; - for (var j = 0; j < message.PlayerHistory.length; ++j) - object.PlayerHistory[j] = $root.gamehall.PlayerHistoryInfo.toObject(message.PlayerHistory[j], options); - } - if (message.GameHistory && message.GameHistory.length) { - object.GameHistory = []; - for (var j = 0; j < message.GameHistory.length; ++j) - object.GameHistory[j] = $root.gamehall.GameHistoryInfo.toObject(message.GameHistory[j], options); - } - return object; - }; - - /** - * Converts this SCPlayerHistory to JSON. - * @function toJSON - * @memberof gamehall.SCPlayerHistory - * @instance - * @returns {Object.} JSON object - */ - SCPlayerHistory.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCPlayerHistory - * @function getTypeUrl - * @memberof gamehall.SCPlayerHistory - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCPlayerHistory.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCPlayerHistory"; - }; - - return SCPlayerHistory; - })(); - - gamehall.BigWinHistoryInfo = (function() { - - /** - * Properties of a BigWinHistoryInfo. - * @memberof gamehall - * @interface IBigWinHistoryInfo - * @property {string|null} [SpinID] BigWinHistoryInfo SpinID - * @property {number|Long|null} [CreatedTime] BigWinHistoryInfo CreatedTime - * @property {number|Long|null} [BaseBet] BigWinHistoryInfo BaseBet - * @property {number|Long|null} [PriceValue] BigWinHistoryInfo PriceValue - * @property {string|null} [UserName] BigWinHistoryInfo UserName - * @property {boolean|null} [IsVirtualData] BigWinHistoryInfo IsVirtualData - * @property {number|Long|null} [TotalBet] BigWinHistoryInfo TotalBet - * @property {Array.|null} [Cards] BigWinHistoryInfo Cards - */ - - /** - * Constructs a new BigWinHistoryInfo. - * @memberof gamehall - * @classdesc Represents a BigWinHistoryInfo. - * @implements IBigWinHistoryInfo - * @constructor - * @param {gamehall.IBigWinHistoryInfo=} [properties] Properties to set - */ - function BigWinHistoryInfo(properties) { - this.Cards = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * BigWinHistoryInfo SpinID. - * @member {string} SpinID - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.SpinID = ""; - - /** - * BigWinHistoryInfo CreatedTime. - * @member {number|Long} CreatedTime - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.CreatedTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BigWinHistoryInfo BaseBet. - * @member {number|Long} BaseBet - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.BaseBet = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BigWinHistoryInfo PriceValue. - * @member {number|Long} PriceValue - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.PriceValue = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BigWinHistoryInfo UserName. - * @member {string} UserName - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.UserName = ""; - - /** - * BigWinHistoryInfo IsVirtualData. - * @member {boolean} IsVirtualData - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.IsVirtualData = false; - - /** - * BigWinHistoryInfo TotalBet. - * @member {number|Long} TotalBet - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.TotalBet = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - - /** - * BigWinHistoryInfo Cards. - * @member {Array.} Cards - * @memberof gamehall.BigWinHistoryInfo - * @instance - */ - BigWinHistoryInfo.prototype.Cards = $util.emptyArray; - - /** - * Creates a new BigWinHistoryInfo instance using the specified properties. - * @function create - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {gamehall.IBigWinHistoryInfo=} [properties] Properties to set - * @returns {gamehall.BigWinHistoryInfo} BigWinHistoryInfo instance - */ - BigWinHistoryInfo.create = function create(properties) { - return new BigWinHistoryInfo(properties); - }; - - /** - * Encodes the specified BigWinHistoryInfo message. Does not implicitly {@link gamehall.BigWinHistoryInfo.verify|verify} messages. - * @function encode - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {gamehall.IBigWinHistoryInfo} message BigWinHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BigWinHistoryInfo.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.SpinID != null && Object.hasOwnProperty.call(message, "SpinID")) - writer.uint32(/* id 1, wireType 2 =*/10).string(message.SpinID); - if (message.CreatedTime != null && Object.hasOwnProperty.call(message, "CreatedTime")) - writer.uint32(/* id 2, wireType 0 =*/16).int64(message.CreatedTime); - if (message.BaseBet != null && Object.hasOwnProperty.call(message, "BaseBet")) - writer.uint32(/* id 3, wireType 0 =*/24).int64(message.BaseBet); - if (message.PriceValue != null && Object.hasOwnProperty.call(message, "PriceValue")) - writer.uint32(/* id 4, wireType 0 =*/32).int64(message.PriceValue); - if (message.UserName != null && Object.hasOwnProperty.call(message, "UserName")) - writer.uint32(/* id 5, wireType 2 =*/42).string(message.UserName); - if (message.IsVirtualData != null && Object.hasOwnProperty.call(message, "IsVirtualData")) - writer.uint32(/* id 6, wireType 0 =*/48).bool(message.IsVirtualData); - if (message.TotalBet != null && Object.hasOwnProperty.call(message, "TotalBet")) - writer.uint32(/* id 7, wireType 0 =*/56).int64(message.TotalBet); - if (message.Cards != null && message.Cards.length) { - writer.uint32(/* id 8, wireType 2 =*/66).fork(); - for (var i = 0; i < message.Cards.length; ++i) - writer.int32(message.Cards[i]); - writer.ldelim(); - } - return writer; - }; - - /** - * Encodes the specified BigWinHistoryInfo message, length delimited. Does not implicitly {@link gamehall.BigWinHistoryInfo.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {gamehall.IBigWinHistoryInfo} message BigWinHistoryInfo message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - BigWinHistoryInfo.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a BigWinHistoryInfo message from the specified reader or buffer. - * @function decode - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.BigWinHistoryInfo} BigWinHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BigWinHistoryInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.BigWinHistoryInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.SpinID = reader.string(); - break; - } - case 2: { - message.CreatedTime = reader.int64(); - break; - } - case 3: { - message.BaseBet = reader.int64(); - break; - } - case 4: { - message.PriceValue = reader.int64(); - break; - } - case 5: { - message.UserName = reader.string(); - break; - } - case 6: { - message.IsVirtualData = reader.bool(); - break; - } - case 7: { - message.TotalBet = reader.int64(); - break; - } - case 8: { - if (!(message.Cards && message.Cards.length)) - message.Cards = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.Cards.push(reader.int32()); - } else - message.Cards.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a BigWinHistoryInfo message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.BigWinHistoryInfo} BigWinHistoryInfo - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - BigWinHistoryInfo.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a BigWinHistoryInfo message. - * @function verify - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - BigWinHistoryInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.SpinID != null && message.hasOwnProperty("SpinID")) - if (!$util.isString(message.SpinID)) - return "SpinID: string expected"; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (!$util.isInteger(message.CreatedTime) && !(message.CreatedTime && $util.isInteger(message.CreatedTime.low) && $util.isInteger(message.CreatedTime.high))) - return "CreatedTime: integer|Long expected"; - if (message.BaseBet != null && message.hasOwnProperty("BaseBet")) - if (!$util.isInteger(message.BaseBet) && !(message.BaseBet && $util.isInteger(message.BaseBet.low) && $util.isInteger(message.BaseBet.high))) - return "BaseBet: integer|Long expected"; - if (message.PriceValue != null && message.hasOwnProperty("PriceValue")) - if (!$util.isInteger(message.PriceValue) && !(message.PriceValue && $util.isInteger(message.PriceValue.low) && $util.isInteger(message.PriceValue.high))) - return "PriceValue: integer|Long expected"; - if (message.UserName != null && message.hasOwnProperty("UserName")) - if (!$util.isString(message.UserName)) - return "UserName: string expected"; - if (message.IsVirtualData != null && message.hasOwnProperty("IsVirtualData")) - if (typeof message.IsVirtualData !== "boolean") - return "IsVirtualData: boolean expected"; - if (message.TotalBet != null && message.hasOwnProperty("TotalBet")) - if (!$util.isInteger(message.TotalBet) && !(message.TotalBet && $util.isInteger(message.TotalBet.low) && $util.isInteger(message.TotalBet.high))) - return "TotalBet: integer|Long expected"; - if (message.Cards != null && message.hasOwnProperty("Cards")) { - if (!Array.isArray(message.Cards)) - return "Cards: array expected"; - for (var i = 0; i < message.Cards.length; ++i) - if (!$util.isInteger(message.Cards[i])) - return "Cards: integer[] expected"; - } - return null; - }; - - /** - * Creates a BigWinHistoryInfo message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {Object.} object Plain object - * @returns {gamehall.BigWinHistoryInfo} BigWinHistoryInfo - */ - BigWinHistoryInfo.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.BigWinHistoryInfo) - return object; - var message = new $root.gamehall.BigWinHistoryInfo(); - if (object.SpinID != null) - message.SpinID = String(object.SpinID); - if (object.CreatedTime != null) - if ($util.Long) - (message.CreatedTime = $util.Long.fromValue(object.CreatedTime)).unsigned = false; - else if (typeof object.CreatedTime === "string") - message.CreatedTime = parseInt(object.CreatedTime, 10); - else if (typeof object.CreatedTime === "number") - message.CreatedTime = object.CreatedTime; - else if (typeof object.CreatedTime === "object") - message.CreatedTime = new $util.LongBits(object.CreatedTime.low >>> 0, object.CreatedTime.high >>> 0).toNumber(); - if (object.BaseBet != null) - if ($util.Long) - (message.BaseBet = $util.Long.fromValue(object.BaseBet)).unsigned = false; - else if (typeof object.BaseBet === "string") - message.BaseBet = parseInt(object.BaseBet, 10); - else if (typeof object.BaseBet === "number") - message.BaseBet = object.BaseBet; - else if (typeof object.BaseBet === "object") - message.BaseBet = new $util.LongBits(object.BaseBet.low >>> 0, object.BaseBet.high >>> 0).toNumber(); - if (object.PriceValue != null) - if ($util.Long) - (message.PriceValue = $util.Long.fromValue(object.PriceValue)).unsigned = false; - else if (typeof object.PriceValue === "string") - message.PriceValue = parseInt(object.PriceValue, 10); - else if (typeof object.PriceValue === "number") - message.PriceValue = object.PriceValue; - else if (typeof object.PriceValue === "object") - message.PriceValue = new $util.LongBits(object.PriceValue.low >>> 0, object.PriceValue.high >>> 0).toNumber(); - if (object.UserName != null) - message.UserName = String(object.UserName); - if (object.IsVirtualData != null) - message.IsVirtualData = Boolean(object.IsVirtualData); - if (object.TotalBet != null) - if ($util.Long) - (message.TotalBet = $util.Long.fromValue(object.TotalBet)).unsigned = false; - else if (typeof object.TotalBet === "string") - message.TotalBet = parseInt(object.TotalBet, 10); - else if (typeof object.TotalBet === "number") - message.TotalBet = object.TotalBet; - else if (typeof object.TotalBet === "object") - message.TotalBet = new $util.LongBits(object.TotalBet.low >>> 0, object.TotalBet.high >>> 0).toNumber(); - if (object.Cards) { - if (!Array.isArray(object.Cards)) - throw TypeError(".gamehall.BigWinHistoryInfo.Cards: array expected"); - message.Cards = []; - for (var i = 0; i < object.Cards.length; ++i) - message.Cards[i] = object.Cards[i] | 0; - } - return message; - }; - - /** - * Creates a plain object from a BigWinHistoryInfo message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {gamehall.BigWinHistoryInfo} message BigWinHistoryInfo - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - BigWinHistoryInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.Cards = []; - if (options.defaults) { - object.SpinID = ""; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.CreatedTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.CreatedTime = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.BaseBet = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.BaseBet = options.longs === String ? "0" : 0; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.PriceValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.PriceValue = options.longs === String ? "0" : 0; - object.UserName = ""; - object.IsVirtualData = false; - if ($util.Long) { - var long = new $util.Long(0, 0, false); - object.TotalBet = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; - } else - object.TotalBet = options.longs === String ? "0" : 0; - } - if (message.SpinID != null && message.hasOwnProperty("SpinID")) - object.SpinID = message.SpinID; - if (message.CreatedTime != null && message.hasOwnProperty("CreatedTime")) - if (typeof message.CreatedTime === "number") - object.CreatedTime = options.longs === String ? String(message.CreatedTime) : message.CreatedTime; - else - object.CreatedTime = options.longs === String ? $util.Long.prototype.toString.call(message.CreatedTime) : options.longs === Number ? new $util.LongBits(message.CreatedTime.low >>> 0, message.CreatedTime.high >>> 0).toNumber() : message.CreatedTime; - if (message.BaseBet != null && message.hasOwnProperty("BaseBet")) - if (typeof message.BaseBet === "number") - object.BaseBet = options.longs === String ? String(message.BaseBet) : message.BaseBet; - else - object.BaseBet = options.longs === String ? $util.Long.prototype.toString.call(message.BaseBet) : options.longs === Number ? new $util.LongBits(message.BaseBet.low >>> 0, message.BaseBet.high >>> 0).toNumber() : message.BaseBet; - if (message.PriceValue != null && message.hasOwnProperty("PriceValue")) - if (typeof message.PriceValue === "number") - object.PriceValue = options.longs === String ? String(message.PriceValue) : message.PriceValue; - else - object.PriceValue = options.longs === String ? $util.Long.prototype.toString.call(message.PriceValue) : options.longs === Number ? new $util.LongBits(message.PriceValue.low >>> 0, message.PriceValue.high >>> 0).toNumber() : message.PriceValue; - if (message.UserName != null && message.hasOwnProperty("UserName")) - object.UserName = message.UserName; - if (message.IsVirtualData != null && message.hasOwnProperty("IsVirtualData")) - object.IsVirtualData = message.IsVirtualData; - if (message.TotalBet != null && message.hasOwnProperty("TotalBet")) - if (typeof message.TotalBet === "number") - object.TotalBet = options.longs === String ? String(message.TotalBet) : message.TotalBet; - else - object.TotalBet = options.longs === String ? $util.Long.prototype.toString.call(message.TotalBet) : options.longs === Number ? new $util.LongBits(message.TotalBet.low >>> 0, message.TotalBet.high >>> 0).toNumber() : message.TotalBet; - if (message.Cards && message.Cards.length) { - object.Cards = []; - for (var j = 0; j < message.Cards.length; ++j) - object.Cards[j] = message.Cards[j]; - } - return object; - }; - - /** - * Converts this BigWinHistoryInfo to JSON. - * @function toJSON - * @memberof gamehall.BigWinHistoryInfo - * @instance - * @returns {Object.} JSON object - */ - BigWinHistoryInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for BigWinHistoryInfo - * @function getTypeUrl - * @memberof gamehall.BigWinHistoryInfo - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - BigWinHistoryInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.BigWinHistoryInfo"; - }; - - return BigWinHistoryInfo; - })(); - - gamehall.SCBigWinHistory = (function() { - - /** - * Properties of a SCBigWinHistory. - * @memberof gamehall - * @interface ISCBigWinHistory - * @property {Array.|null} [BigWinHistory] SCBigWinHistory BigWinHistory - * @property {number|null} [GameId] SCBigWinHistory GameId - */ - - /** - * Constructs a new SCBigWinHistory. - * @memberof gamehall - * @classdesc Represents a SCBigWinHistory. - * @implements ISCBigWinHistory - * @constructor - * @param {gamehall.ISCBigWinHistory=} [properties] Properties to set - */ - function SCBigWinHistory(properties) { - this.BigWinHistory = []; - if (properties) - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - - /** - * SCBigWinHistory BigWinHistory. - * @member {Array.} BigWinHistory - * @memberof gamehall.SCBigWinHistory - * @instance - */ - SCBigWinHistory.prototype.BigWinHistory = $util.emptyArray; - - /** - * SCBigWinHistory GameId. - * @member {number} GameId - * @memberof gamehall.SCBigWinHistory - * @instance - */ - SCBigWinHistory.prototype.GameId = 0; - - /** - * Creates a new SCBigWinHistory instance using the specified properties. - * @function create - * @memberof gamehall.SCBigWinHistory - * @static - * @param {gamehall.ISCBigWinHistory=} [properties] Properties to set - * @returns {gamehall.SCBigWinHistory} SCBigWinHistory instance - */ - SCBigWinHistory.create = function create(properties) { - return new SCBigWinHistory(properties); - }; - - /** - * Encodes the specified SCBigWinHistory message. Does not implicitly {@link gamehall.SCBigWinHistory.verify|verify} messages. - * @function encode - * @memberof gamehall.SCBigWinHistory - * @static - * @param {gamehall.ISCBigWinHistory} message SCBigWinHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCBigWinHistory.encode = function encode(message, writer) { - if (!writer) - writer = $Writer.create(); - if (message.BigWinHistory != null && message.BigWinHistory.length) - for (var i = 0; i < message.BigWinHistory.length; ++i) - $root.gamehall.BigWinHistoryInfo.encode(message.BigWinHistory[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim(); - if (message.GameId != null && Object.hasOwnProperty.call(message, "GameId")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.GameId); - return writer; - }; - - /** - * Encodes the specified SCBigWinHistory message, length delimited. Does not implicitly {@link gamehall.SCBigWinHistory.verify|verify} messages. - * @function encodeDelimited - * @memberof gamehall.SCBigWinHistory - * @static - * @param {gamehall.ISCBigWinHistory} message SCBigWinHistory message or plain object to encode - * @param {$protobuf.Writer} [writer] Writer to encode to - * @returns {$protobuf.Writer} Writer - */ - SCBigWinHistory.encodeDelimited = function encodeDelimited(message, writer) { - return this.encode(message, writer).ldelim(); - }; - - /** - * Decodes a SCBigWinHistory message from the specified reader or buffer. - * @function decode - * @memberof gamehall.SCBigWinHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @param {number} [length] Message length if known beforehand - * @returns {gamehall.SCBigWinHistory} SCBigWinHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCBigWinHistory.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.gamehall.SCBigWinHistory(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.BigWinHistory && message.BigWinHistory.length)) - message.BigWinHistory = []; - message.BigWinHistory.push($root.gamehall.BigWinHistoryInfo.decode(reader, reader.uint32())); - break; - } - case 2: { - message.GameId = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - - /** - * Decodes a SCBigWinHistory message from the specified reader or buffer, length delimited. - * @function decodeDelimited - * @memberof gamehall.SCBigWinHistory - * @static - * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from - * @returns {gamehall.SCBigWinHistory} SCBigWinHistory - * @throws {Error} If the payload is not a reader or valid buffer - * @throws {$protobuf.util.ProtocolError} If required fields are missing - */ - SCBigWinHistory.decodeDelimited = function decodeDelimited(reader) { - if (!(reader instanceof $Reader)) - reader = new $Reader(reader); - return this.decode(reader, reader.uint32()); - }; - - /** - * Verifies a SCBigWinHistory message. - * @function verify - * @memberof gamehall.SCBigWinHistory - * @static - * @param {Object.} message Plain object to verify - * @returns {string|null} `null` if valid, otherwise the reason why it is not - */ - SCBigWinHistory.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.BigWinHistory != null && message.hasOwnProperty("BigWinHistory")) { - if (!Array.isArray(message.BigWinHistory)) - return "BigWinHistory: array expected"; - for (var i = 0; i < message.BigWinHistory.length; ++i) { - var error = $root.gamehall.BigWinHistoryInfo.verify(message.BigWinHistory[i]); - if (error) - return "BigWinHistory." + error; - } - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - if (!$util.isInteger(message.GameId)) - return "GameId: integer expected"; - return null; - }; - - /** - * Creates a SCBigWinHistory message from a plain object. Also converts values to their respective internal types. - * @function fromObject - * @memberof gamehall.SCBigWinHistory - * @static - * @param {Object.} object Plain object - * @returns {gamehall.SCBigWinHistory} SCBigWinHistory - */ - SCBigWinHistory.fromObject = function fromObject(object) { - if (object instanceof $root.gamehall.SCBigWinHistory) - return object; - var message = new $root.gamehall.SCBigWinHistory(); - if (object.BigWinHistory) { - if (!Array.isArray(object.BigWinHistory)) - throw TypeError(".gamehall.SCBigWinHistory.BigWinHistory: array expected"); - message.BigWinHistory = []; - for (var i = 0; i < object.BigWinHistory.length; ++i) { - if (typeof object.BigWinHistory[i] !== "object") - throw TypeError(".gamehall.SCBigWinHistory.BigWinHistory: object expected"); - message.BigWinHistory[i] = $root.gamehall.BigWinHistoryInfo.fromObject(object.BigWinHistory[i]); - } - } - if (object.GameId != null) - message.GameId = object.GameId | 0; - return message; - }; - - /** - * Creates a plain object from a SCBigWinHistory message. Also converts values to other types if specified. - * @function toObject - * @memberof gamehall.SCBigWinHistory - * @static - * @param {gamehall.SCBigWinHistory} message SCBigWinHistory - * @param {$protobuf.IConversionOptions} [options] Conversion options - * @returns {Object.} Plain object - */ - SCBigWinHistory.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.BigWinHistory = []; - if (options.defaults) - object.GameId = 0; - if (message.BigWinHistory && message.BigWinHistory.length) { - object.BigWinHistory = []; - for (var j = 0; j < message.BigWinHistory.length; ++j) - object.BigWinHistory[j] = $root.gamehall.BigWinHistoryInfo.toObject(message.BigWinHistory[j], options); - } - if (message.GameId != null && message.hasOwnProperty("GameId")) - object.GameId = message.GameId; - return object; - }; - - /** - * Converts this SCBigWinHistory to JSON. - * @function toJSON - * @memberof gamehall.SCBigWinHistory - * @instance - * @returns {Object.} JSON object - */ - SCBigWinHistory.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - - /** - * Gets the default type url for SCBigWinHistory - * @function getTypeUrl - * @memberof gamehall.SCBigWinHistory - * @static - * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") - * @returns {string} The default type url - */ - SCBigWinHistory.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === undefined) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/gamehall.SCBigWinHistory"; - }; - - return SCBigWinHistory; - })(); - - return gamehall; -})(); - -module.exports = $root; diff --git a/protocol/server/server.pb.go b/protocol/server/server.pb.go index f3d15c9..1233d89 100644 --- a/protocol/server/server.pb.go +++ b/protocol/server/server.pb.go @@ -3286,8 +3286,7 @@ type GWSceneState struct { unknownFields protoimpl.UnknownFields RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` - CurrState int32 `protobuf:"varint,2,opt,name=CurrState,proto3" json:"CurrState,omitempty"` - Fishing int32 `protobuf:"varint,3,opt,name=Fishing,proto3" json:"Fishing,omitempty"` + RoomState int32 `protobuf:"varint,2,opt,name=RoomState,proto3" json:"RoomState,omitempty"` } func (x *GWSceneState) Reset() { @@ -3329,16 +3328,9 @@ func (x *GWSceneState) GetRoomId() int32 { return 0 } -func (x *GWSceneState) GetCurrState() int32 { +func (x *GWSceneState) GetRoomState() int32 { if x != nil { - return x.CurrState - } - return 0 -} - -func (x *GWSceneState) GetFishing() int32 { - if x != nil { - return x.Fishing + return x.RoomState } return 0 } @@ -9088,792 +9080,790 @@ var file_server_proto_rawDesc = []byte{ 0x12, 0x34, 0x0a, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x43, 0x75, 0x72, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x46, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x46, - 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x57, 0x52, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, - 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, - 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x0a, 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa7, 0x01, 0x0a, + 0x0d, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4b, 0x69, - 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, 0x44, 0x44, 0x61, 0x74, 0x61, 0x41, - 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0x83, 0x01, - 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0b, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, - 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, - 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, - 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, - 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, - 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x11, 0x43, - 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x5c, 0x0a, 0x0d, 0x47, - 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x0e, 0x47, 0x57, 0x52, - 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, 0x47, 0x52, 0x65, 0x62, 0x69, 0x6e, - 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4f, - 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6c, - 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x49, 0x64, 0x22, - 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x22, - 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x4f, 0x70, 0x12, 0x12, - 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x6e, - 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, - 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, 0x22, 0xa7, 0x02, 0x0a, - 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x49, 0x73, - 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, - 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, - 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, - 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, - 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x0f, 0x47, 0x57, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xb5, 0x01, - 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, - 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x57, 0x47, 0x53, 0x65, 0x74, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, - 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x57, 0x42, - 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x52, 0x65, 0x73, - 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, - 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, - 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x7e, 0x0a, 0x10, 0x47, - 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x12, - 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x08, - 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x22, 0x7a, 0x0a, 0x12, 0x47, - 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x42, 0x65, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, - 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, - 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, - 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x72, 0x0a, 0x0c, 0x47, 0x57, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x44, - 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0xa8, - 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, - 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x10, 0x47, 0x57, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x40, - 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, - 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x63, 0x49, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, 0x22, 0x2e, - 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5d, - 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, + 0x0a, 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, + 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, + 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, + 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, + 0x44, 0x44, 0x61, 0x74, 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, + 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, + 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x34, 0x0a, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, + 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, + 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x49, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, + 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x12, 0x2c, 0x0a, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, + 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, + 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, + 0x73, 0x22, 0x5c, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x4a, 0x0a, 0x0e, 0x47, 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, + 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, + 0x47, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, + 0x65, 0x77, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, + 0x77, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, + 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, + 0x65, 0x64, 0x4f, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, + 0x65, 0x77, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, + 0x67, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x69, 0x73, 0x72, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, + 0x6f, 0x62, 0x22, 0xa7, 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, + 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, + 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, + 0x0f, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x4f, 0x0a, - 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, - 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, - 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, - 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, + 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, + 0x6f, 0x69, 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, + 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, + 0x57, 0x47, 0x53, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, + 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x26, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, + 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, + 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, + 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x22, 0x7e, 0x0a, 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, + 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, + 0x67, 0x22, 0x7a, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, + 0x63, 0x65, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, + 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, + 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, + 0x47, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x22, 0x72, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x28, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, + 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, + 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, + 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, + 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, + 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, + 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, + 0xc2, 0x01, 0x0a, 0x10, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, + 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, + 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, + 0x47, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, + 0x65, 0x63, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, + 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, + 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x22, 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, + 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, + 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, + 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, + 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, + 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, + 0x68, 0x69, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x50, 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, + 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x41, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6c, 0x74, - 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, - 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x49, 0x6e, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4f, 0x6e, - 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, - 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, - 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, - 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x46, 0x6c, 0x6f, 0x77, - 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x43, 0x0a, 0x17, - 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x22, - 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, - 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, - 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, - 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, - 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4a, 0x61, - 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4a, 0x61, - 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, - 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, 0x0a, 0x0e, 0x57, 0x47, - 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x44, 0x12, - 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x44, 0x0a, 0x0f, 0x47, 0x57, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x12, 0x31, 0x0a, 0x06, - 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, - 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, - 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x4d, - 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, 0x22, 0x74, 0x0a, 0x1e, - 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x45, 0x6e, 0x74, 0x65, 0x72, - 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, - 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x75, 0x74, - 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, - 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, - 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, - 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x12, - 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x6e, 0x0a, 0x18, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0x4c, 0x0a, 0x16, 0x57, - 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, - 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, 0x66, 0x67, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, 0x3e, 0x0a, - 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, - 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, 0x39, 0x0a, - 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, + 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, + 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, + 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, + 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, + 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, + 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, + 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, + 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, + 0x0a, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, + 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x22, 0x43, 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, + 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, + 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, + 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, + 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, + 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x47, 0x57, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x22, - 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, + 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, + 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x22, 0x3a, 0x0a, 0x0e, 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, + 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, + 0x4f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, + 0x44, 0x0a, 0x0f, 0x47, 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, + 0x49, 0x4e, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x41, 0x75, 0x74, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, + 0x61, 0x67, 0x22, 0x74, 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, + 0x62, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x28, 0x0a, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, + 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, + 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, + 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, + 0x6e, 0x75, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, + 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, + 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, + 0x6c, 0x22, 0x6e, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, + 0x67, 0x22, 0x4c, 0x0a, 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, + 0x66, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, + 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, + 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, + 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, + 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, + 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x22, 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, + 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x22, 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, + 0x01, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x75, - 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4e, - 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x70, 0x65, - 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, - 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x4c, - 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x11, 0x57, 0x47, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, 0x47, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x75, 0x74, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4f, 0x75, 0x74, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, - 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x53, 0x53, 0x52, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x96, 0x01, 0x0a, 0x10, - 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1c, - 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, - 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, - 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x67, 0x57, 0x69, 0x6e, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x70, 0x69, - 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, - 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, 0x12, 0x1e, 0x0a, - 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x56, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x43, - 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, - 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, + 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, + 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, + 0x11, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, + 0x47, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, + 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, + 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, + 0x12, 0x53, 0x53, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, + 0x61, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, + 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, + 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, - 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0x71, 0x0a, - 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, - 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, - 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, 0x52, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x63, 0x63, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x47, 0x44, 0x54, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, + 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, + 0x67, 0x57, 0x69, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, + 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, + 0x42, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, + 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, + 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, + 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, + 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, + 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, + 0x75, 0x73, 0x74, 0x22, 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, + 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, + 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, + 0x52, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, + 0x63, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, + 0x0c, 0x57, 0x47, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, + 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, + 0xc6, 0x01, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x9b, 0x03, 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, + 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, + 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, + 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, + 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, + 0x75, 0x0a, 0x0d, 0x57, 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, + 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, + 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, - 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0c, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, - 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, - 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, - 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, - 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, - 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x9b, 0x03, 0x0a, 0x0c, - 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, - 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, - 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x65, - 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, - 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, - 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, - 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, - 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x29, - 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x0d, 0x57, 0x47, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, - 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, - 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, 0x57, 0x47, 0x53, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x12, 0x50, 0x6c, + 0x79, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, + 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, + 0x57, 0x47, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x2e, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0xaf, 0x01, 0x0a, 0x09, 0x57, - 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, - 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, - 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x22, 0x60, 0x0a, 0x10, - 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x22, 0x32, - 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x49, 0x64, 0x2a, 0xe4, 0x16, 0x0a, 0x0a, 0x53, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, - 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x10, - 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xe9, 0x07, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x54, - 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, - 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x5f, - 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x54, 0x41, - 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, 0x47, 0x5f, 0x4d, 0x55, 0x4c, 0x54, - 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x53, 0x43, 0x45, 0x4e, - 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xce, - 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xcf, 0x08, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x52, 0x4f, 0x4f, - 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, - 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x52, 0x4f, 0x50, 0x4c, 0x49, 0x4e, - 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0xd4, - 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x42, 0x49, 0x4e, 0x44, - 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x55, 0x4e, - 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x54, 0x55, 0x52, - 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xd8, - 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, - 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x45, - 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x41, - 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xdc, 0x08, - 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, - 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, 0xdd, 0x08, 0x12, 0x21, 0x0a, 0x1c, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x4b, - 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xde, 0x08, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x42, 0x49, 0x4c, - 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4e, - 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xe3, - 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, - 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, - 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x4e, 0x44, 0x10, 0xe7, - 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x46, - 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xe8, 0x08, 0x12, 0x1f, 0x0a, 0x1a, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xe9, 0x08, 0x12, 0x1e, 0x0a, - 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0xea, 0x08, 0x12, 0x19, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xed, - 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, - 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, - 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x10, 0xf0, 0x08, 0x12, 0x19, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xf3, 0x08, 0x12, - 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x57, 0x42, 0x43, - 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x41, 0x52, - 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, - 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x45, 0x57, 0x4e, - 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x22, 0xaf, 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, + 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, + 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, + 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x73, 0x22, 0x60, 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, + 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, + 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, + 0x6d, 0x6f, 0x6e, 0x64, 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x53, 0x6b, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x2a, 0xe4, 0x16, 0x0a, 0x0a, 0x53, 0x53, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, + 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, + 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, + 0x43, 0x48, 0x10, 0xe9, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, + 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, + 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x5f, 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, + 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, + 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, + 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, + 0x52, 0x4f, 0x55, 0x50, 0x54, 0x41, 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, + 0x47, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, + 0x54, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, + 0x43, 0x45, 0x4e, 0x45, 0x10, 0xce, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, + 0x10, 0xcf, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, + 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, + 0x4c, 0x45, 0x44, 0x52, 0x4f, 0x4f, 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, + 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, + 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, + 0x52, 0x4f, 0x50, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, + 0x48, 0x4f, 0x4c, 0x44, 0x10, 0xd4, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, + 0x4f, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, + 0x53, 0x49, 0x4f, 0x4e, 0x55, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, + 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, + 0x43, 0x4f, 0x52, 0x44, 0x10, 0xd8, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, + 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, + 0x49, 0x45, 0x4e, 0x43, 0x45, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, + 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, + 0x41, 0x52, 0x54, 0x10, 0xdc, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, + 0xdd, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x41, 0x47, 0x45, 0x4e, 0x54, 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x10, 0xde, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, + 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, + 0x4c, 0x55, 0x42, 0x42, 0x49, 0x4c, 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, + 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4e, 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, + 0x45, 0x53, 0x49, 0x54, 0x10, 0xe3, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, + 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, + 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, + 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, + 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, + 0x45, 0x45, 0x4e, 0x44, 0x10, 0xe7, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, + 0xe8, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, + 0x10, 0xe9, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, + 0x10, 0xea, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, + 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, + 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, + 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, + 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x10, 0xed, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, + 0x10, 0xf0, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, + 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, + 0x56, 0x45, 0x10, 0xf3, 0x08, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x57, 0x42, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x43, 0x41, 0x52, 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, + 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x53, 0x45, 0x54, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x42, 0x4c, 0x41, 0x43, - 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x52, 0x45, 0x4c, 0x49, 0x45, - 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe3, 0x0b, 0x12, 0x1a, 0x0a, 0x15, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, - 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, - 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x43, 0x4f, - 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x5f, 0x4d, 0x45, 0x53, 0x53, - 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4c, 0x4f, 0x47, - 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf0, 0x0b, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, - 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, - 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x10, - 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf4, 0x0b, - 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x52, 0x4b, 0x54, 0x41, 0x47, 0x10, - 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x43, 0x4f, - 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0xf6, 0x0b, 0x12, - 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, - 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xf7, 0x0b, 0x12, 0x24, - 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x52, 0x4f, 0x46, - 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, - 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x59, 0x10, 0xfa, 0x0b, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xfb, - 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, - 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, - 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x41, 0x53, 0x45, 0x43, 0x48, - 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x54, 0x4f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x4d, 0x41, 0x54, 0x43, - 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, - 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x4e, - 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, - 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x86, 0x0c, 0x12, 0x23, 0x0a, - 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, - 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x43, 0x45, 0x4e, 0x45, - 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, - 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x89, 0x0c, - 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, - 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, - 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, - 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8e, 0x0c, 0x12, - 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x44, 0x44, - 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8f, 0x0c, 0x12, - 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x42, 0x55, 0x59, - 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x90, 0x0c, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, - 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x45, 0x10, 0xde, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x4e, 0x45, 0x57, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, + 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, + 0x4c, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, + 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, + 0x4f, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, + 0xe3, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, + 0x45, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, + 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, + 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, + 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, + 0x45, 0x53, 0x45, 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, + 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, + 0x42, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x4c, 0x4f, 0x47, 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x10, 0xf0, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, + 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, + 0x45, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, + 0x4f, 0x49, 0x4e, 0x10, 0xf4, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, + 0x52, 0x4b, 0x54, 0x41, 0x47, 0x10, 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, + 0x4e, 0x54, 0x45, 0x52, 0x43, 0x4f, 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, + 0x55, 0x45, 0x10, 0xf6, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, + 0x54, 0x10, 0xf7, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, + 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, + 0x45, 0x4e, 0x45, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, + 0x41, 0x59, 0x10, 0xfa, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, + 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xfb, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, + 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, + 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, + 0x42, 0x41, 0x53, 0x45, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, + 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, + 0x45, 0x43, 0x54, 0x54, 0x4f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, + 0x54, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, + 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, + 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, + 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, + 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, + 0x10, 0x86, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, + 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, + 0x49, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, + 0x45, 0x4e, 0x45, 0x10, 0x89, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, + 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, + 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, + 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, + 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, + 0x53, 0x54, 0x10, 0x8e, 0x0c, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x41, 0x44, 0x44, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, + 0x53, 0x54, 0x10, 0x8f, 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x42, 0x55, 0x59, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, + 0x4d, 0x10, 0x90, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x42, + 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/server/server.proto b/protocol/server/server.proto index c6b140b..3f5d54b 100644 --- a/protocol/server/server.proto +++ b/protocol/server/server.proto @@ -439,8 +439,7 @@ message GWFishRecord { //PACKET_GW_SCENESTATE message GWSceneState { int32 RoomId = 1; - int32 CurrState = 2; - int32 Fishing = 3; + int32 RoomState = 2; } //PACKET_WR_INVITEROBOT diff --git a/protocol/tienlen/tienlen.pb.go b/protocol/tienlen/tienlen.pb.go index 9f4afc6..ae02080 100644 --- a/protocol/tienlen/tienlen.pb.go +++ b/protocol/tienlen/tienlen.pb.go @@ -93,6 +93,7 @@ const ( TienLenPacketID_PACKET_SCTienLenThinkLongCnt TienLenPacketID = 5385 // 长考次数 TienLenPacketID_PACKET_SCTienLenFirstGiveItemItem TienLenPacketID = 5386 // 第一次赠送记牌器道具 TienLenPacketID_PACKET_SCTienLenPetSkillRes TienLenPacketID = 5387 //宠物技能 + TienLenPacketID_PACKET_SCTienLenCycleBilled TienLenPacketID = 5388 // 大结算 ) // Enum value maps for TienLenPacketID. @@ -117,6 +118,7 @@ var ( 5385: "PACKET_SCTienLenThinkLongCnt", 5386: "PACKET_SCTienLenFirstGiveItemItem", 5387: "PACKET_SCTienLenPetSkillRes", + 5388: "PACKET_SCTienLenCycleBilled", } TienLenPacketID_value = map[string]int32{ "PACKET_TienLenZERO": 0, @@ -138,6 +140,7 @@ var ( "PACKET_SCTienLenThinkLongCnt": 5385, "PACKET_SCTienLenFirstGiveItemItem": 5386, "PACKET_SCTienLenPetSkillRes": 5387, + "PACKET_SCTienLenCycleBilled": 5388, } ) @@ -2291,6 +2294,117 @@ func (x *SCTienLenPetSkillRes) GetPetSkillRes() bool { return false } +type TienLenCycleBilledInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家ID + RoundScore []int64 `protobuf:"varint,2,rep,packed,name=RoundScore,proto3" json:"RoundScore,omitempty"` // 每轮得分 + Score int64 `protobuf:"varint,3,opt,name=Score,proto3" json:"Score,omitempty"` // 基础分 +} + +func (x *TienLenCycleBilledInfo) Reset() { + *x = TienLenCycleBilledInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_tienlen_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TienLenCycleBilledInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TienLenCycleBilledInfo) ProtoMessage() {} + +func (x *TienLenCycleBilledInfo) ProtoReflect() protoreflect.Message { + mi := &file_tienlen_proto_msgTypes[24] + 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 TienLenCycleBilledInfo.ProtoReflect.Descriptor instead. +func (*TienLenCycleBilledInfo) Descriptor() ([]byte, []int) { + return file_tienlen_proto_rawDescGZIP(), []int{24} +} + +func (x *TienLenCycleBilledInfo) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *TienLenCycleBilledInfo) GetRoundScore() []int64 { + if x != nil { + return x.RoundScore + } + return nil +} + +func (x *TienLenCycleBilledInfo) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +// PACKET_SCTienLenCycleBilled +type SCTienLenCycleBilled struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + List []*TienLenCycleBilledInfo `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` +} + +func (x *SCTienLenCycleBilled) Reset() { + *x = SCTienLenCycleBilled{} + if protoimpl.UnsafeEnabled { + mi := &file_tienlen_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCTienLenCycleBilled) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCTienLenCycleBilled) ProtoMessage() {} + +func (x *SCTienLenCycleBilled) ProtoReflect() protoreflect.Message { + mi := &file_tienlen_proto_msgTypes[25] + 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 SCTienLenCycleBilled.ProtoReflect.Descriptor instead. +func (*SCTienLenCycleBilled) Descriptor() ([]byte, []int) { + return file_tienlen_proto_rawDescGZIP(), []int{25} +} + +func (x *SCTienLenCycleBilled) GetList() []*TienLenCycleBilledInfo { + if x != nil { + return x.List + } + return nil +} + var File_tienlen_proto protoreflect.FileDescriptor var file_tienlen_proto_rawDesc = []byte{ @@ -2611,54 +2725,68 @@ var file_tienlen_proto_rawDesc = []byte{ 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x2a, 0x3e, 0x0a, 0x0c, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0x80, 0x05, 0x0a, 0x0f, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, - 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4f, 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, - 0x70, 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x22, 0x62, 0x0a, 0x16, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, + 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x75, + 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x52, + 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, + 0x4b, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, + 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x3e, 0x0a, 0x0c, + 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, + 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, + 0x09, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0xa2, 0x05, 0x0a, + 0x0f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, + 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, + 0x65, 0x6e, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x4f, 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, - 0x10, 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, - 0x64, 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, - 0x10, 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, - 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, 0x2a, - 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, 0x86, - 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, - 0x87, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, 0x88, - 0x2a, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, - 0x74, 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, - 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, 0x1b, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, - 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x42, 0x27, - 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4f, 0x70, 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, + 0x64, 0x10, 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, + 0x73, 0x10, 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, + 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, + 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, + 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, + 0x86, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, + 0x10, 0x87, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, + 0x88, 0x2a, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, + 0x6e, 0x74, 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, + 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, + 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, + 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x12, + 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, + 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x8c, + 0x2a, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x2f, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2674,7 +2802,7 @@ func file_tienlen_proto_rawDescGZIP() []byte { } var file_tienlen_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_tienlen_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_tienlen_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_tienlen_proto_goTypes = []interface{}{ (OpResultCode)(0), // 0: tienlen.OpResultCode (TienLenPacketID)(0), // 1: tienlen.TienLenPacketID @@ -2702,11 +2830,13 @@ var file_tienlen_proto_goTypes = []interface{}{ (*SCTienLenPlayerThinkLongCnt)(nil), // 23: tienlen.SCTienLenPlayerThinkLongCnt (*SCTienLenPlayerFirstGiveItemItem)(nil), // 24: tienlen.SCTienLenPlayerFirstGiveItemItem (*SCTienLenPetSkillRes)(nil), // 25: tienlen.SCTienLenPetSkillRes - nil, // 26: tienlen.TienLenPlayerData.ItemsEntry - nil, // 27: tienlen.SCTienLenCardTest.GradesEntry + (*TienLenCycleBilledInfo)(nil), // 26: tienlen.TienLenCycleBilledInfo + (*SCTienLenCycleBilled)(nil), // 27: tienlen.SCTienLenCycleBilled + nil, // 28: tienlen.TienLenPlayerData.ItemsEntry + nil, // 29: tienlen.SCTienLenCardTest.GradesEntry } var file_tienlen_proto_depIdxs = []int32{ - 26, // 0: tienlen.TienLenPlayerData.Items:type_name -> tienlen.TienLenPlayerData.ItemsEntry + 28, // 0: tienlen.TienLenPlayerData.Items:type_name -> tienlen.TienLenPlayerData.ItemsEntry 3, // 1: tienlen.TienLenPlayerData.SkillInfo:type_name -> tienlen.PetSkillInfo 4, // 2: tienlen.PetSkillInfo.SkillData:type_name -> tienlen.SkillInfo 2, // 3: tienlen.SCTienLenRoomInfo.Players:type_name -> tienlen.TienLenPlayerData @@ -2715,12 +2845,13 @@ var file_tienlen_proto_depIdxs = []int32{ 2, // 6: tienlen.SCTienLenPlayerEnter.Data:type_name -> tienlen.TienLenPlayerData 12, // 7: tienlen.TienLenPlayerGameBilled.AddItems:type_name -> tienlen.AddItem 13, // 8: tienlen.SCTienLenGameBilled.Datas:type_name -> tienlen.TienLenPlayerGameBilled - 27, // 9: tienlen.SCTienLenCardTest.Grades:type_name -> tienlen.SCTienLenCardTest.GradesEntry - 10, // [10:10] is the sub-list for method output_type - 10, // [10:10] is the sub-list for method input_type - 10, // [10:10] is the sub-list for extension type_name - 10, // [10:10] is the sub-list for extension extendee - 0, // [0:10] is the sub-list for field type_name + 29, // 9: tienlen.SCTienLenCardTest.Grades:type_name -> tienlen.SCTienLenCardTest.GradesEntry + 26, // 10: tienlen.SCTienLenCycleBilled.List:type_name -> tienlen.TienLenCycleBilledInfo + 11, // [11:11] is the sub-list for method output_type + 11, // [11:11] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name } func init() { file_tienlen_proto_init() } @@ -3017,6 +3148,30 @@ func file_tienlen_proto_init() { return nil } } + file_tienlen_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TienLenCycleBilledInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tienlen_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCTienLenCycleBilled); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -3024,7 +3179,7 @@ func file_tienlen_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_tienlen_proto_rawDesc, NumEnums: 2, - NumMessages: 26, + NumMessages: 28, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/tienlen/tienlen.proto b/protocol/tienlen/tienlen.proto index a5bfbd3..57b169c 100644 --- a/protocol/tienlen/tienlen.proto +++ b/protocol/tienlen/tienlen.proto @@ -29,7 +29,8 @@ enum TienLenPacketID { PACKET_SCTienLenCardTest = 5384;//测试数据 PACKET_SCTienLenThinkLongCnt = 5385; // 长考次数 PACKET_SCTienLenFirstGiveItemItem = 5386; // 第一次赠送记牌器道具 - PACKET_SCTienLenPetSkillRes = 5387; //宠物技能 + PACKET_SCTienLenPetSkillRes = 5387; //宠物技能 + PACKET_SCTienLenCycleBilled = 5388; // 大结算 } @@ -265,4 +266,16 @@ message SCTienLenPetSkillRes{ int32 Snid = 1; int32 Pos = 2; bool PetSkillRes = 3; //true生效 +} + +message TienLenCycleBilledInfo { + int32 SnId = 1; // 玩家ID + repeated int64 RoundScore = 2; // 每轮得分 + int64 Score = 3; // 基础分 + // 总积分 = RoundScore + Score +} + +// PACKET_SCTienLenCycleBilled +message SCTienLenCycleBilled { + repeated TienLenCycleBilledInfo List = 1; } \ No newline at end of file diff --git a/worldsrv/action_bag.go b/worldsrv/action_bag.go index 3049b2f..9058404 100644 --- a/worldsrv/action_bag.go +++ b/worldsrv/action_bag.go @@ -319,7 +319,7 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e GainWay: common.GainWayItemChange, Operator: "system", Remark: "背包内使用兑换", - noLog: false, + NoLog: false, }) if isF { pack.RetCode = bag.OpResultCode_OPRC_Sucess @@ -344,7 +344,7 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e GainWay: common.GainWayItemFen, Operator: "system", Remark: fmt.Sprintf("道具分解%v", msg.GetItemId()), - noLog: false, + NoLog: false, }) if isF { pack.RetCode = bag.OpResultCode_OPRC_Sucess diff --git a/worldsrv/action_friend.go b/worldsrv/action_friend.go index 13dc9e9..981a779 100644 --- a/worldsrv/action_friend.go +++ b/worldsrv/action_friend.go @@ -492,7 +492,7 @@ func (this *CSInviteFriendOpHandler) Process(s *netlib.Session, packetid int, da dbGameFree := scene.dbGameFree if dbGameFree != nil { - limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(scene.gameId), int32(scene.gameSite), scene.BaseScore) + limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(scene.gameId), scene.dbGameFree.GetSceneType(), scene.BaseScore) if p.Coin < limitCoin { logger.Logger.Warn("CSInviteFriendHandler player limitCoin") opRetCode = friend.OpResultCode_OPRC_InviteFriend_CoinLimit //金币不足 diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index db1b05b..82b55e9 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -3,6 +3,7 @@ package main import ( "fmt" "math/rand" + "slices" "time" "mongo.games.com/goserver/core/basic" @@ -96,11 +97,18 @@ func (this *CSEnterRoomHandler) Process(s *netlib.Session, packetid int, data in goto failed } + // 密码是否正确 + if scene.password != "" && scene.password != msg.GetPassword() { + code = gamehall.OpResultCode_Game_OPRC_PasswordError + logger.Logger.Trace("CSEnterRoomHandler scene is closed") + goto failed + } + dbGameFree = scene.dbGameFree if dbGameFree != nil { if common.IsLocalGame(scene.gameId) { if !p.IsRob { - limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(scene.gameId), int32(scene.gameSite), scene.BaseScore) + limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(scene.gameId), scene.dbGameFree.GetSceneType(), scene.BaseScore) if p.Coin < limitCoin { code = gamehall.OpResultCode_Game_OPRC_CoinNotEnough_Game logger.Logger.Trace("CSEnterRoomHandler scene is closed") @@ -304,7 +312,7 @@ func (this *CSQueryRoomInfoHandler) ProcessLocalGame(s *netlib.Session, packetid } if p.Platform == scene.limitPlatform.IdStr || isShow { if scene.sceneMode == int(msg.GetSceneMode()) && len(scene.players) != 0 { - if scene.gameId == int(gameid) && scene.gameSite == int(msg.GetGameSite()) { + if scene.gameId == int(gameid) && scene.dbGameFree.GetSceneType() == msg.GetGameSite() { // 私人房需要是好友 if scene.sceneMode == common.SceneMode_Private { @@ -854,110 +862,15 @@ func (this *CSCreateRoomHandler) ProcessLocalGame(s *netlib.Session, packetid in maxPlayerNum = 0 } - //创建房间 - csp = CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, dbGameFree.GetId()) - roomId = SceneMgrSingleton.GenOneCoinSceneId() - if roomId == common.RANDID_INVALID { - code = gamehall.OpResultCode_Game_OPRC_AllocRoomIdFailed_Game - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameId:%v sceneId == -1 ", p.SnId, gameId) - goto failed - } - scene, code = p.CreateLocalGameScene(roomId, int(gameId), int(gameSite), int(msg.GetSceneMode()), maxPlayerNum, - params, dbGameFree, baseScore, 0) - if scene != nil && code == gamehall.OpResultCode_Game_OPRC_Sucess_Game { - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v Create Sucess GameId:%v", p.SnId, gameId) - csp.AddScene(scene) - if !scene.PlayerEnter(p, -1, true) { - code = gamehall.OpResultCode_Game_OPRC_Error_Game + if srvdata.GameFreeMgr.IsGameDif(dbGameFree.GetGameId(), common.GameDifThirteen) { + switch msg.GetMaxPlayerNum() { + case 1: + maxPlayerNum = 8 + default: + maxPlayerNum = 4 } } -failed: - resp := &gamehall.SCCreateRoom{ - GameId: msg.GetGameId(), - BaseCoin: msg.GetBaseCoin(), - SceneMode: msg.GetSceneMode(), - MaxPlayerNum: msg.GetMaxPlayerNum(), - Params: msg.GetParams(), - OpRetCode: code, - } - proto.SetDefaults(resp) - p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_CREATEROOM), resp) - return nil -} - -func (this *CSCreateRoomHandler) ProcessThirteen(s *netlib.Session, packetid int, data interface{}, sid int64) error { - msg, ok := data.(*gamehall.CSCreateRoom) - if !ok { - return nil - } - - p := PlayerMgrSington.GetPlayer(sid) - if p == nil { - return nil - } - - var code gamehall.OpResultCode_Game - var dbGameFree *server.DB_GameFree - var dbGameRule *server.DB_GameRule - var params = common.CopySliceInt32ToInt64(msg.GetParams()) - var baseScore = msg.GetBaseCoin() - var sp ScenePolicy - var gamefreeId = msg.GetId() - var gps *webapiproto.GameFree - var maxPlayerNum = int(msg.GetMaxPlayerNum()) - var csp *CoinScenePool - var roomId int - var scene *Scene - var gameId = gamefreeId / 10000 - var spd *ScenePolicyData - - gps = PlatformMgrSingleton.GetGameFree(p.Platform, gamefreeId) - if gps == nil { - code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameFreeId:%v not exist", p.SnId, gamefreeId) - goto failed - } - - dbGameFree = gps.DbGameFree - if dbGameFree == nil { - code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameFreeId:%v not exist", p.SnId, gamefreeId) - goto failed - } - - //检测房间状态是否开启 - if !PlatformMgrSingleton.CheckGameState(p.Platform, dbGameFree.Id) { - code = gamehall.OpResultCode_Game_OPRC_GameHadClosed - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameFreeId:%v GameHadClosed", p.SnId, gamefreeId) - goto failed - } - - dbGameRule = srvdata.PBDB_GameRuleMgr.GetData(dbGameFree.GetGameRule()) - if dbGameRule == nil { - code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameFreeId:%v gamerule not exist", p.SnId, gamefreeId) - goto failed - } - - sp = GetScenePolicy(int(gameId), 0) - if sp == nil { - code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameFreeId:%v not exist", p.SnId, gamefreeId) - goto failed - } - spd, ok = sp.(*ScenePolicyData) - if ok { - //todo 参数校验 - _ = spd - - } - if p.scene != nil { - code = gamehall.OpResultCode_Game_OPRC_RoomHadExist_Game - logger.Logger.Tracef("CSCreateRoomHandler had scene(%d)", p.scene.sceneId) - goto failed - } - //创建房间 csp = CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, dbGameFree.GetId()) roomId = SceneMgrSingleton.GenOneCoinSceneId() @@ -966,18 +879,27 @@ func (this *CSCreateRoomHandler) ProcessThirteen(s *netlib.Session, packetid int logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameId:%v sceneId == -1 ", p.SnId, gameId) goto failed } - scene, code = p.CreateLocalGameScene(roomId, int(gameId), int(dbGameFree.GetSceneType()), int(msg.GetSceneMode()), - maxPlayerNum, params, dbGameFree, baseScore, 0) - if scene != nil { - if code == gamehall.OpResultCode_Game_OPRC_Sucess_Game { - logger.Logger.Tracef("CSCreateRoomHandler SnId:%v Create Sucess GameId:%v", p.SnId, gameId) - // try enter scene - csp.scenes[scene.sceneId] = scene - scene.csp = csp - if !scene.PlayerEnter(p, -1, true) { - code = gamehall.OpResultCode_Game_OPRC_Error_Game - } - } + + scene = SceneMgrSingleton.CreateScene(&CreateSceneParam{ + CreateId: p.SnId, + RoomId: roomId, + SceneMode: int(msg.GetSceneMode()), + Params: params, + Platform: p.GetPlatform(), + GF: dbGameFree, + PlayerNum: int32(maxPlayerNum), + BaseScore: baseScore, + }) + if scene == nil { + logger.Logger.Tracef("CSCreateRoomHandler CreateScene fail SnId:%v GameId:%v", p.SnId, gameId) + code = gamehall.OpResultCode_Game_OPRC_Error_Game + goto failed + } + + logger.Logger.Tracef("CSCreateRoomHandler SnId:%v Create Sucess GameId:%v", p.SnId, gameId) + csp.AddScene(scene) + if !scene.PlayerEnter(p, -1, true) { + code = gamehall.OpResultCode_Game_OPRC_Error_Game } failed: @@ -1028,7 +950,7 @@ func (this *CSAudienceSitHandler) Process(s *netlib.Session, packetid int, data } if !p.scene.IsTestScene() { // 入场限额检查 - limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(p.scene.gameId), int32(p.scene.gameSite), p.scene.BaseScore) + limitCoin := srvdata.CreateRoomMgrSington.GetLimitCoinByBaseScore(int32(p.scene.gameId), p.scene.dbGameFree.GetSceneType(), p.scene.BaseScore) if p.Coin < limitCoin { pack.OpCode = gamehall.OpResultCode_Game_OPRC_MoneyNotEnough_Game newPlayer.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_AUDIENCESIT), pack) @@ -1235,6 +1157,261 @@ failed: return nil } +func CSRoomConfigHandler(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSRoomConfigHandler Process recv ", data) + _, ok := data.(*gamehall.CSRoomConfig) + if !ok { + return nil + } + + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + return nil + } + + pack := PlatformMgrSingleton.GetRoomConfig(p.Platform) + p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SCRoomConfig), pack) + logger.Logger.Tracef("SCRoomConfig: %v", pack) + return nil +} + +func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSCreatePrivateRoomHandler Process recv ", data) + msg, ok := data.(*gamehall.CSCreatePrivateRoom) + if !ok { + return nil + } + + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + return nil + } + + var needPwd, costType, voice int64 + var password string + code := gamehall.OpResultCode_Game_OPRC_Error_Game + pack := &gamehall.SCCreatePrivateRoom{} + send := func() { + pack.OpRetCode = code + p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_CREATEPRIVATEROOM), pack) + logger.Logger.Tracef("SCCreatePrivateRoom: %v", pack) + } + + // 参数校验 + cfg := PlatformMgrSingleton.GetConfig(p.Platform).RoomConfig[msg.GetRoomConfigId()] + if cfg == nil { + send() + return nil + } + // 场次 + if !slices.Contains(cfg.GetGameFreeId(), msg.GetGameFreeId()) { + send() + return nil + } + // 局数 + if !slices.Contains(cfg.GetRound(), msg.GetRound()) { + send() + return nil + } + // 玩家数量 + if !slices.Contains(cfg.GetPlayerNum(), msg.GetPlayerNum()) { + send() + return nil + } + // 密码 + if cfg.GetNeedPassword() != 3 { + needPwd = int64(cfg.GetNeedPassword()) + } else { + needPwd = int64(msg.GetNeedPassword()) + } + if needPwd < 1 || needPwd > 2 { + needPwd = 2 // 默认不需要密码 + } + // 房费类型 + if cfg.GetCostType() != 3 { + costType = int64(cfg.GetCostType()) + } else { + costType = int64(msg.GetCostType()) + } + if costType < 1 || costType > 2 { + costType = 1 // 默认房主支付 + } + // 语音 + if cfg.GetVoice() != 3 { + voice = int64(cfg.GetVoice()) + } else { + voice = int64(msg.GetVoice()) + } + if voice < 1 || voice > 2 { + voice = 1 // 默认开启语音 + } + + // 场次是否存在 + gf := PlatformMgrSingleton.GetGameFree(p.Platform, msg.GetGameFreeId()) + if gf == nil { + code = gamehall.OpResultCode_Game_OPRC_GameHadClosed + send() + return nil + } + sp := GetScenePolicy(int(gf.GetDbGameFree().GetGameId()), int(gf.GetDbGameFree().GetGameMode())) + if sp == nil { + code = gamehall.OpResultCode_Game_OPRC_GameHadClosed + send() + return nil + } + // 游戏是否开启 + if cfg.GetOn() != common.On || gf.GetStatus() { + code = gamehall.OpResultCode_Game_OPRC_GameHadClosed + send() + return nil + } + if p.scene != nil { + code = gamehall.OpResultCode_Game_OPRC_RoomHadExist_Game + send() + return nil + } + + // 密码 + if needPwd == 1 { + password = SceneMgrSingleton.GenPassword() + } + + // 费用是否充足 + if len(cfg.GetCost()) > 0 && !sp.CostEnough(int(costType), int(msg.GetPlayerNum()), cfg, p) { + code = gamehall.OpResultCode_Game_OPRC_CostNotEnough + send() + return nil + } + + // 创建房间 + csp := CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, msg.GetGameFreeId()) + roomId := SceneMgrSingleton.GenOnePrivateSceneId() + scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ + CreateId: p.SnId, + RoomId: roomId, + SceneMode: common.SceneMode_Private, + CycleTimes: 0, + TotalRound: int(msg.GetRound()), + Params: common.CopySliceInt32ToInt64(csp.dbGameRule.GetParams()), + GS: nil, + Platform: PlatformMgrSingleton.GetPlatform(p.Platform), + GF: csp.dbGameFree, + PlayerNum: msg.GetPlayerNum(), + Password: password, + Voice: int32(voice), + Channel: cfg.GetOnChannelName(), + RoomType: PlatformMgrSingleton.GetConfig(p.Platform).RoomType[cfg.GetRoomType()], + RoomConfig: cfg, + RoomCostType: int(msg.GetCostType()), + }) + + if scene == nil { + code = gamehall.OpResultCode_Game_OPRC_SceneServerMaintain_Game + send() + return nil + } + + csp.AddScene(scene) + + if !scene.PlayerEnter(p, -1, true) { + send() + return nil + } + + pack = &gamehall.SCCreatePrivateRoom{ + OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, + GameFreeId: msg.GetGameFreeId(), + RoomTypeId: msg.GetRoomTypeId(), + RoomConfigId: msg.GetRoomConfigId(), + Round: msg.GetRound(), + PlayerNum: msg.GetPlayerNum(), + NeedPassword: int32(needPwd), + CostType: int32(costType), + Voice: int32(voice), + RoomId: int32(roomId), + Password: password, + } + send() + return nil +} + +func CSGetPrivateRoomListHandler(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSGetPrivateRoomListHandler Process recv ", data) + _, ok := data.(*gamehall.CSGetPrivateRoomList) + if !ok { + return nil + } + + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + return nil + } + + pack := &gamehall.SCGetPrivateRoomList{} + scenes := SceneMgrSingleton.FindRoomList(&FindRoomParam{ + Platform: p.Platform, + GameId: nil, + GameMode: nil, + SceneMode: nil, + RoomId: 0, + IsCustom: 1, + IsFree: 0, + GameFreeId: nil, + SnId: 0, + IsMatch: false, + IsRankMatch: false, + Channel: []string{p.LastChannel}, + }) + for _, v := range scenes { + needPassword := 0 + if v.password != "" { + needPassword = 1 + } + var players []*gamehall.PrivatePlayerInfo + for _, vv := range v.players { + players = append(players, &gamehall.PrivatePlayerInfo{ + SnId: vv.GetSnId(), + Name: vv.GetName(), + UseRoleId: vv.GetRoleId(), + }) + } + d := &gamehall.PrivateRoomInfo{ + GameFreeId: v.dbGameFree.GetId(), + GameId: v.dbGameFree.GetGameId(), + RoomTypeId: v.RoomType.GetId(), + RoomConfigId: v.RoomConfig.GetId(), + RoomId: int32(v.sceneId), + NeedPassword: int32(needPassword), + CurrRound: v.currRound, + MaxRound: v.totalRound, + CurrNum: int32(v.GetPlayerCnt()), + MaxPlayer: int32(v.playerNum), + CreateTs: v.createTime.Unix(), + State: v.SceneState, + Players: players, + } + pack.Datas = append(pack.Datas, d) + } + p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_GETPRIVATEROOMLIST), pack) + logger.Logger.Tracef("SCGetPrivateRoomList: %v", pack) + return nil +} + +func CSTouchTypeHandler(s *netlib.Session, packetId int, data interface{}, sid int64) error { + logger.Logger.Trace("CSTouchTypeHandler Process recv ", data) + _, ok := data.(*gamehall.CSTouchType) + if !ok { + return nil + } + + p := PlayerMgrSington.GetPlayer(sid) + if p == nil { + return nil + } + + return nil +} + func init() { // 返回房间 common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_RETURNROOM), &CSReturnRoomHandler{}) @@ -1266,4 +1443,12 @@ func init() { // 观众进入房间 common.Register(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM), &gamehall.CSEnterRoom{}, CSAudienceEnterRoomHandler) + // 竞技馆房间配置列表 + common.Register(int(gamehall.GameHallPacketID_PACKET_CSRoomConfig), &gamehall.CSRoomConfig{}, CSRoomConfigHandler) + // 创建竞技馆房间 + common.Register(int(gamehall.GameHallPacketID_PACKET_CS_CREATEPRIVATEROOM), &gamehall.CSCreatePrivateRoom{}, CSCreatePrivateRoomHandler) + // 竞技馆房间列表 + common.Register(int(gamehall.GameHallPacketID_PACKET_CS_GETPRIVATEROOMLIST), &gamehall.CSGetPrivateRoomList{}, CSGetPrivateRoomListHandler) + // 保持刷新 + common.Register(int(gamehall.GameHallPacketID_PACKET_CSTouchType), &gamehall.CSTouchType{}, CSTouchTypeHandler) } diff --git a/worldsrv/action_pets.go b/worldsrv/action_pets.go index 0cd716c..fe7c5b7 100644 --- a/worldsrv/action_pets.go +++ b/worldsrv/action_pets.go @@ -550,7 +550,7 @@ func CSSkinUpgrade(s *netlib.Session, packetid int, data interface{}, sid int64) GainWay: common.GainWaySkinUpGrade, Operator: "system", Remark: "皮肤升级消耗", - noLog: false, + NoLog: false, }) if !ok { logger.Logger.Errorf("CSSkinUpgrade upgrade error") @@ -604,7 +604,7 @@ func SkinUnLock(p *Player, id int32) (*pets.SkinInfo, pets.OpResultCode) { GainWay: common.GainWaySkinUnLock, Operator: "system", Remark: "皮肤解锁消耗", - noLog: false, + NoLog: false, }) if !ok { logger.Logger.Errorf("CSSKinUnLock Unlock error") diff --git a/worldsrv/action_phonelottery.go b/worldsrv/action_phonelottery.go index 65503c1..30591e1 100644 --- a/worldsrv/action_phonelottery.go +++ b/worldsrv/action_phonelottery.go @@ -402,9 +402,9 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da GainWay: common.GainWayDiamondLottery, Operator: "system", Remark: "钻石抽奖", - gameId: 0, - gameFreeId: 0, - noLog: false, + GameId: 0, + GameFreeId: 0, + NoLog: false, }) pack.LuckyScore = p.DiamondLotteryScore p.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_DiamondLottery), pack) diff --git a/worldsrv/action_player.go b/worldsrv/action_player.go index 93974ec..025416e 100644 --- a/worldsrv/action_player.go +++ b/worldsrv/action_player.go @@ -24,7 +24,6 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/proto" - gamehall_proto "mongo.games.com/game/protocol/gamehall" player_proto "mongo.games.com/game/protocol/player" webapi_proto "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/webapi" @@ -2059,13 +2058,13 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64) } // 给玩家发送三方余额状态 - statePack := &gamehall_proto.SCThridGameBalanceUpdateState{} - if player.thridBalanceReqIsSucces { - statePack.OpRetCode = gamehall_proto.OpResultCode_Game_OPRC_Sucess_Game - } else { - statePack.OpRetCode = gamehall_proto.OpResultCode_Game_OPRC_Error_Game - } - player.SendRawToClientIncOffLine(sid, s, int(gamehall_proto.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE), statePack) + //statePack := &gamehall_proto.SCThridGameBalanceUpdateState{} + //if player.thridBalanceReqIsSucces { + // statePack.OpRetCode = gamehall_proto.OpResultCode_Game_OPRC_Sucess_Game + //} else { + // statePack.OpRetCode = gamehall_proto.OpResultCode_Game_OPRC_Error_Game + //} + //player.SendRawToClientIncOffLine(sid, s, int(gamehall_proto.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE), statePack) //抽奖次数兼容老玩家 if !player.IsRob && !player.InitLotteryStatus && WelfareMgrSington.GetPhoneLotteryStatus(player.Platform) == model.WelfareOpen { diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 6728c10..429e3b5 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -73,21 +73,7 @@ func init() { p.SnId, scene.sceneId, scene.gameId, scene.gameMode) } default: - if scene.ClubId > 0 { - //if club, ok := clubManager.clubList[scene.ClubId]; ok { - // if cp, ok1 := club.memberList[p.SnId]; ok1 { - // cp.GameCount += msg.GetGameTimes() - // cp.DayCoin += msg.GetTotalConvertibleFlow() - p.TotalConvertibleFlow - // } - //} - //if !ClubSceneMgrSington.PlayerLeave(p, int(msg.GetReason())) { - // logger.Logger.Warnf("Club leave room msg snid:%v sceneid:%v gameid:%v modeid:%v [coinscene]", - // p.SnId, scene.sceneId, scene.gameId, scene.mode) - // scene.PlayerLeave(p, int(msg.GetReason())) - //} - } else { - scene.PlayerLeave(p, int(msg.GetReason())) - } + scene.PlayerLeave(p, int(msg.GetReason())) } if p.scene != nil { @@ -129,7 +115,7 @@ func init() { Platform: p.Platform, }) //比赛场不处理下面的内容 - if !scene.IsMatchScene() { + if !scene.IsMatchScene() && !scene.IsCustom() { // 破产检测 sdata := srvdata.PBDB_GameSubsidyMgr.GetData(GameSubsidyid) if sdata != nil { @@ -301,7 +287,6 @@ func init() { })) // 房间游戏状态 - // 捕鱼 netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_SCENESTATE), netlib.PacketFactoryWrapper(func() interface{} { return &serverproto.GWSceneState{} })) @@ -310,8 +295,7 @@ func init() { if msg, ok := pack.(*serverproto.GWSceneState); ok { scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId())) if scene != nil { - scene.state = msg.GetCurrState() - scene.fishing = msg.GetFishing() + scene.sp.OnSceneState(scene, int(msg.GetRoomState())) } } return nil @@ -600,8 +584,8 @@ func init() { Ts: proto.Int64(leftTime), Sec: proto.Int32(scene.StateSec), }) - gameStateMgr.BrodcastGameState(int32(scene.gameId), scene.limitPlatform.IdStr, - int(gamehallproto.GameHallPacketID_PACKET_SC_GAMESTATE), pack) + gameStateMgr.BrodcastGameState( + int32(scene.gameId), scene.limitPlatform.IdStr, int(gamehallproto.GameHallPacketID_PACKET_SC_GAMESTATE), pack) } } } diff --git a/worldsrv/action_welfare.go b/worldsrv/action_welfare.go index 72b6e23..5c8e874 100644 --- a/worldsrv/action_welfare.go +++ b/worldsrv/action_welfare.go @@ -1093,9 +1093,9 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int GainWay: common.GainWayPermitExchangeGain, Operator: "system", Remark: "赛季通行证兑换获得", - gameId: 0, - gameFreeId: 0, - noLog: false, + GameId: 0, + GameFreeId: 0, + NoLog: false, }) p.WelfData.PermitExchange[msg.GetId()] = append(p.WelfData.PermitExchange[msg.GetId()], now.Unix()) // 兑换记录 diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index 675e14f..13ae7d7 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -149,8 +149,8 @@ type ItemParam struct { Add int64 // 加成数量 GainWay int32 // 记录类型 Operator, Remark string // 操作人,备注 - gameId, gameFreeId int64 // 游戏id,场次id - noLog bool // 是否不记录日志 + GameId, GameFreeId int64 // 游戏id,场次id + NoLog bool // 是否不记录日志 LogId string // 撤销的id,道具兑换失败 } @@ -160,7 +160,7 @@ type AddItemParam struct { } func (this *BagMgr) AddItemsV2(args *ItemParam) (*BagInfo, bag.OpResultCode, bool) { - return this.AddItems(args.P, args.Change, args.Add, args.GainWay, args.Operator, args.Remark, args.gameId, args.gameFreeId, args.noLog, AddItemParam{ + return this.AddItems(args.P, args.Change, args.Add, args.GainWay, args.Operator, args.Remark, args.GameId, args.GameFreeId, args.NoLog, AddItemParam{ Cost: args.Cost, LogId: args.LogId, }) @@ -173,7 +173,7 @@ func (this *BagMgr) AddItemsV2(args *ItemParam) (*BagInfo, bag.OpResultCode, boo // remark 备注 // gameId 游戏id // gameFreeId 场次id -// noLog 是否不记录日志 +// NoLog 是否不记录日志 // Deprecated: use [ AddItemsV2 ] instead func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int32, operator, remark string, gameId, gameFreeId int64, noLog bool, params ...AddItemParam) (*BagInfo, bag.OpResultCode, bool) { @@ -758,9 +758,9 @@ func (this *BagMgr) ItemExchangeCard(p *Player, itemId int32, money, cardType in GainWay: common.GainWayItemChange, Operator: "system", Remark: "背包内使用兑换失败", - gameId: 0, - gameFreeId: 0, - noLog: false, + GameId: 0, + GameFreeId: 0, + NoLog: false, LogId: logId, }) logger.Logger.Errorf("获取兑换码失败 snid:%v itemID:%v res:%v err:%v", p.SnId, itemId, res, err) diff --git a/worldsrv/coinscenepool_base.go b/worldsrv/coinscenepool_base.go index bdc02a9..ee214c1 100644 --- a/worldsrv/coinscenepool_base.go +++ b/worldsrv/coinscenepool_base.go @@ -3,8 +3,6 @@ package main import ( "sort" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/protocol/gamehall" @@ -211,14 +209,6 @@ func (this *BaseCoinScenePool) AudienceLeave(pool *CoinScenePool, p *Player, rea func (this *BaseCoinScenePool) OnPlayerLeave(pool *CoinScenePool, s *Scene, p *Player) {} func (this *BaseCoinScenePool) NewScene(pool *CoinScenePool, p *Player) *Scene { - gameId := int(pool.dbGameFree.GetGameId()) - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Warnf("Get %v game min session failed.", gameId) - return nil - } - - gameMode := pool.dbGameFree.GetGameMode() params := common.CopySliceInt32ToInt64(pool.dbGameRule.GetParams()) limitPlatform := PlatformMgrSingleton.GetPlatform(pool.platform) if limitPlatform == nil || !limitPlatform.Isolated { @@ -226,9 +216,14 @@ func (this *BaseCoinScenePool) NewScene(pool *CoinScenePool, p *Player) *Scene { } sceneId := SceneMgrSingleton.GenOneCoinSceneId() - - scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Public, - 1, -1, params, gs, limitPlatform, 0, pool.dbGameFree, pool.ID()) + scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ + RoomId: sceneId, + SceneMode: common.SceneMode_Public, + Params: params, + GS: nil, + Platform: limitPlatform, + GF: pool.dbGameFree, + }) return scene } diff --git a/worldsrv/coinscenepool_local.go b/worldsrv/coinscenepool_local.go index 09f6c84..6ec2898 100644 --- a/worldsrv/coinscenepool_local.go +++ b/worldsrv/coinscenepool_local.go @@ -20,10 +20,10 @@ func init() { RegisterCoinScenePool(common.GameId_TienLen_yl, local) RegisterCoinScenePool(common.GameId_TienLen_toend, local) RegisterCoinScenePool(common.GameId_TienLen_yl_toend, local) - RegisterCoinScenePool(common.GameId_TaLa, local) - RegisterCoinScenePool(common.GameId_SamLoc, local) RegisterCoinScenePool(common.GameID_ThirteenFree, local) RegisterCoinScenePool(common.GameID_ThirteenFreeLaiZi, local) + //RegisterCoinScenePool(common.GameId_TaLa, local) + //RegisterCoinScenePool(common.GameId_SamLoc, local) } type CoinScenePoolLocal struct { @@ -187,14 +187,7 @@ func (l *CoinScenePoolLocal) PlayerEnter(pool *CoinScenePool, p *Player, exclude func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene { gameId := int(pool.dbGameFree.GetGameId()) - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Errorf("Get %v game min session failed.", gameId) - return nil - } - sceneId := SceneMgrSingleton.GenOneCoinSceneId() - params := pool.dbGameRule.GetParams() limitPlatform := PlatformMgrSingleton.GetPlatform(pool.platform) if limitPlatform == nil || !limitPlatform.Isolated { @@ -203,7 +196,6 @@ func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene { //根据携带金额取可创房间 DB_Createroom baseScore := int32(0) - gameSite := 0 playerTakeCoin := p.Coin var dbCreateRoom *serverproto.DB_Createroom arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr @@ -225,26 +217,26 @@ func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene { } if len(dbCreateRoom.GetBetRange()) != 0 && dbCreateRoom.GetBetRange()[0] != 0 { baseScore = common.RandInt32Slice(dbCreateRoom.GetBetRange()) - gameSite = int(dbCreateRoom.GetGameSite()) } if baseScore == 0 { logger.Logger.Tracef("CoinScenePool CreateLocalGameNewScene failed! baseScore==0") return nil } - - scene := SceneMgrSingleton.CreateLocalGameScene(p.SnId, sceneId, gameId, gameSite, common.SceneMode_Public, 1, common.CopySliceInt32ToInt64(params), - gs, limitPlatform, 0, pool.dbGameFree, baseScore, 0, pool.ID()) + scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ + CreateId: p.SnId, + RoomId: sceneId, + SceneMode: common.SceneMode_Public, + Params: common.CopySliceInt32ToInt64(params), + GS: nil, + Platform: limitPlatform, + GF: pool.dbGameFree, + BaseScore: baseScore, + }) return scene } func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene { gameId := int(pool.dbGameRule.GetGameId()) - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Warnf("Get %v game min session failed.", gameId) - return nil - } - sceneId := SceneMgrSingleton.GenOneCoinSceneId() params := pool.dbGameRule.GetParams() @@ -261,7 +253,6 @@ func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene { } //根据SceneType随机可创房间 DB_Createroom baseScore := int32(0) - gameSite := 0 var dbCreateRooms []*serverproto.DB_Createroom arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr for i := len(arrs) - 1; i >= 0; i-- { @@ -281,13 +272,19 @@ func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene { dbCreateRoom := dbCreateRooms[randIdx] if len(dbCreateRoom.GetBetRange()) != 0 && dbCreateRoom.GetBetRange()[0] != 0 { baseScore = common.RandInt32Slice(dbCreateRoom.GetBetRange()) - gameSite = int(dbCreateRoom.GetGameSite()) } if baseScore != 0 { - scene = SceneMgrSingleton.CreateLocalGameScene(0, sceneId, gameId, gameSite, common.SceneMode_Public, 1, common.CopySliceInt32ToInt64(params), - gs, limitPlatform, playerNum, pool.dbGameFree, baseScore, 0, pool.ID()) + scene = SceneMgrSingleton.CreateScene(&CreateSceneParam{ + RoomId: sceneId, + SceneMode: common.SceneMode_Public, + Params: common.CopySliceInt32ToInt64(params), + Platform: limitPlatform, + GF: pool.dbGameFree, + PlayerNum: int32(playerNum), + BaseScore: baseScore, + }) if scene != nil { - logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v baseScore:%v randIdx:%v", scene.gameId, scene.gameSite, baseScore, randIdx) + logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v baseScore:%v randIdx:%v", scene.gameId, scene.dbGameFree.GetSceneType(), baseScore, randIdx) } } } diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index 51d5c27..d78a051 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -141,7 +141,7 @@ func init() { }) PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ Platform: "1", - Id: 1, + Id: 2, Name: "{\"zh\":\"2元话费赛\",\"kh\":\"2元话费赛\",\"vi\":\"2元话费赛\",\"en\":\"2元话费赛\"}", RoomType: 1, On: 1, diff --git a/worldsrv/gameconfig.go b/worldsrv/gameconfig.go index c2c33b0..18440e5 100644 --- a/worldsrv/gameconfig.go +++ b/worldsrv/gameconfig.go @@ -124,11 +124,7 @@ func UpdateGameConfigPolicy(fullPath string) error { } if err == nil && spd.Init() { for _, m := range spd.GameMode { - //logger.Logger.Info("New game config ver:", spd.ConfigVer) - if !CheckGameConfigVer(spd.ConfigVer, spd.GameId, m) { - //TeaHouseMgr.UpdateGameConfigVer(spd.ConfigVer, spd.GameId, m) - } - RegisteScenePolicy(int(spd.GameId), int(m), spd) + RegisterScenePolicy(int(spd.GameId), int(m), spd) } } return err diff --git a/worldsrv/gamesess.go b/worldsrv/gamesess.go index 2d28dd5..872056f 100644 --- a/worldsrv/gamesess.go +++ b/worldsrv/gamesess.go @@ -160,56 +160,24 @@ func (this *GameSession) AddScene(s *Scene) { GameMode: proto.Int(s.gameMode), SceneMode: proto.Int(s.sceneMode), Params: s.params, - ParamsEx: s.paramsEx, Creator: proto.Int32(s.creator), - Agentor: proto.Int32(s.agentor), HallId: proto.Int32(s.hallId), ReplayCode: proto.String(s.replayCode), GroupId: proto.Int32(s.groupId), TotalOfGames: proto.Int32(s.totalRound), BaseScore: proto.Int32(s.BaseScore), PlayerNum: proto.Int(s.playerNum), - } - var platform *Platform - if s.limitPlatform != nil { - msg.Platform = proto.String(s.limitPlatform.IdStr) - platform = s.limitPlatform - } else { - msg.Platform = proto.String(DefaultPlatform) - platform = PlatformMgrSingleton.GetPlatform(DefaultPlatform) - } - if s.dbGameFree != nil { - msg.DBGameFree = s.dbGameFree - } else if platform != nil { - gps := PlatformMgrSingleton.GetGameFree(platform.IdStr, s.paramsEx[0]) - if gps != nil { - if gps.GroupId == 0 { - msg.DBGameFree = gps.DbGameFree - } else { - pgg := PlatformGameGroupMgrSington.GetGameGroup(gps.GroupId) - if pgg != nil { - msg.DBGameFree = pgg.DbGameFree - } - } - } + DBGameFree: s.dbGameFree, + Platform: s.limitPlatform.IdStr, } if s.IsCoinScene() { if sp, ok := s.sp.(*ScenePolicyData); ok { msg.EnterAfterStart = proto.Bool(sp.EnterAfterStart) } } - //if s.ClubId > 0 { - // msg.Club = proto.Int32(s.ClubId) - // msg.ClubRoomId = proto.String(s.clubRoomID) - // msg.ClubRoomPos = proto.Int32(s.clubRoomPos) - // msg.ClubRate = proto.Int32(s.clubRoomTax) - //} - if s.IsHundredScene() { - //msg.RealCtrl = WBCtrlCfgMgr.GetRealCtrl(s.limitPlatform.IdStr) - } // 象棋游戏添加段位配置 - if s.dbGameFree != nil && s.dbGameFree.GameDif == common.GameDifChess && platform != nil { - msg.ChessRank = ChessRankMgrSington.GetChessRankArr(platform.Name, int32(s.gameId)) + if s.dbGameFree != nil && s.dbGameFree.GameDif == common.GameDifChess { + msg.ChessRank = ChessRankMgrSington.GetChessRankArr(s.limitPlatform.Name, int32(s.gameId)) } proto.SetDefaults(msg) this.Send(int(server_proto.SSPacketID_PACKET_WG_CREATESCENE), msg) diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index aaedd3c..e7e5d77 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -201,22 +201,22 @@ func (this *HundredSceneMgr) CreateNewScene(id, groupId int32, limitPlatform *Pl dbGameRule := srvdata.PBDB_GameRuleMgr.GetData(dbGameFree.GetGameRule()) if dbGameRule != nil { gameId := int(dbGameRule.GetGameId()) - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs != nil { - sceneId := SceneMgrSingleton.GenOneHundredSceneId() - gameMode := dbGameRule.GetGameMode() - params := common.CopySliceInt32ToInt64(dbGameRule.GetParams()) - scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Public, 1, -1, params, gs, limitPlatform, groupId, dbGameFree, id) - if scene != nil { - logger.Logger.Infof("Create hundred scene %v-%v success.", gameId, sceneId) - scene.hallId = id - scene.hp = this - return scene - } else { - logger.Logger.Errorf("Create hundred scene %v-%v failed.", gameId, sceneId) - } + sceneId := SceneMgrSingleton.GenOneHundredSceneId() + params := common.CopySliceInt32ToInt64(dbGameRule.GetParams()) + scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ + RoomId: sceneId, + SceneMode: common.SceneMode_Public, + Params: params, + Platform: limitPlatform, + GF: dbGameFree, + }) + if scene != nil { + logger.Logger.Infof("Create hundred scene %v-%v success.", gameId, sceneId) + scene.hallId = id + scene.hp = this + return scene } else { - logger.Logger.Errorf("Game %v server session no found.", gameId) + logger.Logger.Errorf("Create hundred scene %v-%v failed.", gameId, sceneId) } } else { logger.Logger.Errorf("Game rule data %v no found.", dbGameFree.GetGameRule()) diff --git a/worldsrv/matchscenemgr.go b/worldsrv/matchscenemgr.go index 1016408..c2c38cf 100644 --- a/worldsrv/matchscenemgr.go +++ b/worldsrv/matchscenemgr.go @@ -23,20 +23,12 @@ type MatchSceneMgr struct { // isFinals 是否决赛 // round 第几轮 func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scene { - sceneId := SceneMgrSingleton.GenOneMatchSceneId() - gameId := int(tm.dbGameFree.GameId) - gameMode := tm.dbGameFree.GetGameMode() - // 获取游戏服务器 - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Warn("not found game server, gameid: ", gameId) - return nil - } // 平台 limitPlatform := PlatformMgrSingleton.GetPlatform(tm.Platform) if limitPlatform == nil || !limitPlatform.Isolated { limitPlatform = PlatformMgrSingleton.GetPlatform(DefaultPlatform) } + sceneId := SceneMgrSingleton.GenOneMatchSceneId() // 是否决赛 finals := int32(0) if isFinals { @@ -54,13 +46,16 @@ func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scen nextNeed = tm.gmd.MatchPromotion[round] } } - groupId := PlatformMgrSingleton.GetGameFreeGroup(tm.Platform, tm.dbGameFree.Id) // 建房参数 // 比赛唯一索引,是否决赛,第几轮,本轮总人数,下一轮总人数,赛制类型 params := []int64{tm.SortId, int64(finals), int64(round), int64(curPlayerNum), int64(nextNeed), int64(tm.gmd.MatchType)} - - scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Match, 1, - 0, params, gs, limitPlatform, groupId, tm.dbGameFree, tm.dbGameFree.GetId()) + scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ + RoomId: sceneId, + SceneMode: common.SceneMode_Match, + Params: params, + Platform: limitPlatform, + GF: tm.dbGameFree, + }) if scene != nil { scene.matchId = tm.SortId return scene diff --git a/worldsrv/platform.go b/worldsrv/platform.go index e7106ab..d71d19f 100644 --- a/worldsrv/platform.go +++ b/worldsrv/platform.go @@ -48,50 +48,48 @@ type ClubConfig struct { GiveCoinRate []int64 //会长充值额外赠送比例 } type Platform struct { - Id int32 // 平台ID - IdStr string // 字符id - Name string // 平台名称 - Isolated bool // 是否孤立(别的平台看不到) - Disable bool // 是否禁用 - Halls map[int32]*PlatformGameHall //厅 - GamePlayerNum map[int32]*PlatformGamePlayerNum //游戏人数 - dirty bool // - ServiceUrl string //客服地址 - BindOption int32 //绑定选项 - ServiceFlag bool //客服标记 是否支持浏览器跳转 false否 true是 - UpgradeAccountGiveCoin int32 //升级账号奖励金币 - NewAccountGiveCoin int32 //新账号奖励金币 - PerBankNoLimitAccount int32 //同一银行卡号绑定用户数量限制 - ExchangeMin int32 //最低兑换金额 - ExchangeLimit int32 //兑换后身上保留最低余额 - ExchangeTax int32 //兑换税收(万分比) - ExchangeFlow int32 //兑换流水比例 - ExchangeForceTax int32 //强制兑换税收 - ExchangeGiveFlow int32 //赠送兑换流水 - ExchangeFlag int32 //兑换标记 二进制 第一位:兑换税收 第二位:流水比例 - ExchangeVer int32 //兑换版本号 - ExchangeMultiple int32 //兑换基数(只能兑换此数的整数倍) - VipRange []int32 //VIP充值区间 - OtherParams string //其他参数json串 - SpreadConfig int32 //0:等级返点 1:保底返佣 - RankSwitch RankSwitch //排行榜开关 - ClubConfig *ClubConfig //俱乐部配置 - VerifyCodeType int32 //注册账号使用验证码方式 0:短信验证码 1:随机字符串 2:滑块验证码 3:不使用 - RegisterVerifyCodeSwitch bool // 关闭注册验证码 - ThirdGameMerchant map[int32]int32 //三方游戏平台状态 - CustomType int32 //客服类型 0:live800 1:美洽 2:cc - NeedDeviceInfo bool //需要获取设备信息 - NeedSameName bool //绑定的银行卡和支付宝用户名字需要相同 - ExchangeBankMax int32 //银行卡最大兑换金额 0不限制 - ExchangeAlipayMax int32 //支付宝最大兑换金额 0不限制 - DgHboConfig int32 //dg hbo配置,默认0,dg 1 hbo 2 - PerBankNoLimitName int32 //银行卡和支付宝 相同名字最大数量 - IsCanUserBindPromoter bool //是否允许用户手动绑定推广员 - UserBindPromoterPrize int32 //手动绑定奖励 - SpreadWinLose bool //是否打开客损开关 - GameConfig *GameList //平台游戏配置 - MerchantKey string //商户秘钥 - BindTelReward map[int32]int64 // 绑定手机号奖励 + Id int32 // 平台ID + IdStr string // 字符id + Name string // 平台名称 + Isolated bool // 是否孤立(别的平台看不到) + Disable bool // 是否禁用 + dirty bool // + ServiceUrl string //客服地址 + BindOption int32 //绑定选项 + ServiceFlag bool //客服标记 是否支持浏览器跳转 false否 true是 + UpgradeAccountGiveCoin int32 //升级账号奖励金币 + NewAccountGiveCoin int32 //新账号奖励金币 + PerBankNoLimitAccount int32 //同一银行卡号绑定用户数量限制 + ExchangeMin int32 //最低兑换金额 + ExchangeLimit int32 //兑换后身上保留最低余额 + ExchangeTax int32 //兑换税收(万分比) + ExchangeFlow int32 //兑换流水比例 + ExchangeForceTax int32 //强制兑换税收 + ExchangeGiveFlow int32 //赠送兑换流水 + ExchangeFlag int32 //兑换标记 二进制 第一位:兑换税收 第二位:流水比例 + ExchangeVer int32 //兑换版本号 + ExchangeMultiple int32 //兑换基数(只能兑换此数的整数倍) + VipRange []int32 //VIP充值区间 + OtherParams string //其他参数json串 + SpreadConfig int32 //0:等级返点 1:保底返佣 + RankSwitch RankSwitch //排行榜开关 + ClubConfig *ClubConfig //俱乐部配置 + VerifyCodeType int32 //注册账号使用验证码方式 0:短信验证码 1:随机字符串 2:滑块验证码 3:不使用 + RegisterVerifyCodeSwitch bool // 关闭注册验证码 + ThirdGameMerchant map[int32]int32 //三方游戏平台状态 + CustomType int32 //客服类型 0:live800 1:美洽 2:cc + NeedDeviceInfo bool //需要获取设备信息 + NeedSameName bool //绑定的银行卡和支付宝用户名字需要相同 + ExchangeBankMax int32 //银行卡最大兑换金额 0不限制 + ExchangeAlipayMax int32 //支付宝最大兑换金额 0不限制 + DgHboConfig int32 //dg hbo配置,默认0,dg 1 hbo 2 + PerBankNoLimitName int32 //银行卡和支付宝 相同名字最大数量 + IsCanUserBindPromoter bool //是否允许用户手动绑定推广员 + UserBindPromoterPrize int32 //手动绑定奖励 + SpreadWinLose bool //是否打开客损开关 + GameConfig *GameList //平台游戏配置 + MerchantKey string //商户秘钥 + BindTelReward map[int32]int64 // 绑定手机号奖励 } type GameList struct { @@ -179,12 +177,10 @@ func CompareGameFreeConfigChanged(oldCfg, newCfg *webapiproto.GameFree) bool { func NewPlatform(id int32, isolated bool) *Platform { p := &Platform{ - Id: id, - IdStr: strconv.Itoa(int(id)), - Isolated: isolated, - Halls: make(map[int32]*PlatformGameHall), - GamePlayerNum: make(map[int32]*PlatformGamePlayerNum), - ClubConfig: &ClubConfig{}, + Id: id, + IdStr: strconv.Itoa(int(id)), + Isolated: isolated, + ClubConfig: &ClubConfig{}, GameConfig: &GameList{ gameFreeId: make(map[int32]*webapiproto.GameFree), gameId: make(map[int32][]*webapiproto.GameFree), diff --git a/worldsrv/platformgamehall.go b/worldsrv/platformgamehall.go deleted file mode 100644 index dd73000..0000000 --- a/worldsrv/platformgamehall.go +++ /dev/null @@ -1,71 +0,0 @@ -package main - -import ( - "mongo.games.com/game/proto" - "mongo.games.com/game/protocol/gamehall" - "mongo.games.com/game/protocol/server" -) - -type PlatformGameHall struct { - HallId int32 //游戏厅id - Scenes map[int]*Scene //游戏房间列表 - Players map[int32]*Player //大厅中的玩家 - p *Platform //所属平台 - dbGameFree *server.DB_GameFree //厅配置数据(这里都是模板值,非后台实例数据) - dbGameRule *server.DB_GameRule //游戏配置数据(这里都是模板值,非后台实例数据) -} - -func (pgh *PlatformGameHall) PlayerLeave(p *Player) { - delete(pgh.Players, p.SnId) - if p.hallId == pgh.HallId { - p.hallId = 0 - } -} - -func (p *Player) CreateRoomPlayerInfoProtocol() *gamehall.RoomPlayerInfo { - pack := &gamehall.RoomPlayerInfo{ - SnId: proto.Int32(p.SnId), - Head: proto.Int32(p.Head), - Sex: proto.Int32(p.Sex), - Name: proto.String(p.Name), - Pos: proto.Int(p.pos), - Flag: proto.Int32(p.flag), - HeadOutLine: proto.Int32(p.HeadOutLine), - VIP: proto.Int32(p.VIP), - } - return pack -} - -func (pgh *PlatformGameHall) OnPlayerEnterScene(scene *Scene, player *Player) { - delete(pgh.Players, player.SnId) - pack := &gamehall.SCRoomPlayerEnter{ - RoomId: proto.Int(scene.sceneId), - Player: player.CreateRoomPlayerInfoProtocol(), - } - proto.SetDefaults(pack) - pgh.Broadcast(int(gamehall.GameHallPacketID_PACKET_SC_ROOMPLAYERENTER), pack, player.SnId) -} - -func (pgh *PlatformGameHall) OnPlayerLeaveScene(scene *Scene, player *Player) { - pack := &gamehall.SCRoomPlayerLeave{ - RoomId: proto.Int(scene.sceneId), - Pos: proto.Int(player.pos), - } - proto.SetDefaults(pack) - pgh.Broadcast(int(gamehall.GameHallPacketID_PACKET_SC_ROOMPLAYERLEAVE), pack, player.SnId) -} - -func (pgh *PlatformGameHall) OnDestroyScene(scene *Scene) { - delete(pgh.Scenes, scene.sceneId) - pack := &gamehall.SCDestroyRoom{ - RoomId: proto.Int(scene.sceneId), - OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, - IsForce: proto.Int(1), - } - proto.SetDefaults(pack) - pgh.Broadcast(int(gamehall.GameHallPacketID_PACKET_SC_DESTROYROOM), pack, 0) -} - -func (pgh *PlatformGameHall) Broadcast(packetid int, packet interface{}, exclude int32) { - PlatformMgrSingleton.Broadcast(packetid, packet, pgh.Players, exclude) -} diff --git a/worldsrv/player.go b/worldsrv/player.go index bcc7c3e..752df54 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -2415,23 +2415,6 @@ func (this *Player) GetIP() string { return this.Ip } -func (this *Player) CreateLocalGameScene(sceneId, gameId, gameSite, sceneMode, playerNum int, params []int64, - dbGameFree *serverproto.DB_GameFree, baseScore, groupId int32) (*Scene, hallproto.OpResultCode_Game) { - gs := GameSessMgrSington.GetMinLoadSess(gameId) - if gs == nil { - logger.Logger.Warnf("(this *Player) CreateLocalGameScene %v, %v GameSessMgrSington.GetMinLoadSess() = nil ", this.SnId, gameId) - return nil, hallproto.OpResultCode_Game_OPRC_SceneServerMaintain_Game - } - - s := SceneMgrSingleton.CreateLocalGameScene(this.SnId, sceneId, gameId, gameSite, sceneMode, 1, params, gs, - this.GetPlatform(), playerNum, dbGameFree, baseScore, groupId, dbGameFree.GetId()) - if s == nil { - logger.Logger.Tracef("(this *Player) EnterScene %v, SceneMgrSingleton.CreateScene() = nil ", this.SnId) - return nil, hallproto.OpResultCode_Game_OPRC_Error_Game - } - return s, hallproto.OpResultCode_Game_OPRC_Sucess_Game -} - func (this *Player) ReturnScene(isLoaded bool) *Scene { logger.Logger.Tracef("(this *Player) ReturnScene %v", this.SnId) if this.scene == nil { diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 8412ba9..d4af7f6 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -1,7 +1,6 @@ package main import ( - "math" "math/rand" "strconv" "time" @@ -19,15 +18,10 @@ import ( "mongo.games.com/game/proto" hallproto "mongo.games.com/game/protocol/gamehall" serverproto "mongo.games.com/game/protocol/server" + webapiproto "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/srvdata" ) -const ( - MatchSceneState_Waiting = iota //等待状态 - MatchSceneState_Running //进行状态 - MatchSceneState_Billed //结算状态 -) - const ( // PlayerHistoryModel . PlayerHistoryModel = iota + 1 @@ -45,158 +39,141 @@ type PlayerGameCtx struct { totalConvertibleFlow int64 //进房时玩家身上的总流水 } +// MatchParams 比赛场配置 +type MatchParams struct { + MatchId int64 // 比赛场id +} + +// CustomParams 房卡场配置 +type CustomParams struct { + RoomType *webapiproto.RoomType // 房卡场房间类型id + RoomConfig *webapiproto.RoomConfig // 房卡场房间配置id + RoomCostType int // 房卡收费方式 +} + // Scene 场景(房间) +// todo 结构优化 type Scene struct { - sceneId int //场景id - gameId int //游戏id - gameMode int //游戏模式(玩法) - sceneMode int //房间模式,参考common.SceneMode_XXX - params []int64 //场景参数 - paramsEx []int32 //其他扩展参数 - playerNum int //房间最大人数 - robotNum int //机器人数量 - robotLimit int //最大限制机器人数量 - preInviteRobNum int //准备邀请机器人的数量 - creator int32 //创建者账号id - agentor int32 //代理者id - replayCode string //回放码 - currRound int32 //当前第几轮 - totalRound int32 //总共几轮 - clycleTimes int32 //循环次数 - deleting bool //正在删除 - starting bool //正在开始 - closed bool //房间已关闭 - force bool //强制删除 - hadCost bool //是否已经扣过房卡 - inTeahourse bool //是否在棋牌馆 - players map[int32]*Player //玩家 - audiences map[int32]*Player //观众 - seats [9]*Player //座位 - gameSess *GameSession //所在gameserver - sp ScenePolicy //场景上的一些业务策略 - createTime time.Time //创建时间 - lastTime time.Time //最后活跃时间 - startTime time.Time //开始时间 - dirty bool //脏标记 - applyTimes map[int32]int32 //申请坐下次数 - limitPlatform *Platform //限制平台 - groupId int32 //组id - hallId int32 //厅id - state int32 //场景当前状态 - fishing int32 //渔场的鱼潮状态 - gameCtx map[int32]*PlayerGameCtx //进入房间的环境 - dbGameFree *serverproto.DB_GameFree // - ClubId int32 - clubRoomID string //俱乐部包间ID - clubRoomPos int32 // - clubRoomTax int32 // - createFee int32 //创建房间的费用 - GameLog []int32 //游戏服务器同步的录单 - JackPotFund int64 //游戏服务器同步的奖池 - State int32 //当前游戏状态,后期放到ScenePolicy里去处理 - StateTs int64 //切换到当前状态的时间 - StateSec int32 //押注状态的秒数 - BankerListNum int32 //庄家列表数量 - matchParams []int32 //比赛参数 - matchState int //比赛状态 - quitMatchSnids []int32 //退赛玩家id - gameSite int //tienlen游戏场次区分 1.初级 2.中级 3.高级场 - BaseScore int32 //tienlen游戏底分 - matchId int64 //比赛场id + sceneId int // 场景id + gameId int // 游戏id + gameMode int // 游戏模式(玩法) + sceneMode int // 房间模式,参考common.SceneMode_XXX + params []int64 // 场景参数 + playerNum int // 房间最大人数 + robotNum int // 机器人数量 + robotLimit int // 最大限制机器人数量 + preInviteRobNum int // 准备邀请机器人的数量 + creator int32 // 创建者账号id + replayCode string // 回放码 + currRound int32 // 当前第几轮 + totalRound int32 // 总共几轮,小于等于0表示无限轮 + cycleTimes int32 // 循环次数 + deleting bool // 正在删除 + starting bool // 正在开始 + closed bool // 房间已关闭 + force bool // 强制删除 + players map[int32]*Player // 玩家 + audiences map[int32]*Player // 观众 + seats [9]*Player // 座位 + gameSess *GameSession // 所在gameserver + sp ScenePolicy // 场景上的一些业务策略 + createTime time.Time // 创建时间 + lastTime time.Time // 最后活跃时间 + startTime time.Time // 开始时间 + applyTimes map[int32]int32 // 申请坐下次数 + limitPlatform *Platform // 限制平台 + groupId int32 // 组id + hallId int32 // 厅id + dbGameFree *serverproto.DB_GameFree // 场次配置 + gameCtx map[int32]*PlayerGameCtx // 进入房间的环境 + BaseScore int32 // 游戏底分,优先级,创建参数>本地配置>场次配置 + SceneState int32 // 房间当前状态 + State int32 // 当前游戏状态,后期放到ScenePolicy里去处理 + StateTs int64 // 切换到当前状态的时间 + StateSec int32 // 押注状态的秒数 + password string // 密码 + channel []string // 渠道,房卡场有渠道限制 + voice int32 // 是否开启语音 1开启 + + matchId int64 // 比赛场id + fishing int32 // 渔场的鱼潮状态 + GameLog []int32 // 游戏服务器同步的录单 + BankerListNum int32 // 庄家列表数量 + matchParams []int32 // 比赛参数 + matchState int // 比赛状态 + + CustomParams // 房卡场参数 csp *CoinScenePool // 所在场景池 hp *HundredSceneMgr // 百人场房间池 } // NewScene 创建房间 -func NewScene(agentor, creator int32, id, gameId, gameMode, sceneMode int, clycleTimes, numOfGames int32, params []int64, - gs *GameSession, limitPlatform *Platform, groupId int32, dbGameFree *serverproto.DB_GameFree, paramsEx ...int32) *Scene { +func NewScene(args *CreateSceneParam) *Scene { + gameId := int(args.GF.GetGameId()) + gameMode := int(args.GF.GetGameMode()) + gameFreeId := args.GF.GetId() + sp := GetScenePolicy(gameId, gameMode) if sp == nil { logger.Logger.Errorf("NewScene sp == nil, gameId=%v gameMode=%v", gameId, gameMode) return nil } + s := &Scene{ - sceneId: id, - hallId: dbGameFree.Id, - playerNum: 0, - creator: creator, - agentor: agentor, + sceneId: args.RoomId, + hallId: gameFreeId, + playerNum: int(args.PlayerNum), + creator: args.CreateId, gameId: gameId, gameMode: gameMode, - sceneMode: sceneMode, - params: params, - paramsEx: paramsEx, - clycleTimes: clycleTimes, + sceneMode: args.SceneMode, + params: args.Params, + cycleTimes: int32(args.CycleTimes), players: make(map[int32]*Player), audiences: make(map[int32]*Player), - gameSess: gs, + gameSess: args.GS, sp: sp, createTime: time.Now(), - limitPlatform: limitPlatform, - groupId: groupId, + limitPlatform: args.Platform, + groupId: 0, gameCtx: make(map[int32]*PlayerGameCtx), //进入房间的环境 - dbGameFree: dbGameFree, + dbGameFree: args.GF, currRound: 0, - totalRound: numOfGames, + totalRound: int32(args.TotalRound), + password: args.Password, + voice: args.Voice, + channel: args.Channel, + BaseScore: args.BaseScore, + CustomParams: CustomParams{ + RoomType: args.RoomType, + RoomConfig: args.RoomConfig, + RoomCostType: args.RoomCostType, + }, + } + // 最大房间人数 + if s.playerNum <= 0 { + s.playerNum = sp.GetPlayerNum() + } + // 底分 + if s.BaseScore <= 0 { + s.BaseScore = int32(sp.GetBaseScore()) + } + if s.BaseScore <= 0 { + s.BaseScore = s.dbGameFree.GetBaseScore() + } + if s.cycleTimes <= 0 { + s.cycleTimes = 1 + } + if s.totalRound <= 0 { + s.totalRound = 1 } - // 从房间配置参数获取,最大房间人数 - s.playerNum = int(sp.GetPlayerNum(s)) s.lastTime = s.createTime + s.replayCode = SceneMgrSingleton.AllocReplayCode() - if s.IsCoinScene() { - code := SceneMgrSingleton.AllocReplayCode() - s.replayCode = code - } if s.dbGameFree.GetMatchMode() == 0 { s.RandRobotCnt() } - if s.IsMatchScene() { - s.BaseScore = 10 - } - s.sp.OnStart(s) - return s -} - -func NewLocalGameScene(creator int32, sceneId, gameId, gameSite, sceneMode int, clycleTimes int32, params []int64, - gs *GameSession, limitPlatform *Platform, playerNum int, dbGameFree *serverproto.DB_GameFree, baseScore, groupId int32, paramsEx ...int32) *Scene { - sp := GetScenePolicy(gameId, 0) - if sp == nil { - logger.Logger.Errorf("NewLocalGameScene sp == nil, gameId=%v ", gameId) - return nil - } - s := &Scene{ - sceneId: sceneId, - hallId: dbGameFree.Id, - playerNum: playerNum, - creator: creator, - gameId: gameId, - sceneMode: sceneMode, - params: params, - paramsEx: paramsEx, - clycleTimes: clycleTimes, - players: make(map[int32]*Player), - audiences: make(map[int32]*Player), - gameSess: gs, - sp: sp, - createTime: time.Now(), - limitPlatform: limitPlatform, - groupId: groupId, - gameCtx: make(map[int32]*PlayerGameCtx), //进入房间的环境 - dbGameFree: dbGameFree, - gameSite: gameSite, - BaseScore: baseScore, - } - if s.playerNum <= 0 { - s.playerNum = int(sp.GetPlayerNum(s)) - } - if s.BaseScore <= 0 { - s.BaseScore = int32(sp.GetBaseCoin(s)) - } - s.lastTime = s.createTime - - code := SceneMgrSingleton.AllocReplayCode() - s.replayCode = code s.sp.OnStart(s) return s } @@ -205,9 +182,6 @@ func (this *Scene) RebindPlayerSnId(oldSnId, newSnId int32) { if this.creator == oldSnId { this.creator = newSnId } - if this.agentor == oldSnId { - this.agentor = newSnId - } if p, exist := this.players[oldSnId]; exist { delete(this.players, oldSnId) this.players[newSnId] = p @@ -234,18 +208,16 @@ func (this *Scene) GetPlayerGameCtx(snid int32) *PlayerGameCtx { return nil } +// PlayerEnter 玩家进入场景 +// todo 优化 func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { logger.Logger.Infof("(this *Scene:%v) PlayerEnter(%v, %v) ", this.sceneId, p.SnId, pos) - if p.IsRob { - if this.robotLimit != 0 { - if !model.GameParamData.IsRobFightTest { - //增加所有机器人对战场的 - if this.robotNum+1 > this.robotLimit { - logger.Logger.Warnf("(this *Scene:%v) PlayerEnter(%v) robot num limit(%v)", this.sceneId, p.SnId, this.robotLimit) - return false - } - } + // 机器人数量限制 + if p.IsRobot() && this.robotLimit != 0 { + if this.robotNum+1 > this.robotLimit { + logger.Logger.Warnf("(this *Scene:%v) PlayerEnter(%v) robot num limit(%v)", this.sceneId, p.SnId, this.robotLimit) + return false } } @@ -275,10 +247,6 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { } } - p.scene = this - this.players[p.SnId] = p - this.gameSess.AddPlayer(p) - // 如果正在等待比赛,退赛 if !this.IsMatchScene() { isWaiting, tmid := TournamentMgr.IsMatchWaiting(p.Platform, p.SnId) @@ -287,10 +255,14 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { } } + p.scene = this + this.players[p.SnId] = p + this.gameSess.AddPlayer(p) + takeCoin := p.Coin leaveCoin := int64(0) gameTimes := rand.Int31n(100) - matchParams := []int32{} //排名、段位、假snid、假角色、假皮肤 + var matchParams []int32 //排名、段位、假snid、假角色、假皮肤 if this.IsMatchScene() && p.matchCtx != nil { takeCoin = int64(p.matchCtx.grade) @@ -303,144 +275,106 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { matchParams = append(matchParams, p.matchCtx.copySnid) //假snid matchParams = append(matchParams, p.matchCtx.copyRoleId) //假RoleId matchParams = append(matchParams, p.matchCtx.copySkinId) //假SkinId - } else { - if p.IsRob { - if len(this.paramsEx) > 0 { //机器人携带金币动态调整 - gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.paramsEx[0]) - if gps != nil { - dbGameFree := gps.DbGameFree - if gps.GroupId != 0 { - pgg := PlatformGameGroupMgrSington.GetGameGroup(gps.GroupId) - if pgg != nil { - dbGameFree = pgg.DbGameFree + } + + if this.IsCustom() { + takeCoin = 1000 + } + + if p.IsRob && !this.IsMatchScene() && !this.IsCustom() { + if this.dbGameFree != nil { //机器人携带金币动态调整 + gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.dbGameFree.GetId()) + if gps != nil { + dbGameFree := gps.DbGameFree + flag := false + if common.IsLocalGame(this.gameId) { + baseScore := this.BaseScore + arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr + tmpIds := []int32{} + for i := 0; i < len(arrs); i++ { + arr := arrs[i] + if int(arr.GameId) == this.gameId && arr.GameSite == this.dbGameFree.GetSceneType() { + betRange := arr.GetBetRange() + if len(betRange) == 0 { + continue + } + for j := 0; j < len(betRange); j++ { + if betRange[j] == baseScore && len(arr.GetGoldRange()) > 0 && arr.GetGoldRange()[0] != 0 { + tmpIds = append(tmpIds, arr.GetId()) + break + } + } } } - - flag := false - if common.IsLocalGame(this.gameId) { - baseScore := this.BaseScore - arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr - tmpIds := []int32{} - for i := 0; i < len(arrs); i++ { - arr := arrs[i] - if int(arr.GameId) == this.gameId && int(arr.GameSite) == this.gameSite { - betRange := arr.GetBetRange() - if len(betRange) == 0 { - continue - } - for j := 0; j < len(betRange); j++ { - if betRange[j] == baseScore && len(arr.GetGoldRange()) > 0 && arr.GetGoldRange()[0] != 0 { - tmpIds = append(tmpIds, arr.GetId()) - break - } + if len(tmpIds) > 0 { + randId := common.RandInt32Slice(tmpIds) + crData := srvdata.PBDB_CreateroomMgr.GetData(randId) + if crData != nil { + goldRange := crData.GetGoldRange() + if len(goldRange) == 2 { + takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), int64(goldRange[1])) + flag = true + } else if len(goldRange) == 1 { + takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), 2*int64(goldRange[0])) + flag = true + } + leaveCoin = int64(goldRange[0]) + for _, id := range tmpIds { + tmp := srvdata.PBDB_CreateroomMgr.GetData(id).GetGoldRange() + if int64(tmp[0]) < leaveCoin && tmp[0] != 0 { + leaveCoin = int64(tmp[0]) } } } - if len(tmpIds) > 0 { - randId := common.RandInt32Slice(tmpIds) - crData := srvdata.PBDB_CreateroomMgr.GetData(randId) - if crData != nil { - goldRange := crData.GetGoldRange() - if len(goldRange) == 2 { - takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), int64(goldRange[1])) - flag = true - } else if len(goldRange) == 1 { - takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), 2*int64(goldRange[0])) - flag = true - } - leaveCoin = int64(goldRange[0]) - for _, id := range tmpIds { - tmp := srvdata.PBDB_CreateroomMgr.GetData(id).GetGoldRange() - if int64(tmp[0]) < leaveCoin && tmp[0] != 0 { - leaveCoin = int64(tmp[0]) - } - } - } - } else { - logger.Logger.Warn("gameId: ", this.gameId, " gameSite: ", this.gameSite, " baseScore: ", baseScore) - } - if leaveCoin > takeCoin { - logger.Logger.Warn("robotSnId: ", p.SnId, " baseScore: ", baseScore, " takeCoin: ", takeCoin, " leaveCoin: ", leaveCoin) - } - if takeCoin > p.Coin { - p.Coin = takeCoin - } + } else { + logger.Logger.Warn("gameId: ", this.gameId, " gameSite: ", this.dbGameFree.GetSceneType(), " baseScore: ", baseScore) } - //if !flag && this.IsCoinScene() && !this.IsTestScene() { - // if expectEnterCoin, expectLeaveCoin, ExpectGameTime, ok := RobotCarryMgrEx.RandOneCarry(dbGameFree.GetId()); ok && expectEnterCoin > dbGameFree.GetLimitCoin() && expectEnterCoin < dbGameFree.GetMaxCoinLimit() { - // takeCoin = int64(expectEnterCoin) - // leaveCoin = int64(expectLeaveCoin) - // //如果带入金币和离开金币比较接近,就调整离开金币值 - // var delta = takeCoin - leaveCoin - // if math.Abs(float64(delta)) < float64(takeCoin/50) { - // if leaveCoin = takeCoin + delta*(10+rand.Int63n(50)); leaveCoin < 0 { - // leaveCoin = 0 - // } - // } - // gameTimes = ExpectGameTime * 2 - // flag = true - // } - //} - - if !flag { - takerng := dbGameFree.GetRobotTakeCoin() - if len(takerng) >= 2 && takerng[1] > takerng[0] { - if takerng[0] < dbGameFree.GetLimitCoin() { - takerng[0] = dbGameFree.GetLimitCoin() - } - takeCoin = int64(common.RandInt(int(takerng[0]), int(takerng[1]))) - } else { - maxlimit := int64(dbGameFree.GetMaxCoinLimit()) - if maxlimit != 0 && p.Coin > maxlimit { - logger.Logger.Trace("Player coin:", p.Coin) - //在下限和上限之间随机,并对其的100的整数倍 - takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) - logger.Logger.Trace("Take coin:", takeCoin) - } - if maxlimit == 0 && this.IsCoinScene() { - maxlimit = int64(common.RandInt(10, 50)) * int64(dbGameFree.GetLimitCoin()) - takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) - logger.Logger.Trace("Take coin:", takeCoin) - } - } - takeCoin = takeCoin / 100 * 100 - //离场金币 - leaverng := dbGameFree.GetRobotLimitCoin() - if len(leaverng) >= 2 { - leaveCoin = int64(leaverng[0] + rand.Int63n(leaverng[1]-leaverng[0])) - } - } - - // 象棋积分 - chessScore := dbGameFree.GetChessScoreParams() - if len(chessScore) == 2 { - p.ChessGrade = int64(common.RandInt(int(chessScore[0]), int(chessScore[1]))) - } - - bankerLimit := this.dbGameFree.GetBanker() - if bankerLimit != 0 { - //上庄AI携带 - if /*this.gameId == common.GameId_HundredBull ||*/ - this.gameId == common.GameId_RollCoin || - this.gameId == common.GameId_RollAnimals || - this.gameId == common.GameId_DragonVsTiger || - this.gameId == common.GameId_Baccarat { - if this.BankerListNum < 3 { - if rand.Intn(100) < 5 { - randCoin := int64(math.Floor(float64(bankerLimit) * 1 / float64(this.dbGameFree.GetSceneType()))) - takeCoin = rand.Int63n(randCoin) + int64(bankerLimit) - if takeCoin > p.Coin { - //加钱速度慢 暂时不用 - //ExePMCmd(p.gateSess, fmt.Sprintf("%v%v%v", common.PMCmd_AddCoin, common.PMCmd_SplitToken, takeCoin)) - } - } - } - } + if leaveCoin > takeCoin { + logger.Logger.Warn("robotSnId: ", p.SnId, " baseScore: ", baseScore, " takeCoin: ", takeCoin, " leaveCoin: ", leaveCoin) } if takeCoin > p.Coin { p.Coin = takeCoin } } + + if !flag { + takerng := dbGameFree.GetRobotTakeCoin() + if len(takerng) >= 2 && takerng[1] > takerng[0] { + if takerng[0] < dbGameFree.GetLimitCoin() { + takerng[0] = dbGameFree.GetLimitCoin() + } + takeCoin = int64(common.RandInt(int(takerng[0]), int(takerng[1]))) + } else { + maxlimit := int64(dbGameFree.GetMaxCoinLimit()) + if maxlimit != 0 && p.Coin > maxlimit { + logger.Logger.Trace("Player coin:", p.Coin) + //在下限和上限之间随机,并对其的100的整数倍 + takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) + logger.Logger.Trace("Take coin:", takeCoin) + } + if maxlimit == 0 && this.IsCoinScene() { + maxlimit = int64(common.RandInt(10, 50)) * int64(dbGameFree.GetLimitCoin()) + takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) + logger.Logger.Trace("Take coin:", takeCoin) + } + } + takeCoin = takeCoin / 100 * 100 + //离场金币 + leaverng := dbGameFree.GetRobotLimitCoin() + if len(leaverng) >= 2 { + leaveCoin = int64(leaverng[0] + rand.Int63n(leaverng[1]-leaverng[0])) + } + } + + // 象棋积分 + chessScore := dbGameFree.GetChessScoreParams() + if len(chessScore) == 2 { + p.ChessGrade = int64(common.RandInt(int(chessScore[0]), int(chessScore[1]))) + } + + if takeCoin > p.Coin { + p.Coin = takeCoin + } } } } @@ -464,13 +398,6 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { gateSid = sessionId.Get() } } - isQuMin := false - //if !p.IsRob { - // pt := PlatformMgrSingleton.GetPackageTag(p.PackageID) - // if pt != nil && pt.SpreadTag == 1 { - // isQuMin = true - // } - //} msg := &serverproto.WGPlayerEnter{ Sid: proto.Int64(p.sid), SnId: proto.Int32(p.SnId), @@ -478,17 +405,9 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { SceneId: proto.Int(this.sceneId), PlayerData: data, IsLoaded: proto.Bool(ischangeroom), - IsQM: proto.Bool(isQuMin), IParams: p.MarshalIParam(), SParams: p.MarshalSParam(), CParams: p.MarshalCParam(), - } - //sa, err2 := p.MarshalSingleAdjustData(this.dbGameFree.Id) - //if err2 == nil && sa != nil { - // msg.SingleAdjust = sa - //} - if this.ClubId != 0 { - } p.takeCoin = takeCoin p.sceneCoin = takeCoin @@ -880,6 +799,14 @@ func (this *Scene) IsPrivateScene() bool { return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId || this.sceneMode == common.SceneMode_Private } +// IsCustom 房卡场房间 +func (this *Scene) IsCustom() bool { + if this.dbGameFree == nil { + return false + } + return this.dbGameFree.IsCustom > 0 +} + // IsSceneMode 房间模式 func (this *Scene) IsSceneMode(mode int) bool { return this.sceneMode == mode @@ -898,12 +825,6 @@ func (this *Scene) IsTestScene() bool { if this.dbGameFree != nil { return this.dbGameFree.GetSceneType() == -1 } - if len(this.paramsEx) > 0 { - dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(this.paramsEx[0]) - if dbGameFree != nil { - return dbGameFree.GetSceneType() == -1 - } - } return false } @@ -911,12 +832,6 @@ func (this *Scene) GetSceneName() string { if this.dbGameFree != nil { return this.dbGameFree.GetName() + this.dbGameFree.GetTitle() } - if len(this.paramsEx) > 0 { - dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(this.paramsEx[0]) - if dbGameFree != nil { - return dbGameFree.GetName() + dbGameFree.GetTitle() - } - } return "[unknow scene name]" } @@ -935,30 +850,6 @@ func (this *Scene) RandRobotCnt() { } return } - - if len(this.paramsEx) > 0 { - gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.paramsEx[0]) - if gps != nil { - dbGameFree := gps.DbGameFree - if gps.GroupId != 0 { - pgg := PlatformGameGroupMgrSington.GetGameGroup(gps.GroupId) - if pgg != nil { - dbGameFree = pgg.DbGameFree - } - } - numrng := dbGameFree.GetRobotNumRng() - if len(numrng) >= 2 { - if numrng[1] == numrng[0] { - this.robotLimit = int(numrng[0]) - } else { - if numrng[1] < numrng[0] { - numrng[1], numrng[0] = numrng[0], numrng[1] - } - this.robotLimit = int(numrng[1]) //int(numrng[0] + rand.Int31n(numrng[1]-numrng[0]) + 1) - } - } - } - } } func (this *Scene) IsPlatform(platform string) bool { @@ -1075,21 +966,6 @@ func (this *Scene) IsPreCreateScene() bool { return this.dbGameFree.GetCreateRoomNum() > 0 } -func (this *Scene) GetParamEx(idx int) int32 { - if idx < 0 || idx > len(this.paramsEx) { - return -1 - } - - return this.paramsEx[idx] -} - -func (this *Scene) SetParamEx(idx int, val int32) { - cnt := len(this.paramsEx) - if idx >= 0 && idx < cnt { - this.paramsEx[idx] = val - } -} - func (this *Scene) TryForceDeleteMatchInfo() { if !this.IsMatchScene() { return diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index f86165e..2453f51 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -2,7 +2,9 @@ package main import ( "math" + "slices" "sort" + "strconv" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/srvlib" @@ -24,6 +26,7 @@ var SceneMgrSingleton = &SceneMgr{ matchAutoId: common.MatchSceneStartId, coinSceneAutoId: common.CoinSceneStartId, hundredSceneAutoId: common.HundredSceneStartId, + password: make(map[string]struct{}), } // SceneMgr 房间管理器 @@ -31,10 +34,11 @@ type SceneMgr struct { BaseClockSinker // 驱动时间事件 scenes map[int]*Scene // 房间id: Scene - privateAutoId int // 私人房房间号 - matchAutoId int // 比赛场房间号 - coinSceneAutoId int // 金币场房间号 - hundredSceneAutoId int // 百人场房间号 + privateAutoId int // 私人房房间号 + matchAutoId int // 比赛场房间号 + coinSceneAutoId int // 金币场房间号 + hundredSceneAutoId int // 百人场房间号 + password map[string]struct{} // 密码 } // AllocReplayCode 获取回访码 @@ -79,6 +83,29 @@ func (m *SceneMgr) GenOneMatchSceneId() int { return m.matchAutoId } +func (m *SceneMgr) GenPassword() string { + for i := 0; i < 100; i++ { + s := strconv.Itoa(common.RandInt(10000, 100000)) + if _, ok := m.password[s]; !ok { + m.password[s] = struct{}{} + return s + } + } + return "" +} + +func (m *SceneMgr) GenPasswordInt32() int32 { + for i := 0; i < 100; i++ { + s := strconv.Itoa(common.RandInt(10000, 100000)) + if _, ok := m.password[s]; !ok { + m.password[s] = struct{}{} + n, _ := strconv.Atoi(s) + return int32(n) + } + } + return 0 +} + func (m *SceneMgr) GetPlatformBySceneId(sceneId int) string { s := m.GetScene(sceneId) if s != nil && s.limitPlatform != nil { @@ -145,7 +172,7 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode roomInfo := make([]*webapiproto.RoomInfo, 0, len(m.scenes)) var isNeedFindAll = false if model.GameParamData.IsFindRoomByGroup && platform != "" && snId != 0 && gameId == 0 && - gameMode == 0 && sceneId == -1 && groupId == 0 && clubId == 0 && sceneMode == 0 { + gameMode == 0 && sceneId == -1 && groupId == 0 && sceneMode == 0 { p := PlayerMgrSington.GetPlayerBySnId(snId) if p != nil && p.Platform == platform { isNeedFindAll = true @@ -155,7 +182,7 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode if (((s.limitPlatform != nil && s.limitPlatform.IdStr == platform) || platform == "") && ((s.gameId == gameId && s.gameMode == gameMode) || gameId == 0) && (s.sceneId == sceneId || sceneId == 0) && (s.groupId == int32(groupId) || groupId == 0) && - (s.ClubId == int32(clubId) || clubId == 0) && (s.dbGameFree.GetId() == gameFreeId || gameFreeId == 0) && + (s.dbGameFree.GetId() == gameFreeId || gameFreeId == 0) && (s.sceneMode == sceneMode || sceneMode == -1)) || isNeedFindAll { var platformName string if s.limitPlatform != nil { @@ -170,19 +197,13 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode SceneMode: int32(s.sceneMode), GroupId: s.groupId, Creator: s.creator, - Agentor: s.agentor, ReplayCode: s.replayCode, Params: common.CopySliceInt64ToInt32(s.params), PlayerCnt: int32(len(s.players) - s.robotNum), RobotCnt: int32(s.robotNum), CreateTime: s.createTime.Unix(), BaseScore: s.dbGameFree.BaseScore, - } - if common.IsLocalGame(s.gameId) { - si.BaseScore = s.BaseScore - } - if s.paramsEx != nil && len(s.paramsEx) > 0 { - si.GameFreeId = s.paramsEx[0] + GameFreeId: s.dbGameFree.GetId(), } if s.starting { si.Start = 1 @@ -264,54 +285,138 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode return nil, 0, int32(roomSum) } -// CreateScene 创建房间 -func (m *SceneMgr) CreateScene(agentor, creator int32, sceneId, gameId, gameMode, sceneMode int, clycleTimes int32, - numOfGames int32, params []int64, gs *GameSession, limitPlatform *Platform, groupId int32, dbGameFree *serverproto.DB_GameFree, - paramsEx ...int32) *Scene { - logger.Logger.Trace("(this *SceneMgr) CreateScene ") - // 创建房间 - s := NewScene(agentor, creator, sceneId, gameId, gameMode, sceneMode, clycleTimes, numOfGames, params, gs, limitPlatform, groupId, - dbGameFree, paramsEx...) - if s == nil { - return nil - } - m.scenes[sceneId] = s - - // 创建水池 - if !s.IsMatchScene() && dbGameFree != nil && limitPlatform != nil { - //平台水池设置 - gs.DetectCoinPoolSetting(limitPlatform.IdStr, dbGameFree.GetId(), s.groupId) - } - - // 添加到游戏服记录中 - gs.AddScene(s) - var platformName string - if limitPlatform != nil { - platformName = limitPlatform.IdStr - } - logger.Logger.Infof("(this *SceneMgr) CreateScene (gameId=%v, mode=%v), SceneId=%v groupid=%v platform=%v", - gameId, gameMode, sceneId, groupId, platformName) - return s +type FindRoomParam struct { + Platform string + GameId []int + GameMode []int + SceneMode []int + RoomId int32 + IsCustom int32 // 房卡场 + IsFree int32 // 自由桌 + GameFreeId []int32 // 场次id + SnId int32 // 玩家id + IsMatch bool // 比赛场 + IsRankMatch bool // 排位赛 + Channel []string // 渠道 } -// CreateLocalGameScene 创建本地游戏房间 -func (m *SceneMgr) CreateLocalGameScene(creator int32, sceneId, gameId, gameSite, sceneMode int, clycleTimes int32, params []int64, - gs *GameSession, limitPlatform *Platform, playerNum int, dbGameFree *serverproto.DB_GameFree, baseScore, groupId int32, - paramsEx ...int32) *Scene { - logger.Logger.Trace("(this *SceneMgr) CreateLocalGameScene gameSite: ", gameSite, " sceneMode: ", sceneMode) - s := NewLocalGameScene(creator, sceneId, gameId, gameSite, sceneMode, clycleTimes, params, gs, limitPlatform, playerNum, dbGameFree, - baseScore, groupId, paramsEx...) +func (m *SceneMgr) FindRoomList(args *FindRoomParam) []*Scene { + ret := make([]*Scene, 0) + for _, v := range m.scenes { + if args.Platform != "" && v.limitPlatform.IdStr != args.Platform { + continue + } + if len(args.GameId) > 0 { + if !slices.Contains(args.GameId, int(v.dbGameFree.GetGameId())) { + continue + } + } + if len(args.GameMode) > 0 { + if !slices.Contains(args.GameMode, int(v.dbGameFree.GetGameMode())) { + continue + } + } + if len(args.SceneMode) > 0 { + if !slices.Contains(args.SceneMode, v.sceneMode) { + continue + } + } + if args.RoomId > 0 && v.sceneId != int(args.RoomId) { + continue + } + if args.IsCustom == 1 && v.dbGameFree.GetIsCustom() != args.IsCustom { + continue + } + if args.IsFree == 1 && v.dbGameFree.GetFreeMode() != args.IsFree { + continue + } + if len(args.GameFreeId) > 0 { + if !slices.Contains(args.GameFreeId, v.dbGameFree.GetId()) { + continue + } + } + if args.SnId > 0 && v.GetPlayer(args.SnId) == nil { + continue + } + if args.IsMatch && !v.IsMatchScene() { + continue + } + if args.IsRankMatch && !v.IsRankMatch() { + continue + } + if len(args.Channel) > 0 { + has := false + for _, vv := range args.Channel { + if slices.Contains(v.channel, vv) { + has = true + break + } + } + if !has { + continue + } + } + + if v.deleting || v.closed || v.force { + continue + } + + ret = append(ret, v) + } + return ret +} + +type CreateSceneParam struct { + CreateId int32 // 创建者id + RoomId int // 房间id + SceneMode int // 公共,私人,赛事 + CycleTimes int // 循环次数 + TotalRound int // 总轮数 + Params []int64 // 房间参数 + GS *GameSession + Platform *Platform + GF *serverproto.DB_GameFree + PlayerNum int32 // 玩家最大数量 + Password string + Voice int32 // 1开启 + Channel []string + RoomType *webapiproto.RoomType + RoomConfig *webapiproto.RoomConfig + BaseScore int32 + RoomCostType int +} + +// CreateScene 创建房间 +func (m *SceneMgr) CreateScene(args *CreateSceneParam) *Scene { + logger.Logger.Tracef("SceneMgr NewScene %v", args) + if args.GF == nil { + return nil + } + if args.Platform == nil { + return nil + } + if args.GS == nil { + args.GS = GameSessMgrSington.GetMinLoadSess(int(args.GF.GetGameId())) + } + if args.GS == nil { + return nil + } + + // 创建房间 + s := NewScene(args) if s == nil { return nil } - m.scenes[sceneId] = s + m.scenes[args.RoomId] = s + // 添加到游戏服记录中 + args.GS.AddScene(s) + logger.Logger.Infof("SceneMgr NewScene Platform:%v %+v", args.Platform.IdStr, args) - gs.AddScene(s) - var platformName string - if limitPlatform != nil { - platformName = limitPlatform.IdStr + // 创建水池 + if !s.IsMatchScene() && s.dbGameFree != nil && s.limitPlatform != nil { + //平台水池设置 + args.GS.DetectCoinPoolSetting(s.limitPlatform.IdStr, s.dbGameFree.GetId(), s.groupId) } - logger.Logger.Infof("(this *SceneMgr) CreateScene (gameId=%v), SceneId=%v platform=%v", gameId, sceneId, platformName) return s } @@ -338,6 +443,7 @@ func (m *SceneMgr) DestroyScene(sceneId int, isCompleted bool) { s.gameSess.DelScene(s) s.OnClose() delete(m.scenes, s.sceneId) + delete(m.password, s.password) logger.Logger.Infof("(this *SceneMgr) DestroyScene, SceneId=%v", sceneId) } diff --git a/worldsrv/scenepolicy.go b/worldsrv/scenepolicy.go index b475651..38d7630 100644 --- a/worldsrv/scenepolicy.go +++ b/worldsrv/scenepolicy.go @@ -1,50 +1,45 @@ package main -import "mongo.games.com/goserver/core/logger" +import "mongo.games.com/game/protocol/webapi" -// 根据不同的房间模式,选择不同的房间业务策略 -var ScenePolicyPool map[int]map[int]ScenePolicy = make(map[int]map[int]ScenePolicy) +// ScenePolicyPool 根据不同的房间模式,选择不同的房间业务策略 +var ScenePolicyPool = make(map[int]map[int]ScenePolicy) type ScenePolicy interface { - //场景开启事件 + // OnStart 场景开启事件 OnStart(s *Scene) - //场景关闭事件 + // OnStop 场景关闭事件 OnStop(s *Scene) - //场景心跳事件 + // OnTick 场景心跳事件 OnTick(s *Scene) - //玩家进入事件 + // OnPlayerEnter 玩家进入事件 OnPlayerEnter(s *Scene, p *Player) - //玩家离开事件 + // OnPlayerLeave 玩家离开事件 OnPlayerLeave(s *Scene, p *Player) - //系统维护关闭事件 + // OnShutdown 系统维护关闭事件 OnShutdown(s *Scene) - //获得场景的匹配因子(值越大越优先选择) - GetFitFactor(s *Scene, p *Player) int - //能否创建 - CanCreate(s *Scene, p *Player, mode, sceneType int, params []int32, isAgent bool) (bool, []int32) - //能否进入 + // OnSceneState 房间状态变更 + OnSceneState(s *Scene, state int) + // OnGameState 游戏状态变更 + OnGameState(s *Scene, state int) + + // CanEnter 能否进入 CanEnter(s *Scene, p *Player) int - //房间座位是否已满 - IsFull(s *Scene, p *Player, num int32) bool - //是否可以强制开始 - IsCanForceStart(s *Scene) bool - //结算房卡 - BilledRoomCard(s *Scene, snid []int32) - //需要几张房卡 - GetNeedRoomCardCnt(s *Scene) int32 - //房费模式 - GetRoomFeeMode(s *Scene) int32 - //游戏人数 - GetPlayerNum(s *Scene) int32 - //游戏底分 - GetBaseCoin(s *Scene) int - //游戏总局数 - GetTotalOfGames(s *Scene) int32 - // - GetNeedRoomCardCntDependentPlayerCnt(s *Scene) int32 - // + // GetBetState 获取下注状态 GetBetState() int32 - GetViewLogLen() int32 + // GetPlayerNum 获取玩家数量 + GetPlayerNum() int + // GetBaseScore 获取底分 + GetBaseScore() int + + // CostEnough 房费是否足够 + // costType 付费方式 + // playerNum 玩家数量 + // roomConfig 房间配置 + CostEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player) bool + + // CostPayment 房费支付 + CostPayment(s *Scene, p *Player) bool } func GetScenePolicy(gameId, mode int) ScenePolicy { @@ -56,7 +51,7 @@ func GetScenePolicy(gameId, mode int) ScenePolicy { return nil } -func RegisteScenePolicy(gameId, mode int, sp ScenePolicy) { +func RegisterScenePolicy(gameId, mode int, sp ScenePolicy) { pool := ScenePolicyPool[gameId] if pool == nil { pool = make(map[int]ScenePolicy) @@ -66,21 +61,3 @@ func RegisteScenePolicy(gameId, mode int, sp ScenePolicy) { pool[mode] = sp } } - -func CheckGameConfigVer(ver int32, gameid int32, modeid int32) bool { - v := GetGameConfigVer(gameid, modeid) - logger.Logger.Info("Old game config ver:", v) - return ver == v -} - -func GetGameConfigVer(gameid int32, modeid int32) int32 { - sp := GetScenePolicy(int(gameid), int(modeid)) - if sp == nil { - return 0 - } - spd, ok := sp.(*ScenePolicyData) - if !ok { - return 0 - } - return spd.ConfigVer -} diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 2b03d6f..04d0275 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -1,158 +1,27 @@ package main import ( - "time" - + "math" "mongo.games.com/game/common" - hall_proto "mongo.games.com/game/protocol/gamehall" - "mongo.games.com/goserver/core/logger" + hallproto "mongo.games.com/game/protocol/gamehall" + "mongo.games.com/game/protocol/webapi" ) -const ( - SPDPCustomIndex_GamesOfCard int = iota //局数选项 - SPDPCustomIndex_PlayerNum //人数选项 - SPDPCustomIndex_RoomFeeMode //房费模式选项 - SPDPCustomIndex_LimitOption //新手限制选项 - SPDPCustomIndex_DoorOption //中途不可进选项 - SPDPCustomIndex_SameIPForbid //同IP不可进 - SPDPCustomIndex_BaseCoin //房间底分 -) - -// 创建房间选项 -const ( - CreateRoomParam_NumOfGames int = iota //局数选项 - CreateRoomParam_DoorOption //中途允许加入选项 - CreateRoomParam_SameIPForbid //同IP不可进 - CreateRoomParam_Max -) - -type ScenePolicyDataParam struct { - Name string - AliasName string - Desc string - Min int32 - Max int32 - Default int32 - Value []int32 - Value2 []int32 - CustomIndex int32 - index int -} - type ScenePolicyData struct { - GameName string - GameId int32 - GameMode []int32 - CanForceStart bool - MinPlayerCnt int32 - DefaultPlayerCnt int32 - MaxIndex int32 - TimeFreeStart int32 - TimeFreeEnd int32 - DependentPlayerCnt bool - EnterAfterStart bool - ConfigVer int32 - PerGameTakeCard int32 - ViewLogCnt int32 - BetState int32 - Params []ScenePolicyDataParam - nameMap map[string]*ScenePolicyDataParam - aliasNameMap map[string]*ScenePolicyDataParam - customIndexParams []*ScenePolicyDataParam + GameName string + GameId int32 + GameMode []int32 + DefaultPlayerCnt int32 + EnterAfterStart bool + BetState int32 + BaseScore int } func (spd *ScenePolicyData) Init() bool { - spd.nameMap = make(map[string]*ScenePolicyDataParam) - spd.aliasNameMap = make(map[string]*ScenePolicyDataParam) - if spd.MaxIndex > 0 { - spd.customIndexParams = make([]*ScenePolicyDataParam, spd.MaxIndex) - } - for i := 0; i < len(spd.Params); i++ { - spd.nameMap[spd.Params[i].Name] = &spd.Params[i] - spd.Params[i].index = i - spd.aliasNameMap[spd.Params[i].AliasName] = &spd.Params[i] - if spd.Params[i].CustomIndex >= 0 && spd.MaxIndex > 0 { - spd.customIndexParams[spd.Params[i].CustomIndex] = &spd.Params[i] - } - } return true } -func (spd *ScenePolicyData) GetParam(idx int) *ScenePolicyDataParam { - if idx >= 0 && idx < len(spd.Params) { - return &spd.Params[idx] - } - return nil -} - -func (spd *ScenePolicyData) GetParamByIndex(idx int) *ScenePolicyDataParam { - if idx >= 0 && idx < len(spd.customIndexParams) { - return spd.customIndexParams[idx] - } - return nil -} - -func (spd *ScenePolicyData) GetParamByName(name string) *ScenePolicyDataParam { - if spdp, exist := spd.nameMap[name]; exist { - return spdp - } - return nil -} - -func (spd *ScenePolicyData) GetParamByAliasName(name string) *ScenePolicyDataParam { - if spdp, exist := spd.aliasNameMap[name]; exist { - return spdp - } - return nil -} - -func (spd *ScenePolicyData) IsTimeFree(mode int) bool { - //是否限时免费 - ts := int32(time.Now().Unix()) - if ts >= spd.TimeFreeStart && ts < spd.TimeFreeEnd { - return true - } - return false -} - -func (spd *ScenePolicyData) IsEnoughRoomCardCnt(s *Scene, p *Player, roomFeeParam, needCardCnt, playerNum int32, isAgent bool) bool { - return true -} - -func (spd *ScenePolicyData) CostRoomCard(s *Scene, roomFeeParam, needCardCnt, playerNum int32, snid []int32) { -} - -func (spd *ScenePolicyData) UpRoomCard(s *Scene, roomFeeParam, needCardCnt, playerNum int32) { -} - -//ScenePolicy interface - -// 能否进入 -func (spd *ScenePolicyData) CanCreate(s *Scene, p *Player, mode, sceneType int, params []int32, isAgent bool) (bool, []int32) { - //参数容错处理 - if len(params) < len(spd.Params) { - logger.Logger.Infof("ScenePolicyData.CanCreate param count not enough, need:%v get:%v", len(spd.Params), len(params)) - for i := len(params); i < len(spd.Params); i++ { - params = append(params, spd.Params[i].Default) - } - } - - //确保参数正确 - for i := 0; i < len(params); i++ { - if params[i] < spd.Params[i].Min || params[i] > spd.Params[i].Max { - params[i] = spd.Params[i].Default - } - } - - return true, params -} - -func (spd *ScenePolicyData) OnStart(s *Scene) { - -} - -func (spd *ScenePolicyData) ReturnRoomCard(s *Scene, roomFeeParam, needCardCnt, playerNum int32) { -} +func (spd *ScenePolicyData) OnStart(s *Scene) {} // 场景关闭事件 func (spd *ScenePolicyData) OnStop(s *Scene) { @@ -178,162 +47,100 @@ func (spd *ScenePolicyData) OnShutdown(s *Scene) { } -// 获得场景的匹配因子(值越大越优先选择) -func (spd *ScenePolicyData) GetFitFactor(s *Scene, p *Player) int { - return len(s.players) -} +func (spd *ScenePolicyData) OnSceneState(s *Scene, state int) { + s.SceneState = int32(state) + switch state { + case common.SceneStateWaite: + + case common.SceneStateStart: + if s.IsCustom() { + for _, v := range s.players { + spd.CostPayment(s, v) + } + } + + case common.SceneStateEnd: -// 是否满座了 -func (spd *ScenePolicyData) IsFull(s *Scene, p *Player, num int32) bool { - if s.HasPlayer(p) { - return false } - return s.GetPlayerCnt() >= int(num) } -// 是否可以强制开始 -func (spd *ScenePolicyData) IsCanForceStart(s *Scene) bool { - return spd.CanForceStart && s.GetPlayerCnt() >= int(spd.MinPlayerCnt) -} +func (spd *ScenePolicyData) OnGameState(s *Scene, state int) { -// 结算房卡 -func (spd *ScenePolicyData) BilledRoomCard(s *Scene, snid []int32) { - //spd.CostRoomCard(s, spd.GetRoomFeeMode(s), spd.GetNeedRoomCardCnt(s), int32(len(s.players)), snid) -} - -func (spd *ScenePolicyData) getNeedRoomCardCnt(params []int32) int32 { - return 0 -} - -// 需求房卡数量 -func (spd *ScenePolicyData) GetNeedRoomCardCnt(s *Scene) int32 { - return 0 -} - -//func (spd *ScenePolicyData) getRoomFeeMode(params []int32) int32 { -// //if len(params) > 0 { -// // param := spd.GetParamByIndex(SPDPCustomIndex_RoomFeeMode) -// // if param != nil && param.index >= 0 && param.index < len(params) { -// // return params[param.index] -// // } -// //} -// return common.RoomFee_Owner -//} - -// 收费方式(AA|房主付费) -func (spd *ScenePolicyData) GetRoomFeeMode(s *Scene) int32 { - //if s != nil { - // return spd.getRoomFeeMode(s.params) - //} - return 0 -} - -func (spd *ScenePolicyData) GetNeedRoomCardCntDependentPlayerCnt(s *Scene) int32 { - return 0 } // 能否进入 func (spd *ScenePolicyData) CanEnter(s *Scene, p *Player) int { - param := spd.GetParamByIndex(SPDPCustomIndex_SameIPForbid) - if param != nil && len(s.params) <= param.index { - logger.Logger.Errorf("game param len too long %v", s.gameId) - } - - if param != nil && len(s.params) > param.index && s.params[param.index] != 0 { - ip := p.GetIP() - for i := 0; i < s.playerNum; i++ { - pp := s.seats[i] - if pp != nil && pp.GetIP() == ip { - return int(hall_proto.OpResultCode_Game_OPRC_SameIpForbid_Game) - } - } - } - if !spd.EnterAfterStart { if s.starting { - return int(hall_proto.OpResultCode_Game_OPRC_GameStarting_Game) - } - } - - if spd.EnterAfterStart { - if s.starting { - param := spd.GetParamByIndex(SPDPCustomIndex_DoorOption) - if param != nil && s.params[param.index] != 0 { - return int(hall_proto.OpResultCode_Game_OPRC_GameStarting_Game) - //} else { - // return int(hall_proto.OpResultCode_OPRC_SceneEnterForWatcher) - } + return int(hallproto.OpResultCode_Game_OPRC_GameStarting_Game) } } return 0 } -// 人数 -func (spd *ScenePolicyData) getPlayerNum(params []int32) int32 { - if len(params) > 0 { - param := spd.GetParamByIndex(SPDPCustomIndex_PlayerNum) - if param != nil { - idx := int(params[param.index]) - if idx >= 0 && idx < len(param.Value) { - val := param.Value[idx] - return val +func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player, f func(items []*Item)) bool { + isEnough := true + var items []*Item + if costType == 1 { + // 房主 + for _, v := range roomConfig.GetCost() { + if item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()); item == nil || item.ItemNum < v.GetItemNum() { + isEnough = false + break + } else { + items = append(items, &Item{ + ItemId: v.GetItemId(), + ItemNum: v.GetItemNum(), + }) + } + } + } else { + // AA + for _, v := range roomConfig.GetCost() { + n := int64(math.Ceil(float64(v.GetItemNum()) / float64(playerNum))) + if item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()); item == nil || item.ItemNum < n { + isEnough = false + break + } else { + items = append(items, &Item{ + ItemId: v.GetItemId(), + ItemNum: v.GetItemNum(), + }) } } } - return spd.DefaultPlayerCnt -} - -func (spd *ScenePolicyData) GetPlayerNum(s *Scene) int32 { - if s != nil { - return spd.getPlayerNum(common.CopySliceInt64ToInt32(s.params)) + if isEnough { + f(items) } - return spd.DefaultPlayerCnt + return isEnough } -func (spd *ScenePolicyData) getBaseCoin(params []int32) int { - if len(params) > 0 { - param := spd.GetParamByIndex(SPDPCustomIndex_BaseCoin) - if param != nil { - idx := int(params[param.index]) - if idx >= 0 && idx < len(param.Value) { - val := param.Value[idx] - return int(val) - } - } - } - return 0 +func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player) bool { + return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*Item) {}) } -func (spd *ScenePolicyData) GetBaseCoin(s *Scene) int { - if s != nil { - return spd.getBaseCoin(common.CopySliceInt64ToInt32(s.params)) - } - return 0 -} - -// 局数 -func (spd *ScenePolicyData) GetTotalOfGames(s *Scene) int32 { - //if len(s.params) > 0 { - // param := spd.GetParamByIndex(SPDPCustomIndex_GamesOfCard) - // if param != nil { - // cardCostIdx := int(s.params[param.index]) - // if cardCostIdx >= 0 && cardCostIdx < len(param.Value) { - // costCardNum := param.Value[cardCostIdx] - // return costCardNum - // } else if int32(cardCostIdx) >= common.CUSTOM_PER_GAME_INDEX_BEG { //自定义局数 - // totalOfGames := int32(cardCostIdx) - common.CUSTOM_PER_GAME_INDEX_BEG + 1 - // return totalOfGames - // } - // } - //} - //return 4 - return s.totalRound +func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { + return spd.costEnough(s.RoomCostType, s.playerNum, s.RoomConfig, p, func(items []*Item) { + BagMgrSingleton.AddItemsV2(&ItemParam{ + P: p, + Change: items, + GainWay: common.GainWayRoomCost, + Operator: "system", + Remark: "竞技馆进房费用", + GameId: int64(s.gameId), + GameFreeId: int64(s.dbGameFree.GetId()), + }) + }) } func (spd *ScenePolicyData) GetBetState() int32 { return spd.BetState } -func (spd *ScenePolicyData) GetViewLogLen() int32 { - return spd.ViewLogCnt +func (spd *ScenePolicyData) GetPlayerNum() int { + return int(spd.DefaultPlayerCnt) +} + +func (spd *ScenePolicyData) GetBaseScore() int { + return int(spd.BaseScore) } diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 76435ab..8751c71 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -1636,6 +1636,10 @@ func init() { pack.Msg = "no found" return common.ResponseTag_NoData, pack } else { + gameFreeId := int32(0) + if s.dbGameFree != nil { + gameFreeId = s.dbGameFree.GetId() + } si := &webapiproto.RoomInfo{ Platform: s.limitPlatform.Name, SceneId: int32(s.sceneId), @@ -1643,9 +1647,8 @@ func init() { GameMode: int32(s.gameMode), SceneMode: int32(s.sceneMode), GroupId: s.groupId, - GameFreeId: s.paramsEx[0], + GameFreeId: gameFreeId, Creator: s.creator, - Agentor: s.agentor, ReplayCode: s.replayCode, Params: common.CopySliceInt64ToInt32(s.params), PlayerCnt: int32(len(s.players) - s.robotNum), diff --git a/worldsrv/welfmgr.go b/worldsrv/welfmgr.go index 1f92ae5..865c8ef 100644 --- a/worldsrv/welfmgr.go +++ b/worldsrv/welfmgr.go @@ -895,9 +895,9 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) { GainWay: common.GainWaySign7Add, Operator: "system", Remark: "累计签到进阶奖励获得", - gameId: 0, - gameFreeId: 0, - noLog: false, + GameId: 0, + GameFreeId: 0, + NoLog: false, }) } //通知客户端 diff --git a/xlsx/DB_GameRule.xlsx b/xlsx/DB_GameRule.xlsx index 67bd886dbafaa84c269f78b9947d3264d7b8a4e6..4c48f53274cd43a66add47b8280ccdde4e2ca704 100644 GIT binary patch delta 3613 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 delta 3617 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 From 466eafe1bc7a045514ae0030a9d41f8a954ee177 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 26 Aug 2024 18:01:24 +0800 Subject: [PATCH 36/63] =?UTF-8?q?=E6=88=BF=E9=97=B4=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=AF=94=E8=B5=9B=E9=85=8D=E7=BD=AEid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_server.go | 2 + gamesrv/base/scene.go | 1 + gamesrv/tienlen/scenepolicy_tienlen.go | 1 + protocol/gamehall/game.pb.go | 2 +- protocol/server/server.pb.go | 2168 ++++++++++++------------ protocol/server/server.proto | 1 + protocol/tienlen/tienlen.pb.go | 478 +++--- protocol/tienlen/tienlen.proto | 1 + public | 2 +- worldsrv/gamesess.go | 1 + worldsrv/matchscenemgr.go | 2 +- worldsrv/scene.go | 4 + 12 files changed, 1347 insertions(+), 1316 deletions(-) diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 10b4483..e634627 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -72,11 +72,13 @@ func init() { totalOfGames := msg.GetTotalOfGames() baseScore := msg.GetBaseScore() playerNum := int(msg.GetPlayerNum()) + matchInfoId := msg.GetMatchInfoId() scene := base.SceneMgrSington.CreateScene(s, sceneId, gameMode, sceneMode, gameId, msg.GetPlatform(), msg.GetParams(), msg.GetAgentor(), msg.GetCreator(), msg.GetReplayCode(), hallId, groupId, totalOfGames, dbGameFree, bEnterAfterStart, baseScore, playerNum, msg.GetChessRank(), paramsEx...) if scene != nil { if scene.IsMatchScene() { + scene.MatchInfoId = matchInfoId if len(scene.Params) > 0 { scene.MatchId = scene.Params[0] } diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 704027a..693bb4c 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -136,6 +136,7 @@ type Scene struct { Novice bool Welfare bool KillPoints bool + MatchInfoId int32 } func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, params []int64, diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 57ed170..75a307e 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -436,6 +436,7 @@ func TienLenCreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *TienLen CurPlayerNum: int32(s.MatchCurPlayerNum), NextNeed: int32(s.MatchNextNeed), RecordId: sceneEx.recordId, + TMInfoId: sceneEx.MatchInfoId, } pack.IsMatch = int32(0) // 0.普通场 1.锦标赛 2.冠军赛 3.vip专属 diff --git a/protocol/gamehall/game.pb.go b/protocol/gamehall/game.pb.go index 151699a..9b09259 100644 --- a/protocol/gamehall/game.pb.go +++ b/protocol/gamehall/game.pb.go @@ -50,7 +50,7 @@ const ( OpResultCode_Game_OPRC_AllocRoomIdFailed_Game OpResultCode_Game = 1097 //房间id获取失败 OpResultCode_Game_OPRC_PrivateRoomCountLimit_Game OpResultCode_Game = 1098 //私人房间上限 OpResultCode_Game_OPRC_RoomNotExit OpResultCode_Game = 1099 // 已经不在房间了 - OpResultCode_Game_OPRC_MatchAudience OpResultCode_Game = 1100 // 比赛观战白名单 + OpResultCode_Game_OPRC_MatchAudience OpResultCode_Game = 1100 // 不在比赛观战白名单 OpResultCode_Game_OPRC_LowerRice_ScenceMax_Game OpResultCode_Game = 1075 //超过最大下米数量 OpResultCode_Game_OPRC_LowerRice_PlayerMax_Game OpResultCode_Game = 1076 //超过单个用户最大下米数 OpResultCode_Game_OPRC_LowerRice_PlayerDownMax_Game OpResultCode_Game = 1077 diff --git a/protocol/server/server.pb.go b/protocol/server/server.pb.go index 19e37f1..9d30fb6 100644 --- a/protocol/server/server.pb.go +++ b/protocol/server/server.pb.go @@ -874,6 +874,7 @@ type WGCreateScene struct { PlayerNum int32 `protobuf:"varint,21,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` RealCtrl bool `protobuf:"varint,22,opt,name=RealCtrl,proto3" json:"RealCtrl,omitempty"` ChessRank []int32 `protobuf:"varint,23,rep,packed,name=ChessRank,proto3" json:"ChessRank,omitempty"` + MatchInfoId int32 `protobuf:"varint,24,opt,name=MatchInfoId,proto3" json:"MatchInfoId,omitempty"` } func (x *WGCreateScene) Reset() { @@ -1069,6 +1070,13 @@ func (x *WGCreateScene) GetChessRank() []int32 { return nil } +func (x *WGCreateScene) GetMatchInfoId() int32 { + if x != nil { + return x.MatchInfoId + } + return 0 +} + //PACKET_WG_DESTROYSCENE type WGDestroyScene struct { state protoimpl.MessageState @@ -8743,7 +8751,7 @@ var file_server_proto_rawDesc = []byte{ 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x54, 0x65, 0x78, 0x74, 0x22, 0xbc, 0x05, 0x0a, 0x0d, 0x57, 0x47, 0x43, + 0x28, 0x09, 0x52, 0x04, 0x54, 0x65, 0x78, 0x74, 0x22, 0xde, 0x05, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, @@ -8787,1093 +8795,1095 @@ var file_server_proto_rawDesc = []byte{ 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x43, 0x68, - 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x22, 0x3c, 0x0a, 0x0e, 0x57, 0x47, 0x44, 0x65, 0x73, - 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x03, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, - 0x73, 0x47, 0x72, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, - 0x47, 0x72, 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x22, 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x47, - 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x52, 0x65, - 0x62, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0xdd, 0x06, 0x0a, 0x0d, - 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, - 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, - 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, - 0x4d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, - 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, - 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, - 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, + 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x49, 0x6e, 0x66, 0x6f, 0x49, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x49, 0x64, 0x22, 0x3c, 0x0a, 0x0e, 0x57, 0x47, 0x44, + 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x03, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x49, 0x73, 0x47, 0x72, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x49, 0x73, 0x47, 0x72, 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x57, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, + 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, + 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, + 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, + 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0xdd, 0x06, + 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, + 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x49, + 0x73, 0x51, 0x4d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, + 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, + 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, + 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x49, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x53, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0d, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x43, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x50, + 0x6f, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x36, 0x0a, + 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x73, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x73, 0x74, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x72, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, + 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x52, + 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, + 0x43, 0x6f, 0x73, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x56, 0x43, 0x61, 0x72, + 0x64, 0x43, 0x6f, 0x73, 0x74, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x3c, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, - 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0d, 0x57, - 0x47, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x7a, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, - 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, - 0x65, 0x72, 0x54, 0x73, 0x22, 0x91, 0x07, 0x0a, 0x0d, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, - 0x65, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x65, 0x74, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, - 0x46, 0x6c, 0x6f, 0x77, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, - 0x12, 0x2e, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, - 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x57, - 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, - 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x61, - 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x57, 0x47, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x44, 0x72, 0x6f, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x52, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x22, 0x3e, - 0x0a, 0x10, 0x47, 0x57, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, - 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, - 0x01, 0x0a, 0x13, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x56, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x69, 0x70, 0x12, 0x22, - 0x0a, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, - 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x49, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, - 0x0a, 0x15, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x55, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x0f, 0x57, 0x47, 0x44, - 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x69, - 0x6e, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x65, - 0x65, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x14, - 0x0a, 0x05, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, - 0x6f, 0x6e, 0x74, 0x68, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x63, 0x63, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x50, - 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, - 0xae, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x42, - 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, - 0x22, 0x41, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x65, 0x12, 0x30, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, - 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x65, 0x73, 0x22, 0x9c, 0x04, 0x0a, 0x0f, 0x47, 0x52, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x03, 0x52, - 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x52, - 0x03, 0x52, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, - 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, - 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, - 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, - 0x50, 0x6f, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, - 0x72, 0x50, 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x56, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x56, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, - 0x44, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x49, 0x44, 0x22, 0xb2, 0x01, 0x0a, 0x0a, 0x57, 0x52, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, - 0x63, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x42, - 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x43, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0c, 0x57, 0x52, 0x47, 0x61, 0x6d, - 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x52, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0b, 0x57, 0x54, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, - 0x69, 0x6e, 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, - 0x65, 0x52, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, - 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x09, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, - 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, - 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, - 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, - 0x6f, 0x64, 0x65, 0x22, 0x76, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, - 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x33, 0x0a, 0x09, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x74, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x22, 0x3a, 0x0a, 0x0a, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0c, - 0x47, 0x57, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x34, 0x0a, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, - 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x43, 0x75, 0x72, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x46, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x46, - 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x57, 0x52, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, - 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, - 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4b, 0x69, - 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, 0x44, 0x44, 0x61, 0x74, 0x61, 0x41, - 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0x83, 0x01, - 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0b, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, - 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, - 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, - 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, - 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, - 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x11, 0x43, - 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x5c, 0x0a, 0x0d, 0x47, - 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x0e, 0x47, 0x57, 0x52, - 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, 0x47, 0x52, 0x65, 0x62, 0x69, 0x6e, - 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4f, - 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6c, - 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x49, 0x64, 0x22, - 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x22, - 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x4f, 0x70, 0x12, 0x12, - 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x6e, - 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, - 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, 0x22, 0xa7, 0x02, 0x0a, - 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x12, + 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, + 0x0d, 0x57, 0x47, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x49, 0x73, - 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, - 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, - 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, - 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, - 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x0f, 0x47, 0x57, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xb5, 0x01, - 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, - 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x57, 0x47, 0x53, 0x65, 0x74, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, - 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x57, 0x42, - 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x52, 0x65, 0x73, - 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, - 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, - 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x7e, 0x0a, 0x10, 0x47, - 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x12, - 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x08, - 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x22, 0x7a, 0x0a, 0x12, 0x47, - 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x42, 0x65, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, - 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, - 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, - 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x72, 0x0a, 0x0c, 0x47, 0x57, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x44, - 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0xa8, - 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, - 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x10, 0x47, 0x57, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x40, - 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, - 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x63, 0x49, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, 0x22, 0x2e, - 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5d, - 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x4f, 0x0a, - 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, - 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, - 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, - 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x41, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6c, 0x74, - 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, - 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x49, 0x6e, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4f, 0x6e, - 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, - 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, - 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, - 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x46, 0x6c, 0x6f, 0x77, - 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x43, 0x0a, 0x17, - 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x22, - 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, - 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, - 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, - 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, - 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, + 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x7a, 0x0a, 0x0e, 0x57, 0x47, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, + 0x61, 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, + 0x61, 0x64, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0x91, 0x07, 0x0a, 0x0d, 0x47, 0x57, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, + 0x65, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x46, 0x65, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, + 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x65, + 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x65, 0x74, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x32, + 0x0a, 0x14, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, + 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, + 0x6f, 0x77, 0x12, 0x2e, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x12, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, + 0x12, 0x57, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, + 0x61, 0x64, 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, + 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, + 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x38, 0x0a, + 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, + 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x57, 0x47, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x72, 0x6f, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, + 0x22, 0x3e, 0x0a, 0x10, 0x47, 0x57, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x6d, + 0x43, 0x61, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x22, 0x9d, 0x01, 0x0a, 0x13, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x56, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x69, 0x70, + 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x49, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x22, 0x29, 0x0a, 0x15, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x0f, 0x57, + 0x47, 0x44, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, + 0x57, 0x65, 0x65, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x57, 0x65, 0x65, 0x6b, + 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, + 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x41, + 0x63, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x63, 0x63, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x10, 0x0a, + 0x03, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, + 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, + 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, + 0x6e, 0x22, 0xae, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, + 0x6f, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x07, 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, + 0x6f, 0x73, 0x22, 0x41, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x53, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x65, 0x73, 0x22, 0x9c, 0x04, 0x0a, 0x0f, 0x47, 0x52, 0x52, 0x65, 0x70, 0x6c, + 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, + 0x03, 0x52, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x65, 0x52, 0x03, 0x52, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, + 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, + 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, + 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, + 0x65, 0x72, 0x50, 0x6f, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, + 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x61, + 0x74, 0x61, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, + 0x74, 0x61, 0x73, 0x56, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, + 0x74, 0x61, 0x73, 0x56, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x49, 0x44, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x49, 0x44, 0x22, 0xb2, 0x01, 0x0a, 0x0a, 0x57, 0x52, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x52, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, + 0x73, 0x42, 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x42, + 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x43, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0c, 0x57, 0x52, 0x47, + 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x52, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0b, 0x57, + 0x54, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, + 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x41, 0x64, 0x64, + 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, + 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x09, 0x47, 0x57, 0x47, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, + 0x65, 0x63, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, + 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, + 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, + 0x79, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x76, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, + 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x33, 0x0a, + 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x74, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4a, 0x61, - 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4a, 0x61, - 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, - 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, 0x0a, 0x0e, 0x57, 0x47, - 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x44, 0x12, - 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x44, 0x0a, 0x0f, 0x47, 0x57, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x12, 0x31, 0x0a, 0x06, - 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, - 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, - 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x4d, - 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, 0x22, 0x74, 0x0a, 0x1e, - 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x45, 0x6e, 0x74, 0x65, 0x72, - 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, - 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x75, 0x74, - 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, - 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, - 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, - 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x12, - 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x6e, 0x0a, 0x18, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0x4c, 0x0a, 0x16, 0x57, - 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, - 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, 0x66, 0x67, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, 0x3e, 0x0a, - 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, - 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, 0x39, 0x0a, - 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x47, 0x57, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x22, - 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x75, - 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4e, - 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x70, 0x65, - 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, - 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x4c, - 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x11, 0x57, 0x47, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, 0x47, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x75, 0x74, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4f, 0x75, 0x74, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, - 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x53, 0x53, 0x52, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x96, 0x01, 0x0a, 0x10, - 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1c, - 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, - 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, - 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x67, 0x57, 0x69, 0x6e, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x70, 0x69, - 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, - 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, 0x12, 0x1e, 0x0a, - 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x56, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x43, - 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, - 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, - 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0x71, 0x0a, - 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, - 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, - 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, 0x52, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x63, 0x63, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x47, 0x44, 0x54, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, - 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0c, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, - 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, - 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, - 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, - 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, - 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x9b, 0x03, 0x0a, 0x0c, - 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, - 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, - 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x65, - 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, - 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, - 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, - 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, - 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x29, - 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x0d, 0x57, 0x47, 0x52, - 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x69, 0x6e, 0x22, 0x3a, 0x0a, 0x0a, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, + 0x0a, 0x0c, 0x47, 0x57, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, + 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x5e, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x46, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x46, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x57, 0x52, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, - 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, - 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, 0x57, 0x47, 0x53, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x12, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0xaf, 0x01, 0x0a, 0x09, 0x57, - 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, - 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, - 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x22, 0x60, 0x0a, 0x10, - 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, + 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, + 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, 0x44, 0x44, 0x61, 0x74, + 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, + 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, + 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, + 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, + 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0b, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x6f, 0x69, + 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2c, 0x0a, + 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x50, + 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x5c, 0x0a, + 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, + 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x0e, 0x47, + 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, 0x47, 0x52, 0x65, 0x62, + 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x49, + 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6c, 0x61, + 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, + 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x4f, 0x70, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, 0x65, 0x77, 0x4e, 0x6f, + 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x72, 0x6f, + 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, 0x22, 0xa7, + 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x22, 0x32, - 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x12, 0x12, + 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, 0x46, 0x6f, + 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, + 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, + 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, + 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x0f, 0x47, 0x57, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x75, 0x6d, + 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x22, + 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x50, + 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x57, 0x47, 0x53, 0x65, + 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x57, 0x42, 0x43, + 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, + 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x6c, 0x69, 0x65, + 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x7e, 0x0a, + 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x6f, + 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x6e, 0x69, + 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x22, 0x7a, 0x0a, + 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, + 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0a, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, 0x65, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, + 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x42, 0x47, 0x61, + 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x72, 0x0a, 0x0c, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x74, + 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x6f, 0x74, 0x74, + 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x10, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, + 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, + 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, + 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, + 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, + 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x20, + 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, + 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x44, 0x57, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, + 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, + 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, + 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x49, + 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, + 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, + 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, + 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x12, 0x28, + 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, + 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x65, 0x74, + 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x46, 0x6c, + 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x43, + 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x6f, 0x67, + 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, + 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, + 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, + 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x61, 0x6e, 0x6b, + 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, 0x0a, 0x0e, 0x47, 0x57, + 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, 0x47, 0x57, + 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, 0x0a, 0x0e, + 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x55, 0x73, + 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x44, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x44, 0x0a, 0x0f, 0x47, + 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x12, 0x31, + 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, + 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, 0x75, 0x74, + 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, 0x22, 0x74, + 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x45, 0x6e, 0x74, + 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x41, + 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, + 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, + 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, + 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, + 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x6e, 0x0a, + 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0x4c, 0x0a, + 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, 0x66, 0x67, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, 0x2e, 0x0a, 0x12, 0x47, + 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x22, 0x40, 0x0a, + 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, + 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, + 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, + 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x47, + 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, + 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, + 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, + 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, + 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, + 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x61, 0x6d, + 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, + 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x11, 0x57, 0x47, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x49, 0x64, 0x2a, 0xe4, 0x16, 0x0a, 0x0a, 0x53, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, - 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x10, - 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xe9, 0x07, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x54, - 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, - 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x5f, - 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x54, 0x41, - 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, 0x47, 0x5f, 0x4d, 0x55, 0x4c, 0x54, - 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x53, 0x43, 0x45, 0x4e, - 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xce, - 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xcf, 0x08, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x52, 0x4f, 0x4f, - 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, - 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x52, 0x4f, 0x50, 0x4c, 0x49, 0x4e, - 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0xd4, - 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x42, 0x49, 0x4e, 0x44, - 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x55, 0x4e, - 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x54, 0x55, 0x52, - 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xd8, - 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, - 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x45, - 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x41, - 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xdc, 0x08, - 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, - 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, 0xdd, 0x08, 0x12, 0x21, 0x0a, 0x1c, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x4b, - 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xde, 0x08, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x42, 0x49, 0x4c, - 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4e, - 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xe3, - 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, - 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, - 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x4e, 0x44, 0x10, 0xe7, - 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x46, - 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xe8, 0x08, 0x12, 0x1f, 0x0a, 0x1a, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xe9, 0x08, 0x12, 0x1e, 0x0a, - 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0xea, 0x08, 0x12, 0x19, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xed, - 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, - 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, - 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x10, 0xf0, 0x08, 0x12, 0x19, 0x0a, - 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xf3, 0x08, 0x12, - 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x57, 0x42, 0x43, - 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x41, 0x52, - 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, - 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x45, 0x57, 0x4e, - 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x53, 0x45, 0x54, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x42, 0x4c, 0x41, 0x43, - 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x52, 0x45, 0x4c, 0x49, 0x45, - 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe3, 0x0b, 0x12, 0x1a, 0x0a, 0x15, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, - 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, - 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x43, 0x4f, - 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x5f, 0x4d, 0x45, 0x53, 0x53, - 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4c, 0x4f, 0x47, - 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf0, 0x0b, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, - 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, - 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x10, - 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf4, 0x0b, - 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x52, 0x4b, 0x54, 0x41, 0x47, 0x10, - 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x43, 0x4f, - 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0xf6, 0x0b, 0x12, - 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, - 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xf7, 0x0b, 0x12, 0x24, - 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x52, 0x4f, 0x46, - 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, - 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x59, 0x10, 0xfa, 0x0b, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xfb, - 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, - 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, - 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x41, 0x53, 0x45, 0x43, 0x48, - 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x54, 0x4f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x4d, 0x41, 0x54, 0x43, - 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, - 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x4e, - 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, - 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x86, 0x0c, 0x12, 0x23, 0x0a, - 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, - 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x43, 0x45, 0x4e, 0x45, - 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, - 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x89, 0x0c, - 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, - 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, - 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, - 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8e, 0x0c, 0x12, - 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x44, 0x44, - 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8f, 0x0c, 0x12, - 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x42, 0x55, 0x59, - 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x90, 0x0c, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, - 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, 0x47, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, + 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4f, + 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4f, + 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, + 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, 0x75, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x53, 0x53, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x96, 0x01, + 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, + 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, + 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, + 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, + 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, + 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, + 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, + 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, + 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x67, 0x57, 0x69, 0x6e, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x53, + 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x70, 0x69, + 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, 0x12, + 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x49, + 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, + 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, + 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, + 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x53, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, + 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, + 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, + 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, + 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x57, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, 0x52, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x63, 0x63, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x47, 0x44, + 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, + 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, + 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0c, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, + 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, + 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x9b, 0x03, + 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, + 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, + 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x6f, + 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, + 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, + 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, + 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, 0x6d, + 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x44, + 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x0d, 0x57, + 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x12, 0x18, + 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, + 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, + 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, + 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, 0x53, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, 0x57, 0x47, 0x53, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x12, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, + 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0xaf, 0x01, 0x0a, + 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, + 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, + 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, 0x65, 0x6c, + 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x22, 0x60, + 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x74, + 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x45, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, + 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, + 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x2a, 0xe4, 0x16, 0x0a, 0x0a, 0x53, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x45, + 0x52, 0x56, 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, 0x5f, 0x4c, 0x4f, 0x41, + 0x44, 0x10, 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xe9, + 0x07, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, + 0x41, 0x54, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, + 0x54, 0x10, 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, + 0x53, 0x5f, 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, 0x52, 0x4f, 0x55, 0x50, + 0x54, 0x41, 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, 0x47, 0x5f, 0x4d, 0x55, + 0x4c, 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x53, 0x43, + 0x45, 0x4e, 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, + 0x10, 0xce, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xcf, 0x08, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x52, + 0x4f, 0x4f, 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, + 0x43, 0x45, 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x52, 0x4f, 0x50, 0x4c, + 0x49, 0x4e, 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x48, 0x4f, 0x4c, 0x44, + 0x10, 0xd4, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x42, 0x49, + 0x4e, 0x44, 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, + 0x55, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x54, + 0x55, 0x52, 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, + 0x10, 0xd8, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, + 0x45, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x4c, + 0x45, 0x41, 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, + 0xdc, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, + 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, 0xdd, 0x08, 0x12, 0x21, + 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x47, 0x45, 0x4e, + 0x54, 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xde, + 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, 0x08, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x42, + 0x49, 0x4c, 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x5f, + 0x53, 0x4e, 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, + 0x10, 0xe3, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, 0x12, 0x19, 0x0a, 0x14, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, + 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x4e, 0x44, + 0x10, 0xe7, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x46, 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xe8, 0x08, 0x12, 0x1f, + 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xe9, 0x08, 0x12, + 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0xea, 0x08, 0x12, + 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, + 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, 0x08, 0x12, 0x24, 0x0a, + 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, 0x43, 0x4b, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x10, 0xed, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, + 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, + 0x4f, 0x4f, 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x10, 0xf0, 0x08, 0x12, + 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x47, 0x61, 0x6d, + 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xf3, + 0x08, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x57, + 0x42, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, + 0x41, 0x52, 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x53, 0x43, 0x45, 0x4e, + 0x45, 0x10, 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, + 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x45, + 0x57, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, + 0x41, 0x54, 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x53, 0x45, 0x54, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x42, 0x4c, + 0x41, 0x43, 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x52, 0x45, 0x4c, + 0x49, 0x45, 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe3, 0x0b, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, + 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, + 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, 0x0b, 0x12, 0x1c, 0x0a, + 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, + 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x5f, 0x4d, 0x45, + 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4c, + 0x4f, 0x47, 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf0, 0x0b, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, + 0x4b, 0x50, 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, + 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, + 0x44, 0x10, 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x10, + 0xf4, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x52, 0x4b, 0x54, 0x41, + 0x47, 0x10, 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, 0x4e, 0x54, 0x45, 0x52, + 0x43, 0x4f, 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0xf6, + 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, + 0x41, 0x4d, 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xf7, 0x0b, + 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x52, + 0x4f, 0x46, 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x52, 0x52, + 0x45, 0x43, 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, + 0x56, 0x45, 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x59, 0x10, 0xfa, + 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, + 0x10, 0xfb, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x47, 0x52, 0x41, 0x44, + 0x45, 0x10, 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, 0x4d, 0x41, 0x54, 0x43, + 0x48, 0x10, 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x41, 0x53, 0x45, + 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x54, + 0x4f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x4d, 0x41, + 0x54, 0x43, 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, 0x41, 0x43, 0x4b, 0x50, + 0x4f, 0x54, 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x4d, + 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, + 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x86, 0x0c, 0x12, + 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, + 0x45, 0x10, 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x43, 0x45, + 0x4e, 0x45, 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x52, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, + 0x89, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, 0x0c, 0x12, 0x19, 0x0a, + 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, + 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, + 0x4c, 0x54, 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, + 0x53, 0x10, 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8e, + 0x0c, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, + 0x44, 0x44, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8f, + 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x42, + 0x55, 0x59, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x90, 0x0c, + 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x6d, + 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/server/server.proto b/protocol/server/server.proto index f460326..1419b65 100644 --- a/protocol/server/server.proto +++ b/protocol/server/server.proto @@ -186,6 +186,7 @@ message WGCreateScene { int32 PlayerNum = 21; bool RealCtrl = 22; repeated int32 ChessRank = 23; + int32 MatchInfoId = 24; } //PACKET_WG_DESTROYSCENE diff --git a/protocol/tienlen/tienlen.pb.go b/protocol/tienlen/tienlen.pb.go index 9f4afc6..50ed587 100644 --- a/protocol/tienlen/tienlen.pb.go +++ b/protocol/tienlen/tienlen.pb.go @@ -651,6 +651,7 @@ type SCTienLenRoomInfo struct { OutCardRecord []int32 `protobuf:"varint,30,rep,packed,name=OutCardRecord,proto3" json:"OutCardRecord,omitempty"` //已打出去的牌 IsOutRecord bool `protobuf:"varint,31,opt,name=IsOutRecord,proto3" json:"IsOutRecord,omitempty"` //是否能用记牌器 ItemRecExpireTime int64 `protobuf:"varint,32,opt,name=ItemRecExpireTime,proto3" json:"ItemRecExpireTime,omitempty"` //记牌器到期时间 + TMInfoId int32 `protobuf:"varint,33,opt,name=TMInfoId,proto3" json:"TMInfoId,omitempty"` //比赛配置ID } func (x *SCTienLenRoomInfo) Reset() { @@ -888,6 +889,13 @@ func (x *SCTienLenRoomInfo) GetItemRecExpireTime() int64 { return 0 } +func (x *SCTienLenRoomInfo) GetTMInfoId() int32 { + if x != nil { + return x.TMInfoId + } + return 0 +} + //房间状态更新 type SCTienLenRoomState struct { state protoimpl.MessageState @@ -2365,7 +2373,7 @@ var file_tienlen_proto_rawDesc = []byte{ 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x23, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xab, 0x07, 0x0a, 0x11, 0x53, 0x43, 0x54, + 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xc7, 0x07, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, @@ -2424,241 +2432,243 @@ var file_tienlen_proto_rawDesc = []byte{ 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x42, 0x0a, 0x12, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x43, 0x53, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, - 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, - 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x22, 0x46, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, - 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x28, 0x0a, 0x14, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x50, 0x6f, 0x73, 0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x57, - 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, - 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, - 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, - 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, - 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x64, 0x64, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, - 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x22, 0x4d, 0x0a, 0x13, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, - 0x6c, 0x65, 0x64, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x18, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x12, - 0x1e, 0x0a, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x6f, 0x73, - 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x57, - 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, - 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x22, 0x5b, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, - 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, - 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, - 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x88, - 0x02, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, - 0x54, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, - 0x2e, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x47, 0x72, - 0x61, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x39, - 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7f, 0x0a, 0x11, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, + 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, + 0x49, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f, + 0x49, 0x64, 0x22, 0x42, 0x0a, 0x12, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, + 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, + 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, + 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x8e, 0x01, + 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, + 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, + 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74, + 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x46, + 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x28, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, + 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, - 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, - 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x3b, 0x0a, 0x19, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, - 0x72, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x1a, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, - 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41, 0x75, 0x64, 0x69, - 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x42, - 0x6f, 0x6d, 0x62, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x42, - 0x6f, 0x6d, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x43, 0x61, 0x72, 0x64, 0x5f, 0x70, - 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, - 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, - 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, - 0x66, 0x74, 0x5f, 0x31, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, - 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, - 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, - 0x74, 0x32, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, - 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, - 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x28, 0x0a, 0x10, 0x4f, - 0x74, 0x68, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, - 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x31, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, - 0x31, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, - 0x73, 0x5f, 0x32, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x33, 0x12, 0x2a, 0x0a, - 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, - 0x64, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, - 0x75, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, - 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x14, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x20, 0x0a, 0x0c, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x15, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x20, - 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x16, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, - 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, - 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, - 0x74, 0x33, 0x12, 0x19, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x18, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, - 0x45, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, - 0x1a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x49, 0x73, 0x57, 0x69, 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, - 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, - 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x41, - 0x0a, 0x1b, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, - 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, - 0x74, 0x22, 0x68, 0x0a, 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, - 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, - 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, - 0x52, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, - 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x2a, 0x3e, 0x0a, 0x0c, 0x4f, - 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0x80, 0x05, 0x0a, 0x0f, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, - 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4f, 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, - 0x70, 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, - 0x10, 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, - 0x64, 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, - 0x10, 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, - 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, 0x2a, - 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, 0x86, - 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, - 0x87, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, 0x88, - 0x2a, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, - 0x74, 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, - 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, 0x1b, + 0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x49, + 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x49, + 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, + 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x73, + 0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, + 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x41, 0x64, + 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x22, 0x4d, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x36, + 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, + 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x18, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, + 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x57, + 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, + 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, + 0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, + 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x4c, 0x6f, 0x73, 0x65, + 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x5b, 0x0a, + 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, + 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x11, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, + 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x2e, 0x47, 0x72, 0x61, + 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, + 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, + 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x4c, 0x6f, + 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x72, + 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7f, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, + 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x4e, + 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x44, 0x65, + 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, + 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x3b, 0x0a, 0x19, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, + 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, + 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, + 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x1a, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, + 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, + 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, + 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x42, 0x6f, 0x6d, 0x62, 0x5f, + 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x42, 0x6f, 0x6d, 0x62, 0x4e, + 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x43, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x5f, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, + 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, + 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, + 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, + 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, + 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, + 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, + 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, + 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, + 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, + 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x27, 0x0a, 0x10, + 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, + 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, + 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x27, + 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, + 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, + 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x28, 0x0a, 0x10, 0x4f, 0x74, 0x68, 0x65, 0x72, + 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, + 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x31, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x24, 0x0a, + 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x32, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, + 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, + 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x33, 0x12, 0x2a, 0x0a, 0x11, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, + 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, + 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, + 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, + 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, + 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x14, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x15, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x16, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x20, 0x0a, 0x0c, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x17, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x19, + 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x45, + 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, + 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, + 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, + 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x41, 0x0a, 0x1b, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x68, 0x69, + 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x68, 0x69, + 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x68, 0x0a, + 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, + 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, + 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x50, 0x65, 0x74, 0x53, + 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x2a, 0x3e, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x50, 0x52, 0x43, + 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0x80, 0x05, 0x0a, 0x0f, 0x54, 0x69, 0x65, 0x6e, + 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x5a, 0x45, 0x52, + 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x10, + 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, + 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xfc, + 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xfd, 0x29, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, + 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x10, 0x80, 0x2a, 0x12, + 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, + 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x81, 0x2a, + 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, 0x82, 0x2a, 0x12, + 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, + 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, + 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, - 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x42, 0x27, - 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, + 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, 0x86, 0x2a, 0x12, 0x1f, 0x0a, + 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, + 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, 0x87, 0x2a, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, + 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, 0x88, 0x2a, 0x12, 0x21, 0x0a, + 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, + 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x10, 0x89, 0x2a, + 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, + 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, + 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, + 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x74, 0x69, 0x65, 0x6e, + 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/tienlen/tienlen.proto b/protocol/tienlen/tienlen.proto index a5bfbd3..dc57b81 100644 --- a/protocol/tienlen/tienlen.proto +++ b/protocol/tienlen/tienlen.proto @@ -116,6 +116,7 @@ message SCTienLenRoomInfo { repeated int32 OutCardRecord = 30 ;//已打出去的牌 bool IsOutRecord = 31;//是否能用记牌器 int64 ItemRecExpireTime = 32; //记牌器到期时间 + int32 TMInfoId = 33; //比赛配置ID } //房间状态更新 diff --git a/public b/public index 1ebdfd6..c159b76 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 1ebdfd67f04b361e59c2738d9870867fc44219a4 +Subproject commit c159b7686a95ec76316fa947e18b6be2fe993e4d diff --git a/worldsrv/gamesess.go b/worldsrv/gamesess.go index 2d28dd5..b9610f8 100644 --- a/worldsrv/gamesess.go +++ b/worldsrv/gamesess.go @@ -169,6 +169,7 @@ func (this *GameSession) AddScene(s *Scene) { TotalOfGames: proto.Int32(s.totalRound), BaseScore: proto.Int32(s.BaseScore), PlayerNum: proto.Int(s.playerNum), + MatchInfoId: s.MatchInfoId, } var platform *Platform if s.limitPlatform != nil { diff --git a/worldsrv/matchscenemgr.go b/worldsrv/matchscenemgr.go index 1016408..36d0288 100644 --- a/worldsrv/matchscenemgr.go +++ b/worldsrv/matchscenemgr.go @@ -60,7 +60,7 @@ func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scen params := []int64{tm.SortId, int64(finals), int64(round), int64(curPlayerNum), int64(nextNeed), int64(tm.gmd.MatchType)} scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Match, 1, - 0, params, gs, limitPlatform, groupId, tm.dbGameFree, tm.dbGameFree.GetId()) + 0, params, gs, limitPlatform, groupId, tm.dbGameFree, tm.dbGameFree.GetId(), tm.gmd.Id) if scene != nil { scene.matchId = tm.SortId return scene diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 8412ba9..8f72656 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -103,6 +103,7 @@ type Scene struct { gameSite int //tienlen游戏场次区分 1.初级 2.中级 3.高级场 BaseScore int32 //tienlen游戏底分 matchId int64 //比赛场id + MatchInfoId int32 // 比赛场配置id csp *CoinScenePool // 所在场景池 hp *HundredSceneMgr // 百人场房间池 @@ -153,6 +154,9 @@ func NewScene(agentor, creator int32, id, gameId, gameMode, sceneMode int, clycl } if s.IsMatchScene() { s.BaseScore = 10 + if len(paramsEx) > 1 { + s.MatchInfoId = paramsEx[1] + } } s.sp.OnStart(s) return s From 613ed6da76ba71184a2d487fd9f462dc23fa5b68 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 27 Aug 2024 11:05:42 +0800 Subject: [PATCH 37/63] update excel --- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes data/DB_VIPShow.dat | 8 ++++-- data/DB_VIPShow.json | 15 +++++++++-- protocol/server/pbdata.pb.go | 47 ++++++++++++++++++++++++----------- protocol/server/pbdata.proto | 8 ++++-- public | 2 +- xlsx/DB_VIP.xlsx | Bin 20885 -> 20811 bytes xlsx/DB_VIPShow.xlsx | Bin 14304 -> 14551 bytes 9 files changed, 59 insertions(+), 21 deletions(-) diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index f9031710cf856fc3845657304ab3d4d2da51d05f..7152c3ce08c89657670345e97144f2996f387cd7 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!-o^~3FGJ}oQ2HvAz6PR|I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUwf4%!SzpRtK~nT|dknDE0%@f$dY`1iPbQ?IRYhSPmAjL%;Ik1}#HWz3=%p9;jB=^AVM=@WC6YP$LwU1c1VmVmA4neUPXuut)LtqBLEP{Cq XW+BXAlmJj-=U4>v=oe-#2HHXZW^z0= diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 5c05cb71f34940747b3f81de2a97d99721b9ef06..b9869b31687431c7b93ca6298103689771bf2472 100644 GIT binary patch delta 241 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 delta 6531 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 delta 7550 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 TgdG4t@_Kc=KB2w+`}Y3;>(~qX From f782b799ab42303705aa90e773c19301c85ef1c6 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 27 Aug 2024 11:06:02 +0800 Subject: [PATCH 38/63] update excel --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 1ba4afb..fd8bef9 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 1ba4afbf4c50a78d58d427773c84e011cb1588fc +Subproject commit fd8bef907ea15489504529da70f72038444b54e0 From 1db69f8df37a632b321c41d7b8fd25d79a2b4a77 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 27 Aug 2024 14:51:30 +0800 Subject: [PATCH 39/63] update excel --- data/DB_GameItem.dat | Bin 10431 -> 10677 bytes data/DB_GameItem.json | 66 +++++++++++++++++++++++++++++++++++++++ data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes data/DB_VIPShow.dat | 8 +++-- data/DB_VIPShow.json | 15 +++++++-- xlsx/DB_GameItem.xlsx | Bin 25802 -> 26139 bytes xlsx/DB_VIP.xlsx | Bin 20885 -> 20811 bytes xlsx/DB_VIPShow.xlsx | Bin 14304 -> 14551 bytes 9 files changed, 85 insertions(+), 4 deletions(-) diff --git a/data/DB_GameItem.dat b/data/DB_GameItem.dat index 2e4f81d1ce711046e336be5948b6996d8134dbc9..3c06c168cb3acf75623f5e86e978e3564a9e440a 100644 GIT binary patch delta 268 zcmdlVxHWi#277%a$DtieLTt}E_CM`iD8566$LbhHUxAiV))<5f- c3^Cx@oLz7>LA$FtF19fX@jTybz}~M206wmPzyJUM delta 12 TcmdlQygzV*2K#0?j_Ha3B8UWu diff --git a/data/DB_GameItem.json b/data/DB_GameItem.json index b5a8de0..1c84607 100644 --- a/data/DB_GameItem.json +++ b/data/DB_GameItem.json @@ -435,6 +435,72 @@ "Location": "0", "Describe": "作用:用于报名冠军赛事;\n产出途径:参加任意锦标赛,获得冠军\n" }, + { + "Id": 40002, + "Name": "房卡", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 24, + "Effect0": [ + 0, + 0, + 0, + 0, + 0 + ], + "Effect": [ + 0, + 0, + 0, + 0, + 0 + ], + "SaleGold": 10000, + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "作用:用于参与竞技馆内玩法;\n产出途径:商城购买\n" + }, + { + "Id": 40003, + "Name": "娃娃卡", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 23, + "Effect0": [ + 0, + 0, + 0, + 0, + 0 + ], + "Effect": [ + 0, + 0, + 0, + 0, + 0 + ], + "SaleGold": 10000, + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "作用:用于抓娃娃机抓娃娃;\n产出途径:商城购买\n" + }, { "Id": 50001, "Name": "碎片礼盒", diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 72db3e8a73873ae51f1c0e2ac3e4d7c127881859..b21d46eed6509a8e084b7d70854523ecd9c93bbb 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+Qtl~uR-bSQ2H{Iz5=3^I5-yevI!h$vE|a^U;?YZ36;MErEf#& z8))joIZ(|9%LDDjr5|Q5%w1snf$G8TQsM-=qhakM7Oq$h7OWn?WdY1!n1Oeo4u*Lc T>;WZqjzvI^eqrWfpe+OdW$HXN literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ4VAwErEfy% zTWIRTIUwf4)Pd!J_QLd|+XpiTY%jX|lsLieXjuD*g)5eW1;ybo3(z&v=oe-#2HHXZWimW9 diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 51cc1b583659bcaa00dac6101f25d501e9a8d27a..f44c75cbbea4d747927406e694afb854212dc533 100644 GIT binary patch delta 358 zcmdn2xmj~UxgZC}!d^Ck1-)!uY#d8~ERl^J=}dxb9E*T#MlZPRCgvtapySQJ&ouciOPdgcE#k!qG5_=o#>u6u=1_x~U`F(^P2S6DG5I== z03*|6HntX^Hju?!P;CdMZDg7}hpl4rXKsVRsI*|*D^yGzH##qdJ$`#2tc>6>g$cyLkdOiim-1;d0(A*)-pJ3y3IG-EWS{^5 delta 321 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

4l-kv58Q8)0`Z;g^aVDy}Mwg4g66ne8Ptq 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 diff --git a/xlsx/DB_VIP.xlsx b/xlsx/DB_VIP.xlsx index eec2439fd383d43d8d9d0a9ad3bc3cc71946518f..91fd8872ad95555c86873515cfd2f8a418dc9445 100644 GIT binary patch delta 6453 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 delta 6531 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 delta 7550 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 TgdG4t@_Kc=KB2w+`}Y3;>(~qX From 17c0817dabd36dea74dbb7dd14664d0a7d17ceb4 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 27 Aug 2024 17:05:00 +0800 Subject: [PATCH 40/63] =?UTF-8?q?=E6=B8=B8=E6=88=8F=E6=9C=8D=E9=81=93?= =?UTF-8?q?=E5=85=B7=E5=8F=98=E5=8C=96=E5=90=8C=E6=AD=A5=E5=88=B0=E5=A4=A7?= =?UTF-8?q?=E5=8E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 1 + gamesrv/action/action_server.go | 29 + gamesrv/base/player.go | 219 +- gamesrv/base/scene.go | 118 +- gamesrv/tienlen/scenedata_tienlen.go | 2 + gamesrv/tienlen/scenepolicy_tienlen.go | 104 +- gamesrv/transact/trascate_gamesrv.go | 299 +- mgrsrv/api/webapi_gamesrv.go | 13 +- model/baginfo.go | 12 + model/itemdatalog.go | 26 +- protocol/server/pbdata.pb.go | 47 +- protocol/server/pbdata.proto | 8 +- protocol/server/server.pb.go | 3524 +++++++++++++----------- protocol/server/server.proto | 13 + protocol/tienlen/tienlen.pb.go | 696 +++-- protocol/tienlen/tienlen.proto | 16 +- protocol/webapi/common.pb.go | 1947 ++++++------- protocol/webapi/common.proto | 11 +- protocol/webapi/webapi.pb.go | 437 ++- protocol/webapi/webapi.proto | 22 + worldsrv/action_bag.go | 22 +- worldsrv/action_pets.go | 16 +- worldsrv/action_phonelottery.go | 12 +- worldsrv/action_player.go | 6 +- worldsrv/action_server.go | 64 +- worldsrv/action_welfare.go | 21 +- worldsrv/bagmgr.go | 33 +- worldsrv/gamesess.go | 8 + worldsrv/player.go | 14 +- worldsrv/scenepolicydata.go | 17 +- worldsrv/welfmgr.go | 12 +- 31 files changed, 4245 insertions(+), 3524 deletions(-) diff --git a/common/constant.go b/common/constant.go index 7f570f6..9302ef2 100644 --- a/common/constant.go +++ b/common/constant.go @@ -310,6 +310,7 @@ const ( GainWayGuide = 104 //新手引导奖励 GainWayVipGift9 = 105 //vip等级礼包 GainWayRoomCost = 106 //房费消耗 + GainWayRoomGain = 107 //房卡场获得 ) // 后台选择 金币变化类型 的充值 类型id号起始 diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 7089130..22b52b3 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -52,6 +52,27 @@ func HandleWGPlayerLeave(session *netlib.Session, packetId int, data interface{} return nil } +//func HandlePlayerChangeItems(session *netlib.Session, packetId int, data interface{}) error { +// logger.Logger.Tracef("receive PlayerChangeItems %v", data) +// msg, ok := data.(*server.PlayerChangeItems) +// if !ok { +// return nil +// } +// p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnId()) +// if p == nil { +// return nil +// } +// var items []*model.Item +// for _, v := range msg.GetItems() { +// items = append(items, &model.Item{ +// ItemId: v.GetId(), +// ItemNum: v.GetNum(), +// }) +// } +// p.ReceiveAddItems(items) +// return nil +//} + func init() { //创建场景 netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_CREATESCENE), netlib.PacketFactoryWrapper(func() interface{} { @@ -95,6 +116,12 @@ func init() { scene.MatchType = scene.Params[5] } } + for _, v := range msg.GetItems() { + scene.Items = append(scene.Items, &base.ItemInfo{ + Id: v.GetId(), + Num: v.GetNum(), + }) + } scene.ClubId = msg.GetClub() scene.RoomId = msg.GetClubRoomId() scene.RoomPos = msg.GetClubRoomPos() @@ -582,4 +609,6 @@ func init() { netlib.Register(int(server.SSPacketID_PACKET_WG_BUYRECTIMEITEM), server.WGBuyRecTimeItem{}, HandleWGBuyRecTimeItem) // 修改皮肤 netlib.Register(int(server.SSPacketID_PACKET_WG_UpdateSkin), server.WGUpdateSkin{}, HandleWGUpdateSkin) + // 同步道具数量 + //netlib.Register(int(server.SSPacketID_PACKET_PlayerChangeItems), server.PlayerChangeItems{}, HandlePlayerChangeItems) } diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index ddd273f..f45f35f 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -113,7 +113,7 @@ type Player struct { Iparams map[int]int64 //整形参数 sparams map[int]string //字符参数 IsLocal bool //是否本地player - Items map[int32]int64 //背包数据 + Items map[int32]int64 //背包数据, 不可直接修改,使用 AddItems 方法 MatchParams []int32 //比赛参数 排名、段位、假snid、假角色、假皮肤 MatchRobotGrades []MatchRobotGrade TestLog []string // 调试日志 @@ -439,7 +439,6 @@ func (this *Player) AddCoin(num int64, gainWay int32, syncFlag int, oper, remark return } this.Coin += num - this.Items[common.ItemIDCoin] = this.Coin if this.scene != nil { if !this.IsRob && !this.scene.Testing { //机器人log排除掉 log := model.NewCoinLogEx(&model.CoinLogParam{ @@ -521,7 +520,6 @@ func (this *Player) AddCoinAsync(num int64, gainWay int32, notifyC, broadcast bo return } this.Coin += num - this.Items[common.ItemIDCoin] = this.Coin if this.scene != nil { if !this.IsRob && !this.scene.Testing && writeLog { //机器人log排除掉 log := model.NewCoinLogEx(&model.CoinLogParam{ @@ -604,62 +602,6 @@ func (this *Player) AddRankScore(rankType int32, num int64) { } } -// 保存金币变动日志 -// 数据用途: 个人房间内牌局账变记录,后台部分报表使用,确保数据计算无误,否则可能影响月底对账 -// takeCoin: 牌局结算前玩家身上的金币 -// changecoin: 本局玩家输赢的钱,注意是税后 -// coin: 结算后玩家当前身上的金币余额 -// totalbet: 总下注额 -// taxcoin: 本局该玩家产生的税收,这里要包含俱乐部的税 -// wincoin: 本局赢取的金币,含税 wincoin==changecoin+taxcoin -// jackpotWinCoin: 从奖池中赢取的金币(拉霸类游戏) -// smallGameWinCoin: 小游戏赢取的金币(拉霸类游戏) -func (this *Player) SaveSceneCoinLog(takeCoin, changecoin, coin, totalbet, taxcoin, wincoin int64, jackpotWinCoin int64, smallGameWinCoin int64) { - if this.scene != nil { - if !this.IsRob && !this.scene.Testing && !this.scene.IsMatchScene() { //机器人log排除掉 - var eventType int64 //输赢事件值 默认值为0 - if coin-takeCoin > 0 { - eventType = 1 - } else if coin-takeCoin < 0 { - eventType = -1 - } - log := model.NewSceneCoinLogEx(this.SnId, changecoin, takeCoin, coin, eventType, - int64(this.scene.DbGameFree.GetBaseScore()), totalbet, int32(this.scene.GameId), this.PlayerData.Ip, - this.scene.GetGameFreeId(), this.Pos, this.Platform, this.Channel, this.BeUnderAgentCode, int32(this.scene.SceneId), - this.scene.DbGameFree.GetGameMode(), this.scene.GetGameFreeId(), taxcoin, wincoin, - jackpotWinCoin, smallGameWinCoin, this.PackageID) - if log != nil { - LogChannelSingleton.WriteLog(log) - } - } - } -} - -// 需要关照 -func (this *Player) IsNeedCare() bool { - return false -} - -// 需要削弱 -func (this *Player) IsNeedWeaken() bool { - return false -} - -func (this *Player) GetCoinOverPercent() int32 { - return 0 -} - -func (this *Player) SyncCoin() { - pack := &player.SCPlayerCoinChange{ - SnId: proto.Int32(this.SnId), - AddCoin: proto.Int64(0), - RestCoin: proto.Int64(this.Coin), - } - proto.SetDefaults(pack) - this.SendToClient(int(player.PlayerPacketID_PACKET_SC_PLAYERCOINCHANGE), pack) - logger.Logger.Trace("(this *Player) SyncCoin SCPlayerCoinChange:", pack) -} - func (this *Player) ReportGameEvent(tax, taxex, changeCoin, validbet, validFlow, in, out int64) { // 记录玩家 首次参与该场次的游戏时间 游戏次数 var gameFirstTime, gameFreeFirstTime time.Time @@ -685,19 +627,6 @@ func (this *Player) ReportGameEvent(tax, taxex, changeCoin, validbet, validFlow, this.TelephonePromoter, this.DeviceId))) } -// 破产事件 -func (this *Player) ReportBankRuptcy(gameId, gameMode, gameFreeId int32) { - //if !this.IsRob { - // d, e := model.MarshalBankruptcyEvent(2, this.SnId, this.TelephonePromoter, this.Channel, this.BeUnderAgentCode, this.Platform, this.City, this.CreateTime, gameId, gameMode, gameFreeId) - // if e == nil { - // rmd := model.NewInfluxDBData("hj.player_bankruptcy", d) - // if rmd != nil { - // InfluxDBDataChannelSington.Write(rmd) - // } - // } - //} -} - // 汇总玩家该次游戏总产生的税收 // 数据用途: 平台和推广间分账用,确保数据计算无误, // 注意:该税收不包含俱乐部的抽水 @@ -711,30 +640,6 @@ func (this *Player) AddServiceFee(tax int64) { } } -//func (this *Player) SaveReportForm(showId, sceneMode int, keyGameId string, profitCoin, flow int64, validBet int64) { -// //个人报表统计 -// if this.TotalGameData == nil { -// this.TotalGameData = make(map[int][]*model.PlayerGameTotal) -// } -// if this.TotalGameData[showId] == nil { -// this.TotalGameData[showId] = []*model.PlayerGameTotal{new(model.PlayerGameTotal)} -// } -// td := this.TotalGameData[showId][len(this.TotalGameData[showId])-1] -// td.ProfitCoin += profitCoin -// td.BetCoin += validBet -// td.FlowCoin += flow -// ///////////////最多盈利 -// if pgs, exist := this.GDatas[keyGameId]; exist { -// if pgs.Statics.MaxSysOut < profitCoin { -// pgs.Statics.MaxSysOut = profitCoin -// } -// } else { -// gs := model.NewPlayerGameStatics() -// gs.MaxSysOut = profitCoin -// this.GDatas[keyGameId] = &model.PlayerGameInfo{FirstTime: time.Now(), Statics: *gs} -// } -//} - // Statics 弃用,使用 Scene.Statistics 方法 // 个人投入产出汇总,以游戏id为key存储 // 数据用途:计算玩家赔率用,数据确保计算无误,否则可能影响玩家手牌的调控 @@ -848,61 +753,18 @@ func (this *Player) Statics(keyGameId string, keyGameFreeId string, gain int64, ////} } -func (this *Player) SendTrusteeshipTips() { - pack := &player.SCTrusteeshipTips{ - Trusteeship: proto.Int32(this.Trusteeship), - TotalNum: proto.Int32(model.GameParamData.PlayerWatchNum), - } - proto.SetDefaults(pack) - logger.Logger.Trace("SCTrusteeshipTips: ", pack) - this.SendToClient(int(player.PlayerPacketID_PACKET_SC_TRUSTEESHIPTIPS), pack) -} - -func (this *Player) MarshalIParam() []*server.PlayerIParam { - var params []*server.PlayerIParam - for i, v := range this.Iparams { - params = append(params, &server.PlayerIParam{ - ParamId: proto.Int(i), - IntVal: proto.Int64(v), - }) - } - return params -} - func (this *Player) UnmarshalIParam(params []*server.PlayerIParam) { for _, p := range params { this.Iparams[int(p.GetParamId())] = p.GetIntVal() } } -func (this *Player) MarshalSParam() []*server.PlayerSParam { - var params []*server.PlayerSParam - for i, v := range this.sparams { - params = append(params, &server.PlayerSParam{ - ParamId: proto.Int(i), - StrVal: proto.String(v), - }) - } - return params -} - func (this *Player) UnmarshalSParam(params []*server.PlayerSParam) { for _, p := range params { this.sparams[int(p.GetParamId())] = p.GetStrVal() } } -func (this *Player) MarshalCParam() []*server.PlayerCParam { - var params []*server.PlayerCParam - for k, v := range this.cparams { - params = append(params, &server.PlayerCParam{ - StrKey: proto.String(k), - StrVal: proto.String(v), - }) - } - return params -} - func (this *Player) UnmarshalCParam(params []*server.PlayerCParam) { for _, p := range params { this.cparams[p.GetStrKey()] = p.GetStrVal() @@ -1216,17 +1078,6 @@ func (this *Player) NoviceOdds(gameId int) (int32, bool) { return int32(odds), b1 } -/*// 设置玩家捕鱼等级 -func (this *Player) SetFishLevel(level int64) { - data := srvdata.PBDB_PlayerExpMgr.GetData(int32(level)) - if data == nil { - logger.Logger.Errorf("设置玩家等级错误!snid = %v, lvel = %v", this.SnId, level) - return - } - this.FishLevel = level - this.FishExp = int64(data.Exp) -}*/ - // 增加玩家经验 func (this *Player) AddPlayerExp(exp int64) bool { this.Exp += exp @@ -1392,3 +1243,71 @@ func (this *Player) PetUseSkill() bool { func (this *Player) GetSkillAdd(id int32) int32 { return this.GetSkillAdd2(id, ConfigMgrInst) } + +// AddItems 添加道具 +// 增加或减少道具 +// 同步到 worldsrv +func (this *Player) AddItems(args *model.AddItemParam) { + pack := &server.PlayerChangeItems{ + SnId: args.P.SnId, + } + + for _, v := range args.Change { + item := srvdata.GameItemMgr.Get(this.Platform, v.ItemId) + if item == nil { + continue + } + if v.ItemNum < 0 && this.Items[v.ItemId] < -v.ItemNum { + v.ItemNum = -this.Items[v.ItemId] + } + if v.ItemNum == 0 { + continue + } + this.Items[v.ItemId] += v.ItemNum + if !args.NoLog { + logType := 0 + if v.ItemNum < 0 { + logType = 1 + } + LogChannelSingleton.WriteLog(model.NewItemLogEx(model.ItemParam{ + Platform: this.Platform, + SnId: this.SnId, + LogType: int32(logType), + ItemId: v.ItemId, + ItemName: item.Name, + Count: v.ItemNum, + Remark: args.Remark, + TypeId: args.GainWay, + GameId: args.GameId, + GameFreeId: args.GameFreeId, + Cost: args.Cost, + })) + } + pack.Items = append(pack.Items, &server.Item{ + Id: v.ItemId, + Num: v.ItemNum, + }) + } + + if len(pack.Items) > 0 { + this.SendToWorld(int(server.SSPacketID_PACKET_PlayerChangeItems), pack) + logger.Logger.Tracef("PlayerChangeItems: %v", pack) + } +} + +//func (this *Player) ReceiveAddItems(items []*model.Item) { +// for _, v := range items { +// item := srvdata.GameItemMgr.Get(this.Platform, v.ItemId) +// if item == nil { +// continue +// } +// if v.ItemNum < 0 && this.Items[v.ItemId] < -v.ItemNum { +// v.ItemNum = -this.Items[v.ItemId] +// } +// if v.ItemNum == 0 { +// continue +// } +// this.Items[v.ItemId] += v.ItemNum +// logger.Logger.Tracef("ReceiveAddItems snid:%v, item:%v, num:%v change:%v", this.SnId, v.ItemId, this.Items[v.ItemId], v.ItemNum) +// } +//} diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 56ea1fc..bd8eeee 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -37,10 +37,9 @@ type CanRebindSnId interface { RebindPlayerSnId(oldSnId, newSnId int32) } -// 房间比赛数据变化 -type SceneMatchChgData struct { - NextBaseScore int32 //底分 - NextOutScore int32 //淘汰分 +type ItemInfo struct { + Id int32 + Num int64 } type Scene struct { @@ -109,9 +108,9 @@ type Scene struct { timerRandomRobot int64 nogDismiss int //检查机器人离场时的局数(同一局只检查一次) //playerStatement map[int32]*webapi.PlayerStatement //玩家流水记录 - SystemCoinOut int64 //本局游戏机器人营收 机器人赢:正值 机器人输:负值 - matchChgData *SceneMatchChgData //比赛变化数据 + SystemCoinOut int64 //本局游戏机器人营收 机器人赢:正值 机器人输:负值 ChessRank []int32 + Items []*ItemInfo BaseScore int32 //tienlen游戏底分 MatchId int64 //标记本次比赛的id,并不是后台id @@ -382,12 +381,6 @@ func (this *Scene) GetGraceDestroy() bool { func (this *Scene) SetGraceDestroy(graceDestroy bool) { this.graceDestroy = graceDestroy } -func (this *Scene) GetMatchChgData() *SceneMatchChgData { - return this.matchChgData -} -func (this *Scene) SetMatchChgData(matchChgData *SceneMatchChgData) { - this.matchChgData = matchChgData -} func (this *Scene) GetCpControlled() bool { return this.CpControlled @@ -564,10 +557,10 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { } } - pack.Items = make(map[int32]int64) - for id, num := range p.Items { - pack.Items[id] = num - } + //pack.Items = make(map[int32]int64) + //for id, num := range p.Items { + // pack.Items[id] = num + //} pack.RankScore = make(map[int32]int64) for k, v := range p.RankScore { pack.RankScore[k] = v @@ -2040,32 +2033,27 @@ func (this *Scene) TryBillExGameDrop(p *Player) { } dropInfo := srvdata.GameDropMgrSingleton.GetDropInfoByBaseScore(baseScore) - if dropInfo != nil && len(dropInfo) != 0 && p.Items != nil { + if dropInfo != nil && len(dropInfo) != 0 { realDrop := make(map[int32]int32) for _, drop := range dropInfo { - if _, ok := p.Items[drop.ItemId]; ok { - //概率 - randTmp := rand.Int31n(10000) - if randTmp < drop.Rate { - //个数 - num := drop.MinAmount - if drop.MaxAmount > drop.MinAmount { - num = rand.Int31n(drop.MaxAmount-drop.MinAmount+1) + drop.MinAmount - } - oldNum := num - a := math.Max(float64(p.MoneyTotal), 50) * 10.0 / math.Max(float64(p.VCardCost), 500.0) - num = int32(float64(num) * math.Min(a, 1.5)) - if num == 0 { - // 50%概率给oldNum - if rand.Int31n(100) < 50 { - num = oldNum - } - } - p.Items[drop.ItemId] += int64(num) - realDrop[drop.ItemId] = num + //概率 + randTmp := rand.Int31n(10000) + if randTmp < drop.Rate { + //个数 + num := drop.MinAmount + if drop.MaxAmount > drop.MinAmount { + num = rand.Int31n(drop.MaxAmount-drop.MinAmount+1) + drop.MinAmount } - } else { - logger.Logger.Error("itemid not exist! ", drop.ItemId) + oldNum := num + a := math.Max(float64(p.MoneyTotal), 50) * 10.0 / math.Max(float64(p.VCardCost), 500.0) + num = int32(float64(num) * math.Min(a, 1.5)) + if num == 0 { + // 50%概率给oldNum + if rand.Int31n(100) < 50 { + num = oldNum + } + } + realDrop[drop.ItemId] = num } } if realDrop != nil && len(realDrop) != 0 { @@ -2073,30 +2061,21 @@ func (this *Scene) TryBillExGameDrop(p *Player) { pack := &player.SCGameExDropItems{} pack.Items = make(map[int32]int32) for id, num := range realDrop { - remark := fmt.Sprintf("游戏掉落%v", id) pack.Items[id] = proto.Int32(num) itemData := srvdata.GameItemMgr.Get(p.Platform, id) if itemData != nil { - //logType 0获得 1消耗 - log := model.NewItemLogEx(model.ItemParam{ - Platform: p.Platform, - SnId: p.SnId, - LogType: 0, - ItemId: itemData.Id, - ItemName: itemData.Name, - Count: int64(num), - Remark: remark, - TypeId: common.GainWay_Game, + p.AddItems(&model.AddItemParam{ + P: &p.PlayerData, + Change: nil, + GainWay: common.GainWay_Game, + Operator: "system", + Remark: fmt.Sprintf("游戏掉落%v", id), GameId: int64(this.GameId), GameFreeId: int64(this.GetGameFreeId()), }) - if log != nil { - logger.Logger.Trace("WriteLog: ", log) - LogChannelSingleton.WriteLog(log) - } } } - if pack != nil && pack.Items != nil && len(pack.Items) != 0 { + if len(pack.Items) > 0 { p.SendToClient(int(player.PlayerPacketID_PACKET_SCGAMEEXDROPITEMS), pack) logger.Logger.Trace("SCGAMEEXDROPITEMS ", pack) } @@ -2121,28 +2100,23 @@ func (this *Scene) DropCollectBox(p *Player) { pack.Items = make(map[int32]int32) itemData := srvdata.GameItemMgr.Get(p.Platform, common.ItemIDCollectBox) if itemData != nil { - p.Items[itemData.Id] = p.Items[itemData.Id] + 1 pack.Items = map[int32]int32{itemData.Id: 1} - remark := fmt.Sprintf("游戏掉落%v", itemData.Id) - //logType 0获得 1消耗 - log := model.NewItemLogEx(model.ItemParam{ - Platform: p.Platform, - SnId: p.SnId, - LogType: 0, - ItemId: itemData.Id, - ItemName: itemData.Name, - Count: 1, - Remark: remark, - TypeId: common.GainWay_Game, + p.AddItems(&model.AddItemParam{ + P: &p.PlayerData, + Change: []*model.Item{ + { + ItemId: itemData.Id, + ItemNum: 1, + }, + }, + GainWay: common.GainWay_Game, + Operator: "system", + Remark: fmt.Sprintf("游戏掉落%v", itemData.Id), GameId: int64(this.GameId), GameFreeId: int64(this.GetGameFreeId()), }) - if log != nil { - logger.Logger.Trace("WriteLog: ", log) - LogChannelSingleton.WriteLog(log) - } } - if pack != nil && pack.Items != nil && len(pack.Items) != 0 { + if len(pack.Items) > 0 { p.SendToClient(int(player.PlayerPacketID_PACKET_SCGAMEEXDROPITEMS), pack) logger.Logger.Trace("SCGAMEEXDROPITEMS", pack) } diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index dd5ffad..22634d4 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -63,6 +63,8 @@ type TienLenSceneData struct { cardsKuId int32 //牌库ID ctrlType int // 1控赢 2控输 0不控 BilledList map[int32]*[]*BilledInfo // 多轮结算记录, 玩家id:每局结算记录 + RoundEndTime []int64 // 每局结束时间 + RoundLogId []string // 每局牌局记录id } func NewTienLenSceneData(s *base.Scene) *TienLenSceneData { diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 340402b..021df7d 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -2534,35 +2534,85 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenGameBilled), pack, 0) logger.Logger.Trace("TienLenPacketID_PACKET_SCTienLenGameBilled gameFreeId:", sceneEx.GetGameFreeId(), ";pack:", pack) - for _, v := range tienlenType.PlayerData { - d := sceneEx.BilledList[v.UserId] - if d == nil { - arr := make([]*BilledInfo, 0) - d = &arr - sceneEx.BilledList[v.UserId] = d - } - *d = append(*d, &BilledInfo{ - Round: int32(sceneEx.NumOfGames), - ChangeScore: v.BillCoin, - Score: base.PlayerMgrSington.GetPlayerBySnId(v.UserId).GetCoin(), - }) - } - if sceneEx.NumOfGames >= sceneEx.TotalOfGames { - sceneEx.BilledList = make(map[int32]*[]*BilledInfo) - packBilled := &tienlen.SCTienLenCycleBilled{} - for snid, billedList := range sceneEx.BilledList { - info := &tienlen.TienLenCycleBilledInfo{ - SnId: snid, + if sceneEx.IsCustom() && sceneEx.TotalOfGames > 0 { + for _, v := range tienlenType.PlayerData { + d := sceneEx.BilledList[v.UserId] + if d == nil { + arr := make([]*BilledInfo, 0) + d = &arr + sceneEx.BilledList[v.UserId] = d } - for _, bill := range *billedList { - info.RoundScore = append(info.RoundScore, bill.ChangeScore) - info.Score = 1000 - } - packBilled.List = append(packBilled.List, info) + *d = append(*d, &BilledInfo{ + Round: int32(sceneEx.NumOfGames), + ChangeScore: v.BillCoin, + Score: base.PlayerMgrSington.GetPlayerBySnId(v.UserId).GetCoin(), + }) } - s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenCycleBilled), packBilled, 0) - - if s.IsCustom() { + sceneEx.RoundEndTime = append(sceneEx.RoundEndTime, time.Now().Unix()) + sceneEx.RoundLogId = append(sceneEx.RoundLogId, sceneEx.recordId) + if sceneEx.NumOfGames >= sceneEx.TotalOfGames { + sceneEx.BilledList = make(map[int32]*[]*BilledInfo) + sceneEx.RoundEndTime = sceneEx.RoundEndTime[:0] + sceneEx.RoundLogId = sceneEx.RoundLogId[:0] + packBilled := &tienlen.SCTienLenCycleBilled{} + for snid, billedList := range sceneEx.BilledList { + info := &tienlen.TienLenCycleBilledInfo{ + SnId: snid, + TotalScore: 1000, + Score: 1000, + } + for _, bill := range *billedList { + info.RoundScore = append(info.RoundScore, bill.ChangeScore) + info.TotalScore += bill.ChangeScore + } + packBilled.List = append(packBilled.List, info) + } + sort.Slice(packBilled.List, func(i, j int) bool { + var a, b int64 + for _, v := range packBilled.List[i].RoundScore { + a += v + } + a += packBilled.List[i].Score + for _, v := range packBilled.List[j].RoundScore { + b += v + } + b += packBilled.List[j].Score + return a > b + }) + if len(packBilled.List) > 0 { + for _, v := range sceneEx.Items { + packBilled.List[0].Award = append(packBilled.List[0].Award, &tienlen.ItemInfo{ + Id: v.Id, + Num: v.Num, + }) + } + // 发奖品 + if len(sceneEx.Items) > 0 { + p := base.PlayerMgrSington.GetPlayerBySnId(packBilled.List[0].SnId) + if p != nil { + var items []*model.Item + for _, v := range packBilled.List[0].Award { + itemData := srvdata.GameItemMgr.Get(p.Platform, p.SnId) + if itemData != nil { + items = append(items, &model.Item{ + ItemId: v.GetId(), + ItemNum: v.GetNum(), + }) + } + } + p.AddItems(&model.AddItemParam{ + P: &p.PlayerData, + Change: items, + GainWay: common.GainWayRoomGain, + Operator: "system", + Remark: "房卡场奖励", + GameId: int64(sceneEx.GameId), + GameFreeId: int64(sceneEx.GetGameFreeId()), + }) + } + } + } + s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenCycleBilled), packBilled, 0) s.SyncSceneState(common.SceneStateEnd) } } diff --git a/gamesrv/transact/trascate_gamesrv.go b/gamesrv/transact/trascate_gamesrv.go index 6aa90b8..1149976 100644 --- a/gamesrv/transact/trascate_gamesrv.go +++ b/gamesrv/transact/trascate_gamesrv.go @@ -1,153 +1,150 @@ package transact -// -//import ( -// "errors" -// "fmt" -// "mongo.games.com/game/common" -// "mongo.games.com/game/gamesrv/base" -// "mongo.games.com/game/model" -// "mongo.games.com/game/proto" -// webapi_proto "mongo.games.com/game/protocol/webapi" -// "mongo.games.com/goserver/core/basic" -// "mongo.games.com/goserver/core/logger" -// "mongo.games.com/goserver/core/netlib" -// "mongo.games.com/goserver/core/task" -// "mongo.games.com/goserver/core/transact" -// "sync" -//) -// -//const __REQIP__ = "__REQIP__" -// -//var ( -// WebAPIErrParam = errors.New("param err") -// WebAPIErrNoPlayer = errors.New("player no find") -//) -// -//func init() { -// transact.RegisteHandler(common.TransType_GameSrvWebApi, &WebAPITranscateHandler{}) -//} -// -//var WebAPIHandlerMgrSingleton = &WebAPIHandlerMgr{wshMap: make(map[string]WebAPIHandler)} -// -//type WebAPITranscateHandler struct { -//} -// -//func (this *WebAPITranscateHandler) OnExcute(tNode *transact.TransNode, ud interface{}) transact.TransExeResult { -// logger.Logger.Trace("WebAPITranscateHandler.OnExcute ") -// req := &common.M2GWebApiRequest{} -// err := netlib.UnmarshalPacketNoPackId(ud.([]byte), req) -// if err == nil { -// wsh := WebAPIHandlerMgrSingleton.GetWebAPIHandler(req.Path) -// if wsh == nil { -// logger.Logger.Error("WebAPITranscateHandler no registe WebAPIHandler ", req.Path) -// return transact.TransExeResult_Failed -// } -// tag, msg := wsh.Handler(tNode, req.Body) -// tNode.TransRep.RetFiels = msg -// switch tag { -// case common.ResponseTag_Ok: -// return transact.TransExeResult_Success -// case common.ResponseTag_TransactYield: -// return transact.TransExeResult_Yield -// } -// } -// logger.Logger.Error("WebAPITranscateHandler.OnExcute err:", err.Error()) -// return transact.TransExeResult_Failed -//} -// -//func (this *WebAPITranscateHandler) OnCommit(tNode *transact.TransNode) transact.TransExeResult { -// logger.Logger.Trace("WebAPITranscateHandler.OnCommit ") -// return transact.TransExeResult_Success -//} -// -//func (this *WebAPITranscateHandler) OnRollBack(tNode *transact.TransNode) transact.TransExeResult { -// logger.Logger.Trace("WebAPITranscateHandler.OnRollBack ") -// return transact.TransExeResult_Success -//} -// -//func (this *WebAPITranscateHandler) OnChildTransRep(tNode *transact.TransNode, hChild transact.TransNodeID, retCode int, -// ud interface{}) transact.TransExeResult { -// logger.Logger.Trace("WebAPITranscateHandler.OnChildTransRep ") -// return transact.TransExeResult_Success -//} -// -//type WebAPIHandler interface { -// Handler(*transact.TransNode, []byte) (int, proto.Message) -//} -// -//type WebAPIHandlerWrapper func(*transact.TransNode, []byte) (int, proto.Message) -// -//func (wshw WebAPIHandlerWrapper) Handler(tNode *transact.TransNode, params []byte) (int, proto.Message) { -// return wshw(tNode, params) -//} -// -//type WebAPIHandlerMgr struct { -// wshMap map[string]WebAPIHandler -// DataWaitList sync.Map -//} -// -//func (this *WebAPIHandlerMgr) RegisteWebAPIHandler(name string, wsh WebAPIHandler) { -// this.wshMap[name] = wsh -//} -// -//func (this *WebAPIHandlerMgr) GetWebAPIHandler(name string) WebAPIHandler { -// if wsh, exist := this.wshMap[name]; exist { -// return wsh -// } -// return nil -//} -// -//func init() { -// //单控 -// WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/game/SinglePlayerAdjust", WebAPIHandlerWrapper( -// func(tNode *transact.TransNode, params []byte) (int, proto.Message) { -// pack := &webapi_proto.SASinglePlayerAdjust{} -// msg := &webapi_proto.ASSinglePlayerAdjust{} -// err := proto.Unmarshal(params, msg) -// if err != nil { -// fmt.Printf("err:%v", err) -// pack.Tag = webapi_proto.TagCode_FAILED -// pack.Msg = "数据序列化失败" -// return common.ResponseTag_ParamError, pack -// } -// pack.Tag = webapi_proto.TagCode_SUCCESS -// switch msg.GetOpration() { -// case 1: -// psa := base.PlayerSingleAdjustMgr.AddNewSingleAdjust(msg.GetPlayerSingleAdjust()) -// if psa != nil { -// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { -// return model.AddNewSingleAdjust(psa) -// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { -// if data != nil { -// pack.Tag = webapi_proto.TagCode_FAILED -// pack.Msg = "insert err" + data.(error).Error() -// } -// tNode.TransRep.RetFiels = pack -// tNode.Resume() -// }), "AddNewSingleAdjust").Start() -// return common.ResponseTag_TransactYield, pack -// } -// case 2: -// base.PlayerSingleAdjustMgr.EditSingleAdjust(msg.GetPlayerSingleAdjust()) -// case 3: -// psa := msg.PlayerSingleAdjust -// if psa != nil { -// base.PlayerSingleAdjustMgr.DeleteSingleAdjust(psa.Platform, psa.SnId, psa.GameFreeId) -// } -// case 4: -// ps := msg.PlayerSingleAdjust -// webp := base.PlayerSingleAdjustMgr.GetSingleAdjust(ps.Platform, ps.SnId, ps.GameFreeId) -// if webp == nil { -// pack.Tag = webapi_proto.TagCode_FAILED -// pack.Msg = fmt.Sprintf("webp == nil %v %v %v", ps.Platform, ps.SnId, ps.GameFreeId) -// } -// pack.PlayerSingleAdjust = webp -// default: -// pack.Tag = webapi_proto.TagCode_FAILED -// pack.Msg = "Opration param is error!" -// return common.ResponseTag_ParamError, pack -// } -// return common.ResponseTag_Ok, pack -// })) -//} +import ( + "errors" + "sync" + + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + "mongo.games.com/goserver/core/transact" + + "mongo.games.com/game/common" + "mongo.games.com/game/gamesrv/base" + "mongo.games.com/game/gamesrv/tienlen" + "mongo.games.com/game/proto" + webapiproto "mongo.games.com/game/protocol/webapi" +) + +const __REQIP__ = "__REQIP__" + +var ( + WebAPIErrParam = errors.New("param err") + WebAPIErrNoPlayer = errors.New("player no find") +) + +func init() { + transact.RegisteHandler(common.TransType_GameSrvWebApi, &WebAPITranscateHandler{}) +} + +var WebAPIHandlerMgrSingleton = &WebAPIHandlerMgr{wshMap: make(map[string]WebAPIHandler)} + +type WebAPITranscateHandler struct { +} + +func (this *WebAPITranscateHandler) OnExcute(tNode *transact.TransNode, ud interface{}) transact.TransExeResult { + logger.Logger.Trace("WebAPITranscateHandler.OnExcute ") + req := &common.M2GWebApiRequest{} + err := netlib.UnmarshalPacketNoPackId(ud.([]byte), req) + if err == nil { + wsh := WebAPIHandlerMgrSingleton.GetWebAPIHandler(req.Path) + if wsh == nil { + logger.Logger.Error("WebAPITranscateHandler no registe WebAPIHandler ", req.Path) + return transact.TransExeResult_Failed + } + tag, msg := wsh.Handler(tNode, req.Body) + tNode.TransRep.RetFiels = msg + switch tag { + case common.ResponseTag_Ok: + return transact.TransExeResult_Success + case common.ResponseTag_TransactYield: + return transact.TransExeResult_Yield + } + } + logger.Logger.Error("WebAPITranscateHandler.OnExcute err:", err.Error()) + return transact.TransExeResult_Failed +} + +func (this *WebAPITranscateHandler) OnCommit(tNode *transact.TransNode) transact.TransExeResult { + logger.Logger.Trace("WebAPITranscateHandler.OnCommit ") + return transact.TransExeResult_Success +} + +func (this *WebAPITranscateHandler) OnRollBack(tNode *transact.TransNode) transact.TransExeResult { + logger.Logger.Trace("WebAPITranscateHandler.OnRollBack ") + return transact.TransExeResult_Success +} + +func (this *WebAPITranscateHandler) OnChildTransRep(tNode *transact.TransNode, hChild transact.TransNodeID, retCode int, + ud interface{}) transact.TransExeResult { + logger.Logger.Trace("WebAPITranscateHandler.OnChildTransRep ") + return transact.TransExeResult_Success +} + +type WebAPIHandler interface { + Handler(*transact.TransNode, []byte) (int, proto.Message) +} + +type WebAPIHandlerWrapper func(*transact.TransNode, []byte) (int, proto.Message) + +func (wshw WebAPIHandlerWrapper) Handler(tNode *transact.TransNode, params []byte) (int, proto.Message) { + return wshw(tNode, params) +} + +type WebAPIHandlerMgr struct { + wshMap map[string]WebAPIHandler + DataWaitList sync.Map +} + +func (this *WebAPIHandlerMgr) RegisteWebAPIHandler(name string, wsh WebAPIHandler) { + this.wshMap[name] = wsh +} + +func (this *WebAPIHandlerMgr) GetWebAPIHandler(name string) WebAPIHandler { + if wsh, exist := this.wshMap[name]; exist { + return wsh + } + return nil +} + +func init() { + // 对局详情 + WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/game/room_info", WebAPIHandlerWrapper( + func(tNode *transact.TransNode, params []byte) (int, proto.Message) { + pack := &webapiproto.SARoomInfo{} + msg := &webapiproto.ASRoomInfo{} + err := proto.Unmarshal(params, msg) + if err != nil { + pack.Tag = webapiproto.TagCode_FAILED + pack.Msg = "数据序列化失败" + return common.ResponseTag_ParamError, pack + } + pack.Tag = webapiproto.TagCode_SUCCESS + + scene := base.SceneMgrSington.GetScene(int(msg.GetRoomId())) + if scene == nil || scene.ExtraData == nil { + pack.Tag = webapiproto.TagCode_NotFound + pack.Msg = "房间没找到" + return common.ResponseTag_NoFindRoom, pack + } + + switch d := scene.ExtraData.(type) { + case tienlen.TienLenSceneData: + for k := range d.BilledList { + pack.SnId = append(pack.SnId, k) + } + for k, v := range d.RoundLogId { + var score []int64 + for _, vv := range pack.SnId { + list := d.BilledList[vv] + if list == nil || len(*list) <= k { + score = append(score, 0) + continue + } + score = append(score, (*list)[k].ChangeScore) + } + item := &webapiproto.RoundInfo{ + Round: int32(k + 1), + Ts: d.RoundEndTime[k], + Score: score, + LogId: v, + } + pack.List = append(pack.List, item) + } + + default: + pack.Tag = webapiproto.TagCode_FAILED + pack.Msg = "未实现" + } + return common.ResponseTag_Ok, pack + })) +} diff --git a/mgrsrv/api/webapi_gamesrv.go b/mgrsrv/api/webapi_gamesrv.go index 7bc77f0..e7eea62 100644 --- a/mgrsrv/api/webapi_gamesrv.go +++ b/mgrsrv/api/webapi_gamesrv.go @@ -9,6 +9,7 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/goserver/core" + "mongo.games.com/goserver/core/admin" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/core/transact" @@ -176,14 +177,6 @@ func init() { return transact.TransExeResult(retCode) }), }) - // //参数设置 - // admin.MyAdminApp.Route("/api/Param/CommonTax", GameSrvWebAPI) - // //捕鱼金币池查询 - // admin.MyAdminApp.Route("/api/CoinPool/FishingPool", GameSrvWebAPI) - // //通用金币池查询 - // admin.MyAdminApp.Route("/api/CoinPool/GamePool", GameSrvWebAPI) - // //捕鱼渔场保留金币 - // admin.MyAdminApp.Route("/api/CoinPool/GameFishsAllCoin", GameSrvWebAPI) - // //单控数据 - //admin.MyAdminApp.Route("/api/game/SinglePlayerAdjust", GameSrvWebAPI) + // 对局详情 + admin.MyAdminApp.Route("/api/game/room_info", GameSrvWebAPI) } diff --git a/model/baginfo.go b/model/baginfo.go index fc2e14e..00a1698 100644 --- a/model/baginfo.go +++ b/model/baginfo.go @@ -84,3 +84,15 @@ func SaveToDelBackupBagItem(args *BagInfo) error { } return nil } + +type AddItemParam struct { + P *PlayerData + Change []*Item // 道具变化数量 + Cost []*Item // 获得道具时消耗的道具数量 + Add int64 // 加成数量 + GainWay int32 // 记录类型 + Operator, Remark string // 操作人,备注 + GameId, GameFreeId int64 // 游戏id,场次id + NoLog bool // 是否不记录日志 + LogId string // 撤销的id,道具兑换失败 +} diff --git a/model/itemdatalog.go b/model/itemdatalog.go index 62d58b6..a6cd9ab 100644 --- a/model/itemdatalog.go +++ b/model/itemdatalog.go @@ -26,7 +26,7 @@ type ItemLog struct { TypeId int32 // 变化类型 GameId int32 // 游戏id,游戏中获得时有值 GameFreeId int32 // 场次id,游戏中获得时有值 - Cost []*ItemInfo // 消耗的道具 + Cost []*Item // 消耗的道具 Id string // 撤销的id,兑换失败 } @@ -36,18 +36,18 @@ func NewItemLog() *ItemLog { } type ItemParam struct { - Platform string // 平台 - SnId int32 // 玩家id - LogType int32 // 记录类型 0.获取 1.消耗 - ItemId int32 // 道具id - ItemName string // 道具名称 - Count int64 // 个数 - Remark string // 备注 - TypeId int32 // 变化类型 - GameId int64 // 游戏id,游戏中获得时有值 - GameFreeId int64 // 场次id,游戏中获得时有值 - Cost []*ItemInfo // 消耗的道具 - LogId string // 撤销的id,兑换失败 + Platform string // 平台 + SnId int32 // 玩家id + LogType int32 // 记录类型 0.获取 1.消耗 + ItemId int32 // 道具id + ItemName string // 道具名称 + Count int64 // 个数 + Remark string // 备注 + TypeId int32 // 变化类型 + GameId int64 // 游戏id,游戏中获得时有值 + GameFreeId int64 // 场次id,游戏中获得时有值 + Cost []*Item // 消耗的道具 + LogId string // 撤销的id,兑换失败 } func NewItemLogEx(param ItemParam) *ItemLog { diff --git a/protocol/server/pbdata.pb.go b/protocol/server/pbdata.pb.go index 1603684..8685ba9 100644 --- a/protocol/server/pbdata.pb.go +++ b/protocol/server/pbdata.pb.go @@ -10746,9 +10746,11 @@ type DB_VIPShow struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` - SkinId int32 `protobuf:"varint,2,opt,name=SkinId,proto3" json:"SkinId,omitempty"` - VIPLevel int32 `protobuf:"varint,3,opt,name=VIPLevel,proto3" json:"VIPLevel,omitempty"` + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` + SkinId int32 `protobuf:"varint,3,opt,name=SkinId,proto3" json:"SkinId,omitempty"` + VIPLevel int32 `protobuf:"varint,4,opt,name=VIPLevel,proto3" json:"VIPLevel,omitempty"` + VIPDes string `protobuf:"bytes,5,opt,name=VIPDes,proto3" json:"VIPDes,omitempty"` } func (x *DB_VIPShow) Reset() { @@ -10790,6 +10792,13 @@ func (x *DB_VIPShow) GetId() int32 { return 0 } +func (x *DB_VIPShow) GetType() int32 { + if x != nil { + return x.Type + } + return 0 +} + func (x *DB_VIPShow) GetSkinId() int32 { if x != nil { return x.SkinId @@ -10804,6 +10813,13 @@ func (x *DB_VIPShow) GetVIPLevel() int32 { return 0 } +func (x *DB_VIPShow) GetVIPDes() string { + if x != nil { + return x.VIPDes + } + return "" +} + type DB_VIPShowArray struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -12291,18 +12307,21 @@ var file_pbdata_proto_rawDesc = []byte{ 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x20, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, - 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x50, 0x0a, 0x0a, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x53, + 0x52, 0x03, 0x41, 0x72, 0x72, 0x22, 0x7c, 0x0a, 0x0a, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x56, - 0x49, 0x50, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x56, - 0x49, 0x50, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x37, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x56, 0x49, - 0x50, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x24, 0x0a, 0x03, 0x41, 0x72, - 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x03, 0x41, 0x72, 0x72, - 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x56, 0x49, 0x50, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x56, 0x49, 0x50, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x56, + 0x49, 0x50, 0x44, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x56, 0x49, 0x50, + 0x44, 0x65, 0x73, 0x22, 0x37, 0x0a, 0x0f, 0x44, 0x42, 0x5f, 0x56, 0x49, 0x50, 0x53, 0x68, 0x6f, + 0x77, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x24, 0x0a, 0x03, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, + 0x56, 0x49, 0x50, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x03, 0x41, 0x72, 0x72, 0x42, 0x26, 0x5a, 0x24, + 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/server/pbdata.proto b/protocol/server/pbdata.proto index cbf781d..f288601 100644 --- a/protocol/server/pbdata.proto +++ b/protocol/server/pbdata.proto @@ -1757,9 +1757,13 @@ message DB_VIPShow { int32 Id = 1; - int32 SkinId = 2; + int32 Type = 2; - int32 VIPLevel = 3; + int32 SkinId = 3; + + int32 VIPLevel = 4; + + string VIPDes = 5; } diff --git a/protocol/server/server.pb.go b/protocol/server/server.pb.go index 1233d89..7341ecd 100644 --- a/protocol/server/server.pb.go +++ b/protocol/server/server.pb.go @@ -123,6 +123,7 @@ const ( SSPacketID_PACKET_GW_ADDSINGLEADJUST SSPacketID = 1551 SSPacketID_PACKET_WG_BUYRECTIMEITEM SSPacketID = 1552 SSPacketID_PACKET_WG_UpdateSkin SSPacketID = 1553 // 修改皮肤id + SSPacketID_PACKET_PlayerChangeItems SSPacketID = 1554 // 修改玩家道具数量 ) // Enum value maps for SSPacketID. @@ -224,6 +225,7 @@ var ( 1551: "PACKET_GW_ADDSINGLEADJUST", 1552: "PACKET_WG_BUYRECTIMEITEM", 1553: "PACKET_WG_UpdateSkin", + 1554: "PACKET_PlayerChangeItems", } SSPacketID_value = map[string]int32{ "PACKET_SERVER_ZERO": 0, @@ -322,6 +324,7 @@ var ( "PACKET_GW_ADDSINGLEADJUST": 1551, "PACKET_WG_BUYRECTIMEITEM": 1552, "PACKET_WG_UpdateSkin": 1553, + "PACKET_PlayerChangeItems": 1554, } ) @@ -845,6 +848,61 @@ func (x *ServerNotice) GetText() string { return "" } +type Item struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` +} + +func (x *Item) Reset() { + *x = Item{} + if protoimpl.UnsafeEnabled { + mi := &file_server_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Item) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Item) ProtoMessage() {} + +func (x *Item) ProtoReflect() protoreflect.Message { + mi := &file_server_proto_msgTypes[8] + 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 Item.ProtoReflect.Descriptor instead. +func (*Item) Descriptor() ([]byte, []int) { + return file_server_proto_rawDescGZIP(), []int{8} +} + +func (x *Item) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *Item) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 +} + //PACKET_WG_CREATESCENE type WGCreateScene struct { state protoimpl.MessageState @@ -874,12 +932,13 @@ type WGCreateScene struct { PlayerNum int32 `protobuf:"varint,21,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` RealCtrl bool `protobuf:"varint,22,opt,name=RealCtrl,proto3" json:"RealCtrl,omitempty"` ChessRank []int32 `protobuf:"varint,23,rep,packed,name=ChessRank,proto3" json:"ChessRank,omitempty"` + Items []*Item `protobuf:"bytes,24,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励道具 } func (x *WGCreateScene) Reset() { *x = WGCreateScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[8] + mi := &file_server_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -892,7 +951,7 @@ func (x *WGCreateScene) String() string { func (*WGCreateScene) ProtoMessage() {} func (x *WGCreateScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[8] + mi := &file_server_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -905,7 +964,7 @@ func (x *WGCreateScene) ProtoReflect() protoreflect.Message { // Deprecated: Use WGCreateScene.ProtoReflect.Descriptor instead. func (*WGCreateScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{8} + return file_server_proto_rawDescGZIP(), []int{9} } func (x *WGCreateScene) GetSceneId() int32 { @@ -1069,6 +1128,13 @@ func (x *WGCreateScene) GetChessRank() []int32 { return nil } +func (x *WGCreateScene) GetItems() []*Item { + if x != nil { + return x.Items + } + return nil +} + //PACKET_WG_DESTROYSCENE type WGDestroyScene struct { state protoimpl.MessageState @@ -1082,7 +1148,7 @@ type WGDestroyScene struct { func (x *WGDestroyScene) Reset() { *x = WGDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[9] + mi := &file_server_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1095,7 +1161,7 @@ func (x *WGDestroyScene) String() string { func (*WGDestroyScene) ProtoMessage() {} func (x *WGDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[9] + mi := &file_server_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1108,7 +1174,7 @@ func (x *WGDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDestroyScene.ProtoReflect.Descriptor instead. func (*WGDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{9} + return file_server_proto_rawDescGZIP(), []int{10} } func (x *WGDestroyScene) GetIds() []int64 { @@ -1138,7 +1204,7 @@ type GWDestroyScene struct { func (x *GWDestroyScene) Reset() { *x = GWDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[10] + mi := &file_server_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1151,7 +1217,7 @@ func (x *GWDestroyScene) String() string { func (*GWDestroyScene) ProtoMessage() {} func (x *GWDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[10] + mi := &file_server_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1164,7 +1230,7 @@ func (x *GWDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDestroyScene.ProtoReflect.Descriptor instead. func (*GWDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{10} + return file_server_proto_rawDescGZIP(), []int{11} } func (x *GWDestroyScene) GetSceneId() int64 { @@ -1193,7 +1259,7 @@ type RebateTask struct { func (x *RebateTask) Reset() { *x = RebateTask{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[11] + mi := &file_server_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1206,7 +1272,7 @@ func (x *RebateTask) String() string { func (*RebateTask) ProtoMessage() {} func (x *RebateTask) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[11] + mi := &file_server_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1219,7 +1285,7 @@ func (x *RebateTask) ProtoReflect() protoreflect.Message { // Deprecated: Use RebateTask.ProtoReflect.Descriptor instead. func (*RebateTask) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{11} + return file_server_proto_rawDescGZIP(), []int{12} } func (x *RebateTask) GetRebateSwitch() bool { @@ -1269,7 +1335,7 @@ type WGPlayerEnter struct { func (x *WGPlayerEnter) Reset() { *x = WGPlayerEnter{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[12] + mi := &file_server_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1282,7 +1348,7 @@ func (x *WGPlayerEnter) String() string { func (*WGPlayerEnter) ProtoMessage() {} func (x *WGPlayerEnter) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[12] + mi := &file_server_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1295,7 +1361,7 @@ func (x *WGPlayerEnter) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerEnter.ProtoReflect.Descriptor instead. func (*WGPlayerEnter) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{12} + return file_server_proto_rawDescGZIP(), []int{13} } func (x *WGPlayerEnter) GetSid() int64 { @@ -1461,7 +1527,7 @@ type WGAudienceSit struct { func (x *WGAudienceSit) Reset() { *x = WGAudienceSit{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[13] + mi := &file_server_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1474,7 +1540,7 @@ func (x *WGAudienceSit) String() string { func (*WGAudienceSit) ProtoMessage() {} func (x *WGAudienceSit) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[13] + mi := &file_server_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1487,7 +1553,7 @@ func (x *WGAudienceSit) ProtoReflect() protoreflect.Message { // Deprecated: Use WGAudienceSit.ProtoReflect.Descriptor instead. func (*WGAudienceSit) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{13} + return file_server_proto_rawDescGZIP(), []int{14} } func (x *WGAudienceSit) GetSnId() int32 { @@ -1533,7 +1599,7 @@ type WGPlayerReturn struct { func (x *WGPlayerReturn) Reset() { *x = WGPlayerReturn{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[14] + mi := &file_server_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1546,7 +1612,7 @@ func (x *WGPlayerReturn) String() string { func (*WGPlayerReturn) ProtoMessage() {} func (x *WGPlayerReturn) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[14] + mi := &file_server_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1559,7 +1625,7 @@ func (x *WGPlayerReturn) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerReturn.ProtoReflect.Descriptor instead. func (*WGPlayerReturn) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{14} + return file_server_proto_rawDescGZIP(), []int{15} } func (x *WGPlayerReturn) GetPlayerId() int32 { @@ -1621,7 +1687,7 @@ type GWPlayerLeave struct { func (x *GWPlayerLeave) Reset() { *x = GWPlayerLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[15] + mi := &file_server_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1634,7 +1700,7 @@ func (x *GWPlayerLeave) String() string { func (*GWPlayerLeave) ProtoMessage() {} func (x *GWPlayerLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[15] + mi := &file_server_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1647,7 +1713,7 @@ func (x *GWPlayerLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerLeave.ProtoReflect.Descriptor instead. func (*GWPlayerLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{15} + return file_server_proto_rawDescGZIP(), []int{16} } func (x *GWPlayerLeave) GetRoomId() int32 { @@ -1796,7 +1862,7 @@ type WGPlayerDropLine struct { func (x *WGPlayerDropLine) Reset() { *x = WGPlayerDropLine{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[16] + mi := &file_server_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1809,7 +1875,7 @@ func (x *WGPlayerDropLine) String() string { func (*WGPlayerDropLine) ProtoMessage() {} func (x *WGPlayerDropLine) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[16] + mi := &file_server_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1822,7 +1888,7 @@ func (x *WGPlayerDropLine) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerDropLine.ProtoReflect.Descriptor instead. func (*WGPlayerDropLine) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{16} + return file_server_proto_rawDescGZIP(), []int{17} } func (x *WGPlayerDropLine) GetId() int32 { @@ -1854,7 +1920,7 @@ type WGPlayerRehold struct { func (x *WGPlayerRehold) Reset() { *x = WGPlayerRehold{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[17] + mi := &file_server_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1867,7 +1933,7 @@ func (x *WGPlayerRehold) String() string { func (*WGPlayerRehold) ProtoMessage() {} func (x *WGPlayerRehold) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[17] + mi := &file_server_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1880,7 +1946,7 @@ func (x *WGPlayerRehold) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerRehold.ProtoReflect.Descriptor instead. func (*WGPlayerRehold) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{17} + return file_server_proto_rawDescGZIP(), []int{18} } func (x *WGPlayerRehold) GetId() int32 { @@ -1924,7 +1990,7 @@ type GWBilledRoomCard struct { func (x *GWBilledRoomCard) Reset() { *x = GWBilledRoomCard{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[18] + mi := &file_server_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1937,7 +2003,7 @@ func (x *GWBilledRoomCard) String() string { func (*GWBilledRoomCard) ProtoMessage() {} func (x *GWBilledRoomCard) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[18] + mi := &file_server_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1950,7 +2016,7 @@ func (x *GWBilledRoomCard) ProtoReflect() protoreflect.Message { // Deprecated: Use GWBilledRoomCard.ProtoReflect.Descriptor instead. func (*GWBilledRoomCard) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{18} + return file_server_proto_rawDescGZIP(), []int{19} } func (x *GWBilledRoomCard) GetRoomId() int32 { @@ -1984,7 +2050,7 @@ type GGPlayerSessionBind struct { func (x *GGPlayerSessionBind) Reset() { *x = GGPlayerSessionBind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[19] + mi := &file_server_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1997,7 +2063,7 @@ func (x *GGPlayerSessionBind) String() string { func (*GGPlayerSessionBind) ProtoMessage() {} func (x *GGPlayerSessionBind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[19] + mi := &file_server_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2010,7 +2076,7 @@ func (x *GGPlayerSessionBind) ProtoReflect() protoreflect.Message { // Deprecated: Use GGPlayerSessionBind.ProtoReflect.Descriptor instead. func (*GGPlayerSessionBind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{19} + return file_server_proto_rawDescGZIP(), []int{20} } func (x *GGPlayerSessionBind) GetSid() int64 { @@ -2067,7 +2133,7 @@ type GGPlayerSessionUnBind struct { func (x *GGPlayerSessionUnBind) Reset() { *x = GGPlayerSessionUnBind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[20] + mi := &file_server_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2080,7 +2146,7 @@ func (x *GGPlayerSessionUnBind) String() string { func (*GGPlayerSessionUnBind) ProtoMessage() {} func (x *GGPlayerSessionUnBind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[20] + mi := &file_server_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2093,7 +2159,7 @@ func (x *GGPlayerSessionUnBind) ProtoReflect() protoreflect.Message { // Deprecated: Use GGPlayerSessionUnBind.ProtoReflect.Descriptor instead. func (*GGPlayerSessionUnBind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{20} + return file_server_proto_rawDescGZIP(), []int{21} } func (x *GGPlayerSessionUnBind) GetSid() int64 { @@ -2118,7 +2184,7 @@ type WGDayTimeChange struct { func (x *WGDayTimeChange) Reset() { *x = WGDayTimeChange{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[21] + mi := &file_server_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2131,7 +2197,7 @@ func (x *WGDayTimeChange) String() string { func (*WGDayTimeChange) ProtoMessage() {} func (x *WGDayTimeChange) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[21] + mi := &file_server_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2144,7 +2210,7 @@ func (x *WGDayTimeChange) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDayTimeChange.ProtoReflect.Descriptor instead. func (*WGDayTimeChange) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{21} + return file_server_proto_rawDescGZIP(), []int{22} } func (x *WGDayTimeChange) GetMinute() int32 { @@ -2200,7 +2266,7 @@ type ReplayPlayerData struct { func (x *ReplayPlayerData) Reset() { *x = ReplayPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[22] + mi := &file_server_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2213,7 +2279,7 @@ func (x *ReplayPlayerData) String() string { func (*ReplayPlayerData) ProtoMessage() {} func (x *ReplayPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[22] + mi := &file_server_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2226,7 +2292,7 @@ func (x *ReplayPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayPlayerData.ProtoReflect.Descriptor instead. func (*ReplayPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{22} + return file_server_proto_rawDescGZIP(), []int{23} } func (x *ReplayPlayerData) GetAccId() string { @@ -2302,7 +2368,7 @@ type ReplayRecord struct { func (x *ReplayRecord) Reset() { *x = ReplayRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[23] + mi := &file_server_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2315,7 +2381,7 @@ func (x *ReplayRecord) String() string { func (*ReplayRecord) ProtoMessage() {} func (x *ReplayRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[23] + mi := &file_server_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2328,7 +2394,7 @@ func (x *ReplayRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayRecord.ProtoReflect.Descriptor instead. func (*ReplayRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{23} + return file_server_proto_rawDescGZIP(), []int{24} } func (x *ReplayRecord) GetTimeStamp() int64 { @@ -2384,7 +2450,7 @@ type ReplaySequene struct { func (x *ReplaySequene) Reset() { *x = ReplaySequene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[24] + mi := &file_server_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2397,7 +2463,7 @@ func (x *ReplaySequene) String() string { func (*ReplaySequene) ProtoMessage() {} func (x *ReplaySequene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[24] + mi := &file_server_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2410,7 +2476,7 @@ func (x *ReplaySequene) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaySequene.ProtoReflect.Descriptor instead. func (*ReplaySequene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{24} + return file_server_proto_rawDescGZIP(), []int{25} } func (x *ReplaySequene) GetSequenes() []*ReplayRecord { @@ -2448,7 +2514,7 @@ type GRReplaySequene struct { func (x *GRReplaySequene) Reset() { *x = GRReplaySequene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[25] + mi := &file_server_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2461,7 +2527,7 @@ func (x *GRReplaySequene) String() string { func (*GRReplaySequene) ProtoMessage() {} func (x *GRReplaySequene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[25] + mi := &file_server_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2474,7 +2540,7 @@ func (x *GRReplaySequene) ProtoReflect() protoreflect.Message { // Deprecated: Use GRReplaySequene.ProtoReflect.Descriptor instead. func (*GRReplaySequene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{25} + return file_server_proto_rawDescGZIP(), []int{26} } func (x *GRReplaySequene) GetName() string { @@ -2621,7 +2687,7 @@ type WRLoginRec struct { func (x *WRLoginRec) Reset() { *x = WRLoginRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[26] + mi := &file_server_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2634,7 +2700,7 @@ func (x *WRLoginRec) String() string { func (*WRLoginRec) ProtoMessage() {} func (x *WRLoginRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[26] + mi := &file_server_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2647,7 +2713,7 @@ func (x *WRLoginRec) ProtoReflect() protoreflect.Message { // Deprecated: Use WRLoginRec.ProtoReflect.Descriptor instead. func (*WRLoginRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{26} + return file_server_proto_rawDescGZIP(), []int{27} } func (x *WRLoginRec) GetSnId() int32 { @@ -2711,7 +2777,7 @@ type WRGameDetail struct { func (x *WRGameDetail) Reset() { *x = WRGameDetail{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[27] + mi := &file_server_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2724,7 +2790,7 @@ func (x *WRGameDetail) String() string { func (*WRGameDetail) ProtoMessage() {} func (x *WRGameDetail) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[27] + mi := &file_server_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2737,7 +2803,7 @@ func (x *WRGameDetail) ProtoReflect() protoreflect.Message { // Deprecated: Use WRGameDetail.ProtoReflect.Descriptor instead. func (*WRGameDetail) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{27} + return file_server_proto_rawDescGZIP(), []int{28} } func (x *WRGameDetail) GetGameDetail() []byte { @@ -2760,7 +2826,7 @@ type WRPlayerData struct { func (x *WRPlayerData) Reset() { *x = WRPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[28] + mi := &file_server_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2773,7 +2839,7 @@ func (x *WRPlayerData) String() string { func (*WRPlayerData) ProtoMessage() {} func (x *WRPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[28] + mi := &file_server_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2786,7 +2852,7 @@ func (x *WRPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use WRPlayerData.ProtoReflect.Descriptor instead. func (*WRPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{28} + return file_server_proto_rawDescGZIP(), []int{29} } func (x *WRPlayerData) GetSid() int64 { @@ -2816,7 +2882,7 @@ type WTPlayerPay struct { func (x *WTPlayerPay) Reset() { *x = WTPlayerPay{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[29] + mi := &file_server_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2829,7 +2895,7 @@ func (x *WTPlayerPay) String() string { func (*WTPlayerPay) ProtoMessage() {} func (x *WTPlayerPay) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[29] + mi := &file_server_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2842,7 +2908,7 @@ func (x *WTPlayerPay) ProtoReflect() protoreflect.Message { // Deprecated: Use WTPlayerPay.ProtoReflect.Descriptor instead. func (*WTPlayerPay) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{29} + return file_server_proto_rawDescGZIP(), []int{30} } func (x *WTPlayerPay) GetPlayerData() []byte { @@ -2875,7 +2941,7 @@ type PlayerGameRec struct { func (x *PlayerGameRec) Reset() { *x = PlayerGameRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[30] + mi := &file_server_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2888,7 +2954,7 @@ func (x *PlayerGameRec) String() string { func (*PlayerGameRec) ProtoMessage() {} func (x *PlayerGameRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[30] + mi := &file_server_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2901,7 +2967,7 @@ func (x *PlayerGameRec) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerGameRec.ProtoReflect.Descriptor instead. func (*PlayerGameRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{30} + return file_server_proto_rawDescGZIP(), []int{31} } func (x *PlayerGameRec) GetId() int32 { @@ -2962,7 +3028,7 @@ type GWGameRec struct { func (x *GWGameRec) Reset() { *x = GWGameRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[31] + mi := &file_server_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2975,7 +3041,7 @@ func (x *GWGameRec) String() string { func (*GWGameRec) ProtoMessage() {} func (x *GWGameRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[31] + mi := &file_server_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2988,7 +3054,7 @@ func (x *GWGameRec) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameRec.ProtoReflect.Descriptor instead. func (*GWGameRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{31} + return file_server_proto_rawDescGZIP(), []int{32} } func (x *GWGameRec) GetRoomId() int32 { @@ -3041,7 +3107,7 @@ type GWSceneStart struct { func (x *GWSceneStart) Reset() { *x = GWSceneStart{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[32] + mi := &file_server_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3054,7 +3120,7 @@ func (x *GWSceneStart) String() string { func (*GWSceneStart) ProtoMessage() {} func (x *GWSceneStart) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[32] + mi := &file_server_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3067,7 +3133,7 @@ func (x *GWSceneStart) ProtoReflect() protoreflect.Message { // Deprecated: Use GWSceneStart.ProtoReflect.Descriptor instead. func (*GWSceneStart) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{32} + return file_server_proto_rawDescGZIP(), []int{33} } func (x *GWSceneStart) GetRoomId() int32 { @@ -3110,7 +3176,7 @@ type PlayerCtx struct { func (x *PlayerCtx) Reset() { *x = PlayerCtx{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[33] + mi := &file_server_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3123,7 +3189,7 @@ func (x *PlayerCtx) String() string { func (*PlayerCtx) ProtoMessage() {} func (x *PlayerCtx) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[33] + mi := &file_server_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3136,7 +3202,7 @@ func (x *PlayerCtx) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCtx.ProtoReflect.Descriptor instead. func (*PlayerCtx) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{33} + return file_server_proto_rawDescGZIP(), []int{34} } func (x *PlayerCtx) GetSnId() int32 { @@ -3172,7 +3238,7 @@ type FishRecord struct { func (x *FishRecord) Reset() { *x = FishRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[34] + mi := &file_server_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3185,7 +3251,7 @@ func (x *FishRecord) String() string { func (*FishRecord) ProtoMessage() {} func (x *FishRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[34] + mi := &file_server_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3198,7 +3264,7 @@ func (x *FishRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use FishRecord.ProtoReflect.Descriptor instead. func (*FishRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{34} + return file_server_proto_rawDescGZIP(), []int{35} } func (x *FishRecord) GetFishId() int32 { @@ -3228,7 +3294,7 @@ type GWFishRecord struct { func (x *GWFishRecord) Reset() { *x = GWFishRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[35] + mi := &file_server_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3241,7 +3307,7 @@ func (x *GWFishRecord) String() string { func (*GWFishRecord) ProtoMessage() {} func (x *GWFishRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[35] + mi := &file_server_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3254,7 +3320,7 @@ func (x *GWFishRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use GWFishRecord.ProtoReflect.Descriptor instead. func (*GWFishRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{35} + return file_server_proto_rawDescGZIP(), []int{36} } func (x *GWFishRecord) GetGameFreeId() int32 { @@ -3292,7 +3358,7 @@ type GWSceneState struct { func (x *GWSceneState) Reset() { *x = GWSceneState{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[36] + mi := &file_server_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3305,7 +3371,7 @@ func (x *GWSceneState) String() string { func (*GWSceneState) ProtoMessage() {} func (x *GWSceneState) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[36] + mi := &file_server_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3318,7 +3384,7 @@ func (x *GWSceneState) ProtoReflect() protoreflect.Message { // Deprecated: Use GWSceneState.ProtoReflect.Descriptor instead. func (*GWSceneState) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{36} + return file_server_proto_rawDescGZIP(), []int{37} } func (x *GWSceneState) GetRoomId() int32 { @@ -3352,7 +3418,7 @@ type WRInviteRobot struct { func (x *WRInviteRobot) Reset() { *x = WRInviteRobot{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[37] + mi := &file_server_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3365,7 +3431,7 @@ func (x *WRInviteRobot) String() string { func (*WRInviteRobot) ProtoMessage() {} func (x *WRInviteRobot) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[37] + mi := &file_server_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3378,7 +3444,7 @@ func (x *WRInviteRobot) ProtoReflect() protoreflect.Message { // Deprecated: Use WRInviteRobot.ProtoReflect.Descriptor instead. func (*WRInviteRobot) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{37} + return file_server_proto_rawDescGZIP(), []int{38} } func (x *WRInviteRobot) GetRoomId() int32 { @@ -3436,7 +3502,7 @@ type WRInviteCreateRoom struct { func (x *WRInviteCreateRoom) Reset() { *x = WRInviteCreateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[38] + mi := &file_server_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3449,7 +3515,7 @@ func (x *WRInviteCreateRoom) String() string { func (*WRInviteCreateRoom) ProtoMessage() {} func (x *WRInviteCreateRoom) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[38] + mi := &file_server_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3462,7 +3528,7 @@ func (x *WRInviteCreateRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use WRInviteCreateRoom.ProtoReflect.Descriptor instead. func (*WRInviteCreateRoom) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{38} + return file_server_proto_rawDescGZIP(), []int{39} } func (x *WRInviteCreateRoom) GetCnt() int32 { @@ -3494,7 +3560,7 @@ type WGAgentKickOutPlayer struct { func (x *WGAgentKickOutPlayer) Reset() { *x = WGAgentKickOutPlayer{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[39] + mi := &file_server_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3507,7 +3573,7 @@ func (x *WGAgentKickOutPlayer) String() string { func (*WGAgentKickOutPlayer) ProtoMessage() {} func (x *WGAgentKickOutPlayer) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[39] + mi := &file_server_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3520,7 +3586,7 @@ func (x *WGAgentKickOutPlayer) ProtoReflect() protoreflect.Message { // Deprecated: Use WGAgentKickOutPlayer.ProtoReflect.Descriptor instead. func (*WGAgentKickOutPlayer) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{39} + return file_server_proto_rawDescGZIP(), []int{40} } func (x *WGAgentKickOutPlayer) GetRoomId() int32 { @@ -3564,7 +3630,7 @@ type WDDataAnalysis struct { func (x *WDDataAnalysis) Reset() { *x = WDDataAnalysis{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[40] + mi := &file_server_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3577,7 +3643,7 @@ func (x *WDDataAnalysis) String() string { func (*WDDataAnalysis) ProtoMessage() {} func (x *WDDataAnalysis) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[40] + mi := &file_server_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3590,7 +3656,7 @@ func (x *WDDataAnalysis) ProtoReflect() protoreflect.Message { // Deprecated: Use WDDataAnalysis.ProtoReflect.Descriptor instead. func (*WDDataAnalysis) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{40} + return file_server_proto_rawDescGZIP(), []int{41} } func (x *WDDataAnalysis) GetDataType() int32 { @@ -3619,7 +3685,7 @@ type PlayerCard struct { func (x *PlayerCard) Reset() { *x = PlayerCard{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[41] + mi := &file_server_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3632,7 +3698,7 @@ func (x *PlayerCard) String() string { func (*PlayerCard) ProtoMessage() {} func (x *PlayerCard) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[41] + mi := &file_server_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3645,7 +3711,7 @@ func (x *PlayerCard) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCard.ProtoReflect.Descriptor instead. func (*PlayerCard) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{41} + return file_server_proto_rawDescGZIP(), []int{42} } func (x *PlayerCard) GetPos() int32 { @@ -3675,7 +3741,7 @@ type GNPlayerCards struct { func (x *GNPlayerCards) Reset() { *x = GNPlayerCards{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[42] + mi := &file_server_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3688,7 +3754,7 @@ func (x *GNPlayerCards) String() string { func (*GNPlayerCards) ProtoMessage() {} func (x *GNPlayerCards) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[42] + mi := &file_server_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3701,7 +3767,7 @@ func (x *GNPlayerCards) ProtoReflect() protoreflect.Message { // Deprecated: Use GNPlayerCards.ProtoReflect.Descriptor instead. func (*GNPlayerCards) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{42} + return file_server_proto_rawDescGZIP(), []int{43} } func (x *GNPlayerCards) GetSceneId() int32 { @@ -3740,7 +3806,7 @@ type RobotData struct { func (x *RobotData) Reset() { *x = RobotData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[43] + mi := &file_server_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3753,7 +3819,7 @@ func (x *RobotData) String() string { func (*RobotData) ProtoMessage() {} func (x *RobotData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[43] + mi := &file_server_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3766,7 +3832,7 @@ func (x *RobotData) ProtoReflect() protoreflect.Message { // Deprecated: Use RobotData.ProtoReflect.Descriptor instead. func (*RobotData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{43} + return file_server_proto_rawDescGZIP(), []int{44} } func (x *RobotData) GetTotalIn() int64 { @@ -3816,7 +3882,7 @@ type GNPlayerParam struct { func (x *GNPlayerParam) Reset() { *x = GNPlayerParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[44] + mi := &file_server_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3829,7 +3895,7 @@ func (x *GNPlayerParam) String() string { func (*GNPlayerParam) ProtoMessage() {} func (x *GNPlayerParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[44] + mi := &file_server_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3842,7 +3908,7 @@ func (x *GNPlayerParam) ProtoReflect() protoreflect.Message { // Deprecated: Use GNPlayerParam.ProtoReflect.Descriptor instead. func (*GNPlayerParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{44} + return file_server_proto_rawDescGZIP(), []int{45} } func (x *GNPlayerParam) GetSceneId() int32 { @@ -3873,7 +3939,7 @@ type GWRebuildScene struct { func (x *GWRebuildScene) Reset() { *x = GWRebuildScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[45] + mi := &file_server_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3886,7 +3952,7 @@ func (x *GWRebuildScene) String() string { func (*GWRebuildScene) ProtoMessage() {} func (x *GWRebuildScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[45] + mi := &file_server_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3899,7 +3965,7 @@ func (x *GWRebuildScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWRebuildScene.ProtoReflect.Descriptor instead. func (*GWRebuildScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{45} + return file_server_proto_rawDescGZIP(), []int{46} } func (x *GWRebuildScene) GetSceneIds() []int32 { @@ -3929,7 +3995,7 @@ type WGRebindPlayerSnId struct { func (x *WGRebindPlayerSnId) Reset() { *x = WGRebindPlayerSnId{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[46] + mi := &file_server_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3942,7 +4008,7 @@ func (x *WGRebindPlayerSnId) String() string { func (*WGRebindPlayerSnId) ProtoMessage() {} func (x *WGRebindPlayerSnId) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[46] + mi := &file_server_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3955,7 +4021,7 @@ func (x *WGRebindPlayerSnId) ProtoReflect() protoreflect.Message { // Deprecated: Use WGRebindPlayerSnId.ProtoReflect.Descriptor instead. func (*WGRebindPlayerSnId) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{46} + return file_server_proto_rawDescGZIP(), []int{47} } func (x *WGRebindPlayerSnId) GetOldSnId() int32 { @@ -3986,7 +4052,7 @@ type GWPlayerFlag struct { func (x *GWPlayerFlag) Reset() { *x = GWPlayerFlag{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[47] + mi := &file_server_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3999,7 +4065,7 @@ func (x *GWPlayerFlag) String() string { func (*GWPlayerFlag) ProtoMessage() {} func (x *GWPlayerFlag) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[47] + mi := &file_server_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4012,7 +4078,7 @@ func (x *GWPlayerFlag) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerFlag.ProtoReflect.Descriptor instead. func (*GWPlayerFlag) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{47} + return file_server_proto_rawDescGZIP(), []int{48} } func (x *GWPlayerFlag) GetSnId() int32 { @@ -4051,7 +4117,7 @@ type WGHundredOp struct { func (x *WGHundredOp) Reset() { *x = WGHundredOp{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[48] + mi := &file_server_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4064,7 +4130,7 @@ func (x *WGHundredOp) String() string { func (*WGHundredOp) ProtoMessage() {} func (x *WGHundredOp) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[48] + mi := &file_server_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4077,7 +4143,7 @@ func (x *WGHundredOp) ProtoReflect() protoreflect.Message { // Deprecated: Use WGHundredOp.ProtoReflect.Descriptor instead. func (*WGHundredOp) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{48} + return file_server_proto_rawDescGZIP(), []int{49} } func (x *WGHundredOp) GetSnid() int32 { @@ -4121,7 +4187,7 @@ type GWNewNotice struct { func (x *GWNewNotice) Reset() { *x = GWNewNotice{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[49] + mi := &file_server_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4134,7 +4200,7 @@ func (x *GWNewNotice) String() string { func (*GWNewNotice) ProtoMessage() {} func (x *GWNewNotice) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[49] + mi := &file_server_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4147,7 +4213,7 @@ func (x *GWNewNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use GWNewNotice.ProtoReflect.Descriptor instead. func (*GWNewNotice) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{49} + return file_server_proto_rawDescGZIP(), []int{50} } func (x *GWNewNotice) GetCh() string { @@ -4232,7 +4298,7 @@ type PlayerStatics struct { func (x *PlayerStatics) Reset() { *x = PlayerStatics{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[50] + mi := &file_server_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4245,7 +4311,7 @@ func (x *PlayerStatics) String() string { func (*PlayerStatics) ProtoMessage() {} func (x *PlayerStatics) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[50] + mi := &file_server_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4258,7 +4324,7 @@ func (x *PlayerStatics) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerStatics.ProtoReflect.Descriptor instead. func (*PlayerStatics) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{50} + return file_server_proto_rawDescGZIP(), []int{51} } func (x *PlayerStatics) GetSnId() int32 { @@ -4338,7 +4404,7 @@ type GWPlayerStatics struct { func (x *GWPlayerStatics) Reset() { *x = GWPlayerStatics{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[51] + mi := &file_server_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4351,7 +4417,7 @@ func (x *GWPlayerStatics) String() string { func (*GWPlayerStatics) ProtoMessage() {} func (x *GWPlayerStatics) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[51] + mi := &file_server_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4364,7 +4430,7 @@ func (x *GWPlayerStatics) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerStatics.ProtoReflect.Descriptor instead. func (*GWPlayerStatics) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{51} + return file_server_proto_rawDescGZIP(), []int{52} } func (x *GWPlayerStatics) GetRoomId() int32 { @@ -4411,7 +4477,7 @@ type WGResetCoinPool struct { func (x *WGResetCoinPool) Reset() { *x = WGResetCoinPool{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[52] + mi := &file_server_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4424,7 +4490,7 @@ func (x *WGResetCoinPool) String() string { func (*WGResetCoinPool) ProtoMessage() {} func (x *WGResetCoinPool) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[52] + mi := &file_server_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4437,7 +4503,7 @@ func (x *WGResetCoinPool) ProtoReflect() protoreflect.Message { // Deprecated: Use WGResetCoinPool.ProtoReflect.Descriptor instead. func (*WGResetCoinPool) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{52} + return file_server_proto_rawDescGZIP(), []int{53} } func (x *WGResetCoinPool) GetPlatform() string { @@ -4499,7 +4565,7 @@ type WGSetPlayerBlackLevel struct { func (x *WGSetPlayerBlackLevel) Reset() { *x = WGSetPlayerBlackLevel{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[53] + mi := &file_server_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4512,7 +4578,7 @@ func (x *WGSetPlayerBlackLevel) String() string { func (*WGSetPlayerBlackLevel) ProtoMessage() {} func (x *WGSetPlayerBlackLevel) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[53] + mi := &file_server_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4525,7 +4591,7 @@ func (x *WGSetPlayerBlackLevel) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSetPlayerBlackLevel.ProtoReflect.Descriptor instead. func (*WGSetPlayerBlackLevel) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{53} + return file_server_proto_rawDescGZIP(), []int{54} } func (x *WGSetPlayerBlackLevel) GetSnId() int32 { @@ -4588,7 +4654,7 @@ type GWAutoRelieveWBLevel struct { func (x *GWAutoRelieveWBLevel) Reset() { *x = GWAutoRelieveWBLevel{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[54] + mi := &file_server_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4601,7 +4667,7 @@ func (x *GWAutoRelieveWBLevel) String() string { func (*GWAutoRelieveWBLevel) ProtoMessage() {} func (x *GWAutoRelieveWBLevel) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[54] + mi := &file_server_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4614,7 +4680,7 @@ func (x *GWAutoRelieveWBLevel) ProtoReflect() protoreflect.Message { // Deprecated: Use GWAutoRelieveWBLevel.ProtoReflect.Descriptor instead. func (*GWAutoRelieveWBLevel) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{54} + return file_server_proto_rawDescGZIP(), []int{55} } func (x *GWAutoRelieveWBLevel) GetSnId() int32 { @@ -4640,7 +4706,7 @@ type GWScenePlayerLog struct { func (x *GWScenePlayerLog) Reset() { *x = GWScenePlayerLog{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[55] + mi := &file_server_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4653,7 +4719,7 @@ func (x *GWScenePlayerLog) String() string { func (*GWScenePlayerLog) ProtoMessage() {} func (x *GWScenePlayerLog) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[55] + mi := &file_server_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4666,7 +4732,7 @@ func (x *GWScenePlayerLog) ProtoReflect() protoreflect.Message { // Deprecated: Use GWScenePlayerLog.ProtoReflect.Descriptor instead. func (*GWScenePlayerLog) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{55} + return file_server_proto_rawDescGZIP(), []int{56} } func (x *GWScenePlayerLog) GetGameId() int32 { @@ -4712,7 +4778,7 @@ type GWPlayerForceLeave struct { func (x *GWPlayerForceLeave) Reset() { *x = GWPlayerForceLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[56] + mi := &file_server_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4725,7 +4791,7 @@ func (x *GWPlayerForceLeave) String() string { func (*GWPlayerForceLeave) ProtoMessage() {} func (x *GWPlayerForceLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[56] + mi := &file_server_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4738,7 +4804,7 @@ func (x *GWPlayerForceLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerForceLeave.ProtoReflect.Descriptor instead. func (*GWPlayerForceLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{56} + return file_server_proto_rawDescGZIP(), []int{57} } func (x *GWPlayerForceLeave) GetRoomId() int32 { @@ -4788,7 +4854,7 @@ type PlayerData struct { func (x *PlayerData) Reset() { *x = PlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[57] + mi := &file_server_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4801,7 +4867,7 @@ func (x *PlayerData) String() string { func (*PlayerData) ProtoMessage() {} func (x *PlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[57] + mi := &file_server_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4814,7 +4880,7 @@ func (x *PlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerData.ProtoReflect.Descriptor instead. func (*PlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{57} + return file_server_proto_rawDescGZIP(), []int{58} } func (x *PlayerData) GetSnId() int32 { @@ -4886,7 +4952,7 @@ type GWPlayerData struct { func (x *GWPlayerData) Reset() { *x = GWPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[58] + mi := &file_server_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4899,7 +4965,7 @@ func (x *GWPlayerData) String() string { func (*GWPlayerData) ProtoMessage() {} func (x *GWPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[58] + mi := &file_server_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4912,7 +4978,7 @@ func (x *GWPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerData.ProtoReflect.Descriptor instead. func (*GWPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{58} + return file_server_proto_rawDescGZIP(), []int{59} } func (x *GWPlayerData) GetDatas() []*PlayerData { @@ -4954,7 +5020,7 @@ type PlayerWinScore struct { func (x *PlayerWinScore) Reset() { *x = PlayerWinScore{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[59] + mi := &file_server_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4967,7 +5033,7 @@ func (x *PlayerWinScore) String() string { func (*PlayerWinScore) ProtoMessage() {} func (x *PlayerWinScore) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[59] + mi := &file_server_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4980,7 +5046,7 @@ func (x *PlayerWinScore) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerWinScore.ProtoReflect.Descriptor instead. func (*PlayerWinScore) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{59} + return file_server_proto_rawDescGZIP(), []int{60} } func (x *PlayerWinScore) GetSnId() int32 { @@ -5047,7 +5113,7 @@ type GWPlayerWinScore struct { func (x *GWPlayerWinScore) Reset() { *x = GWPlayerWinScore{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[60] + mi := &file_server_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5060,7 +5126,7 @@ func (x *GWPlayerWinScore) String() string { func (*GWPlayerWinScore) ProtoMessage() {} func (x *GWPlayerWinScore) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[60] + mi := &file_server_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5073,7 +5139,7 @@ func (x *GWPlayerWinScore) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerWinScore.ProtoReflect.Descriptor instead. func (*GWPlayerWinScore) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{60} + return file_server_proto_rawDescGZIP(), []int{61} } func (x *GWPlayerWinScore) GetGameFreeId() int32 { @@ -5122,7 +5188,7 @@ type WGPayerOnGameCount struct { func (x *WGPayerOnGameCount) Reset() { *x = WGPayerOnGameCount{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[61] + mi := &file_server_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5135,7 +5201,7 @@ func (x *WGPayerOnGameCount) String() string { func (*WGPayerOnGameCount) ProtoMessage() {} func (x *WGPayerOnGameCount) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[61] + mi := &file_server_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5148,7 +5214,7 @@ func (x *WGPayerOnGameCount) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPayerOnGameCount.ProtoReflect.Descriptor instead. func (*WGPayerOnGameCount) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{61} + return file_server_proto_rawDescGZIP(), []int{62} } func (x *WGPayerOnGameCount) GetDTCount() []int32 { @@ -5170,7 +5236,7 @@ type GRGameFreeData struct { func (x *GRGameFreeData) Reset() { *x = GRGameFreeData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[62] + mi := &file_server_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5183,7 +5249,7 @@ func (x *GRGameFreeData) String() string { func (*GRGameFreeData) ProtoMessage() {} func (x *GRGameFreeData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[62] + mi := &file_server_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5196,7 +5262,7 @@ func (x *GRGameFreeData) ProtoReflect() protoreflect.Message { // Deprecated: Use GRGameFreeData.ProtoReflect.Descriptor instead. func (*GRGameFreeData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{62} + return file_server_proto_rawDescGZIP(), []int{63} } func (x *GRGameFreeData) GetRoomId() int32 { @@ -5225,7 +5291,7 @@ type WGSyncPlayerSafeBoxCoin struct { func (x *WGSyncPlayerSafeBoxCoin) Reset() { *x = WGSyncPlayerSafeBoxCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[63] + mi := &file_server_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5238,7 +5304,7 @@ func (x *WGSyncPlayerSafeBoxCoin) String() string { func (*WGSyncPlayerSafeBoxCoin) ProtoMessage() {} func (x *WGSyncPlayerSafeBoxCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[63] + mi := &file_server_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5251,7 +5317,7 @@ func (x *WGSyncPlayerSafeBoxCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSyncPlayerSafeBoxCoin.ProtoReflect.Descriptor instead. func (*WGSyncPlayerSafeBoxCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{63} + return file_server_proto_rawDescGZIP(), []int{64} } func (x *WGSyncPlayerSafeBoxCoin) GetSnId() int32 { @@ -5283,7 +5349,7 @@ type WGClubMessage struct { func (x *WGClubMessage) Reset() { *x = WGClubMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[64] + mi := &file_server_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5296,7 +5362,7 @@ func (x *WGClubMessage) String() string { func (*WGClubMessage) ProtoMessage() {} func (x *WGClubMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[64] + mi := &file_server_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5309,7 +5375,7 @@ func (x *WGClubMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use WGClubMessage.ProtoReflect.Descriptor instead. func (*WGClubMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{64} + return file_server_proto_rawDescGZIP(), []int{65} } func (x *WGClubMessage) GetClubId() int64 { @@ -5356,7 +5422,7 @@ type DWThirdRebateMessage struct { func (x *DWThirdRebateMessage) Reset() { *x = DWThirdRebateMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[65] + mi := &file_server_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5369,7 +5435,7 @@ func (x *DWThirdRebateMessage) String() string { func (*DWThirdRebateMessage) ProtoMessage() {} func (x *DWThirdRebateMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[65] + mi := &file_server_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5382,7 +5448,7 @@ func (x *DWThirdRebateMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use DWThirdRebateMessage.ProtoReflect.Descriptor instead. func (*DWThirdRebateMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{65} + return file_server_proto_rawDescGZIP(), []int{66} } func (x *DWThirdRebateMessage) GetTag() uint64 { @@ -5441,7 +5507,7 @@ type DWThirdRoundMessage struct { func (x *DWThirdRoundMessage) Reset() { *x = DWThirdRoundMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[66] + mi := &file_server_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5454,7 +5520,7 @@ func (x *DWThirdRoundMessage) String() string { func (*DWThirdRoundMessage) ProtoMessage() {} func (x *DWThirdRoundMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[66] + mi := &file_server_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5467,7 +5533,7 @@ func (x *DWThirdRoundMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use DWThirdRoundMessage.ProtoReflect.Descriptor instead. func (*DWThirdRoundMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{66} + return file_server_proto_rawDescGZIP(), []int{67} } func (x *DWThirdRoundMessage) GetTag() uint64 { @@ -5560,7 +5626,7 @@ type WDACKThirdRebateMessage struct { func (x *WDACKThirdRebateMessage) Reset() { *x = WDACKThirdRebateMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[67] + mi := &file_server_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5573,7 +5639,7 @@ func (x *WDACKThirdRebateMessage) String() string { func (*WDACKThirdRebateMessage) ProtoMessage() {} func (x *WDACKThirdRebateMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[67] + mi := &file_server_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5586,7 +5652,7 @@ func (x *WDACKThirdRebateMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use WDACKThirdRebateMessage.ProtoReflect.Descriptor instead. func (*WDACKThirdRebateMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{67} + return file_server_proto_rawDescGZIP(), []int{68} } func (x *WDACKThirdRebateMessage) GetTag() uint64 { @@ -5617,7 +5683,7 @@ type GWGameStateLog struct { func (x *GWGameStateLog) Reset() { *x = GWGameStateLog{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[68] + mi := &file_server_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5630,7 +5696,7 @@ func (x *GWGameStateLog) String() string { func (*GWGameStateLog) ProtoMessage() {} func (x *GWGameStateLog) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[68] + mi := &file_server_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5643,7 +5709,7 @@ func (x *GWGameStateLog) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameStateLog.ProtoReflect.Descriptor instead. func (*GWGameStateLog) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{68} + return file_server_proto_rawDescGZIP(), []int{69} } func (x *GWGameStateLog) GetSceneId() int32 { @@ -5683,7 +5749,7 @@ type GWGameState struct { func (x *GWGameState) Reset() { *x = GWGameState{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[69] + mi := &file_server_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5696,7 +5762,7 @@ func (x *GWGameState) String() string { func (*GWGameState) ProtoMessage() {} func (x *GWGameState) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[69] + mi := &file_server_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5709,7 +5775,7 @@ func (x *GWGameState) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameState.ProtoReflect.Descriptor instead. func (*GWGameState) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{69} + return file_server_proto_rawDescGZIP(), []int{70} } func (x *GWGameState) GetSceneId() int32 { @@ -5766,7 +5832,7 @@ type GWGameJackList struct { func (x *GWGameJackList) Reset() { *x = GWGameJackList{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[70] + mi := &file_server_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5779,7 +5845,7 @@ func (x *GWGameJackList) String() string { func (*GWGameJackList) ProtoMessage() {} func (x *GWGameJackList) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[70] + mi := &file_server_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5792,7 +5858,7 @@ func (x *GWGameJackList) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameJackList.ProtoReflect.Descriptor instead. func (*GWGameJackList) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{70} + return file_server_proto_rawDescGZIP(), []int{71} } func (x *GWGameJackList) GetSnId() int32 { @@ -5864,7 +5930,7 @@ type GWGameJackCoin struct { func (x *GWGameJackCoin) Reset() { *x = GWGameJackCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[71] + mi := &file_server_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5877,7 +5943,7 @@ func (x *GWGameJackCoin) String() string { func (*GWGameJackCoin) ProtoMessage() {} func (x *GWGameJackCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[71] + mi := &file_server_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5890,7 +5956,7 @@ func (x *GWGameJackCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameJackCoin.ProtoReflect.Descriptor instead. func (*GWGameJackCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{71} + return file_server_proto_rawDescGZIP(), []int{72} } func (x *GWGameJackCoin) GetPlatform() []string { @@ -5920,7 +5986,7 @@ type WGNiceIdRebind struct { func (x *WGNiceIdRebind) Reset() { *x = WGNiceIdRebind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[72] + mi := &file_server_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5933,7 +5999,7 @@ func (x *WGNiceIdRebind) String() string { func (*WGNiceIdRebind) ProtoMessage() {} func (x *WGNiceIdRebind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[72] + mi := &file_server_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5946,7 +6012,7 @@ func (x *WGNiceIdRebind) ProtoReflect() protoreflect.Message { // Deprecated: Use WGNiceIdRebind.ProtoReflect.Descriptor instead. func (*WGNiceIdRebind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{72} + return file_server_proto_rawDescGZIP(), []int{73} } func (x *WGNiceIdRebind) GetUser() int32 { @@ -5976,7 +6042,7 @@ type PLAYERWINCOININFO struct { func (x *PLAYERWINCOININFO) Reset() { *x = PLAYERWINCOININFO{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[73] + mi := &file_server_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5989,7 +6055,7 @@ func (x *PLAYERWINCOININFO) String() string { func (*PLAYERWINCOININFO) ProtoMessage() {} func (x *PLAYERWINCOININFO) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[73] + mi := &file_server_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6002,7 +6068,7 @@ func (x *PLAYERWINCOININFO) ProtoReflect() protoreflect.Message { // Deprecated: Use PLAYERWINCOININFO.ProtoReflect.Descriptor instead. func (*PLAYERWINCOININFO) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{73} + return file_server_proto_rawDescGZIP(), []int{74} } func (x *PLAYERWINCOININFO) GetSnId() int32 { @@ -6038,7 +6104,7 @@ type GWPLAYERWINCOIN struct { func (x *GWPLAYERWINCOIN) Reset() { *x = GWPLAYERWINCOIN{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[74] + mi := &file_server_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6051,7 +6117,7 @@ func (x *GWPLAYERWINCOIN) String() string { func (*GWPLAYERWINCOIN) ProtoMessage() {} func (x *GWPLAYERWINCOIN) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[74] + mi := &file_server_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6064,7 +6130,7 @@ func (x *GWPLAYERWINCOIN) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPLAYERWINCOIN.ProtoReflect.Descriptor instead. func (*GWPLAYERWINCOIN) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{74} + return file_server_proto_rawDescGZIP(), []int{75} } func (x *GWPLAYERWINCOIN) GetPlayer() []*PLAYERWINCOININFO { @@ -6087,7 +6153,7 @@ type GWPlayerAutoMarkTag struct { func (x *GWPlayerAutoMarkTag) Reset() { *x = GWPlayerAutoMarkTag{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[75] + mi := &file_server_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6100,7 +6166,7 @@ func (x *GWPlayerAutoMarkTag) String() string { func (*GWPlayerAutoMarkTag) ProtoMessage() {} func (x *GWPlayerAutoMarkTag) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[75] + mi := &file_server_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6113,7 +6179,7 @@ func (x *GWPlayerAutoMarkTag) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerAutoMarkTag.ProtoReflect.Descriptor instead. func (*GWPlayerAutoMarkTag) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{75} + return file_server_proto_rawDescGZIP(), []int{76} } func (x *GWPlayerAutoMarkTag) GetSnId() int32 { @@ -6144,7 +6210,7 @@ type WGInviteRobEnterCoinSceneQueue struct { func (x *WGInviteRobEnterCoinSceneQueue) Reset() { *x = WGInviteRobEnterCoinSceneQueue{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[76] + mi := &file_server_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6157,7 +6223,7 @@ func (x *WGInviteRobEnterCoinSceneQueue) String() string { func (*WGInviteRobEnterCoinSceneQueue) ProtoMessage() {} func (x *WGInviteRobEnterCoinSceneQueue) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[76] + mi := &file_server_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6170,7 +6236,7 @@ func (x *WGInviteRobEnterCoinSceneQueue) ProtoReflect() protoreflect.Message { // Deprecated: Use WGInviteRobEnterCoinSceneQueue.ProtoReflect.Descriptor instead. func (*WGInviteRobEnterCoinSceneQueue) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{76} + return file_server_proto_rawDescGZIP(), []int{77} } func (x *WGInviteRobEnterCoinSceneQueue) GetPlatform() string { @@ -6206,7 +6272,7 @@ type WGGameForceStart struct { func (x *WGGameForceStart) Reset() { *x = WGGameForceStart{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[77] + mi := &file_server_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6219,7 +6285,7 @@ func (x *WGGameForceStart) String() string { func (*WGGameForceStart) ProtoMessage() {} func (x *WGGameForceStart) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[77] + mi := &file_server_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6232,7 +6298,7 @@ func (x *WGGameForceStart) ProtoReflect() protoreflect.Message { // Deprecated: Use WGGameForceStart.ProtoReflect.Descriptor instead. func (*WGGameForceStart) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{77} + return file_server_proto_rawDescGZIP(), []int{78} } func (x *WGGameForceStart) GetSceneId() int32 { @@ -6257,7 +6323,7 @@ type ProfitControlGameCfg struct { func (x *ProfitControlGameCfg) Reset() { *x = ProfitControlGameCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[78] + mi := &file_server_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6270,7 +6336,7 @@ func (x *ProfitControlGameCfg) String() string { func (*ProfitControlGameCfg) ProtoMessage() {} func (x *ProfitControlGameCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[78] + mi := &file_server_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6283,7 +6349,7 @@ func (x *ProfitControlGameCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfitControlGameCfg.ProtoReflect.Descriptor instead. func (*ProfitControlGameCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{78} + return file_server_proto_rawDescGZIP(), []int{79} } func (x *ProfitControlGameCfg) GetGameFreeId() int32 { @@ -6333,7 +6399,7 @@ type ProfitControlPlatformCfg struct { func (x *ProfitControlPlatformCfg) Reset() { *x = ProfitControlPlatformCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[79] + mi := &file_server_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6346,7 +6412,7 @@ func (x *ProfitControlPlatformCfg) String() string { func (*ProfitControlPlatformCfg) ProtoMessage() {} func (x *ProfitControlPlatformCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[79] + mi := &file_server_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6359,7 +6425,7 @@ func (x *ProfitControlPlatformCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfitControlPlatformCfg.ProtoReflect.Descriptor instead. func (*ProfitControlPlatformCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{79} + return file_server_proto_rawDescGZIP(), []int{80} } func (x *ProfitControlPlatformCfg) GetPlatform() string { @@ -6388,7 +6454,7 @@ type WGProfitControlCorrect struct { func (x *WGProfitControlCorrect) Reset() { *x = WGProfitControlCorrect{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[80] + mi := &file_server_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6401,7 +6467,7 @@ func (x *WGProfitControlCorrect) String() string { func (*WGProfitControlCorrect) ProtoMessage() {} func (x *WGProfitControlCorrect) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[80] + mi := &file_server_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6414,7 +6480,7 @@ func (x *WGProfitControlCorrect) ProtoReflect() protoreflect.Message { // Deprecated: Use WGProfitControlCorrect.ProtoReflect.Descriptor instead. func (*WGProfitControlCorrect) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{80} + return file_server_proto_rawDescGZIP(), []int{81} } func (x *WGProfitControlCorrect) GetCfg() []*ProfitControlPlatformCfg { @@ -6436,7 +6502,7 @@ type GWChangeSceneEvent struct { func (x *GWChangeSceneEvent) Reset() { *x = GWChangeSceneEvent{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[81] + mi := &file_server_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6449,7 +6515,7 @@ func (x *GWChangeSceneEvent) String() string { func (*GWChangeSceneEvent) ProtoMessage() {} func (x *GWChangeSceneEvent) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[81] + mi := &file_server_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6462,7 +6528,7 @@ func (x *GWChangeSceneEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use GWChangeSceneEvent.ProtoReflect.Descriptor instead. func (*GWChangeSceneEvent) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{81} + return file_server_proto_rawDescGZIP(), []int{82} } func (x *GWChangeSceneEvent) GetSceneId() int32 { @@ -6484,7 +6550,7 @@ type PlayerIParam struct { func (x *PlayerIParam) Reset() { *x = PlayerIParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[82] + mi := &file_server_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6497,7 +6563,7 @@ func (x *PlayerIParam) String() string { func (*PlayerIParam) ProtoMessage() {} func (x *PlayerIParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[82] + mi := &file_server_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6510,7 +6576,7 @@ func (x *PlayerIParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerIParam.ProtoReflect.Descriptor instead. func (*PlayerIParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{82} + return file_server_proto_rawDescGZIP(), []int{83} } func (x *PlayerIParam) GetParamId() int32 { @@ -6539,7 +6605,7 @@ type PlayerSParam struct { func (x *PlayerSParam) Reset() { *x = PlayerSParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[83] + mi := &file_server_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6552,7 +6618,7 @@ func (x *PlayerSParam) String() string { func (*PlayerSParam) ProtoMessage() {} func (x *PlayerSParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[83] + mi := &file_server_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6565,7 +6631,7 @@ func (x *PlayerSParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerSParam.ProtoReflect.Descriptor instead. func (*PlayerSParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{83} + return file_server_proto_rawDescGZIP(), []int{84} } func (x *PlayerSParam) GetParamId() int32 { @@ -6594,7 +6660,7 @@ type PlayerCParam struct { func (x *PlayerCParam) Reset() { *x = PlayerCParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[84] + mi := &file_server_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6607,7 +6673,7 @@ func (x *PlayerCParam) String() string { func (*PlayerCParam) ProtoMessage() {} func (x *PlayerCParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[84] + mi := &file_server_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6620,7 +6686,7 @@ func (x *PlayerCParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCParam.ProtoReflect.Descriptor instead. func (*PlayerCParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{84} + return file_server_proto_rawDescGZIP(), []int{85} } func (x *PlayerCParam) GetStrKey() string { @@ -6649,7 +6715,7 @@ type PlayerMatchCoin struct { func (x *PlayerMatchCoin) Reset() { *x = PlayerMatchCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[85] + mi := &file_server_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6662,7 +6728,7 @@ func (x *PlayerMatchCoin) String() string { func (*PlayerMatchCoin) ProtoMessage() {} func (x *PlayerMatchCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[85] + mi := &file_server_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6675,7 +6741,7 @@ func (x *PlayerMatchCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerMatchCoin.ProtoReflect.Descriptor instead. func (*PlayerMatchCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{85} + return file_server_proto_rawDescGZIP(), []int{86} } func (x *PlayerMatchCoin) GetSnId() int32 { @@ -6707,7 +6773,7 @@ type GWPlayerMatchBilled struct { func (x *GWPlayerMatchBilled) Reset() { *x = GWPlayerMatchBilled{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[86] + mi := &file_server_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6720,7 +6786,7 @@ func (x *GWPlayerMatchBilled) String() string { func (*GWPlayerMatchBilled) ProtoMessage() {} func (x *GWPlayerMatchBilled) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[86] + mi := &file_server_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6733,7 +6799,7 @@ func (x *GWPlayerMatchBilled) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerMatchBilled.ProtoReflect.Descriptor instead. func (*GWPlayerMatchBilled) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{86} + return file_server_proto_rawDescGZIP(), []int{87} } func (x *GWPlayerMatchBilled) GetSceneId() int32 { @@ -6781,7 +6847,7 @@ type GWPlayerMatchGrade struct { func (x *GWPlayerMatchGrade) Reset() { *x = GWPlayerMatchGrade{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[87] + mi := &file_server_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6794,7 +6860,7 @@ func (x *GWPlayerMatchGrade) String() string { func (*GWPlayerMatchGrade) ProtoMessage() {} func (x *GWPlayerMatchGrade) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[87] + mi := &file_server_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6807,7 +6873,7 @@ func (x *GWPlayerMatchGrade) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerMatchGrade.ProtoReflect.Descriptor instead. func (*GWPlayerMatchGrade) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{87} + return file_server_proto_rawDescGZIP(), []int{88} } func (x *GWPlayerMatchGrade) GetSceneId() int32 { @@ -6867,7 +6933,7 @@ type WGPlayerQuitMatch struct { func (x *WGPlayerQuitMatch) Reset() { *x = WGPlayerQuitMatch{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[88] + mi := &file_server_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6880,7 +6946,7 @@ func (x *WGPlayerQuitMatch) String() string { func (*WGPlayerQuitMatch) ProtoMessage() {} func (x *WGPlayerQuitMatch) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[88] + mi := &file_server_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6893,7 +6959,7 @@ func (x *WGPlayerQuitMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerQuitMatch.ProtoReflect.Descriptor instead. func (*WGPlayerQuitMatch) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{88} + return file_server_proto_rawDescGZIP(), []int{89} } func (x *WGPlayerQuitMatch) GetSnId() int32 { @@ -6934,7 +7000,7 @@ type WGSceneMatchBaseChange struct { func (x *WGSceneMatchBaseChange) Reset() { *x = WGSceneMatchBaseChange{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[89] + mi := &file_server_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6947,7 +7013,7 @@ func (x *WGSceneMatchBaseChange) String() string { func (*WGSceneMatchBaseChange) ProtoMessage() {} func (x *WGSceneMatchBaseChange) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[89] + mi := &file_server_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6960,7 +7026,7 @@ func (x *WGSceneMatchBaseChange) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSceneMatchBaseChange.ProtoReflect.Descriptor instead. func (*WGSceneMatchBaseChange) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{89} + return file_server_proto_rawDescGZIP(), []int{90} } func (x *WGSceneMatchBaseChange) GetSceneIds() []int32 { @@ -7013,7 +7079,7 @@ type SSRedirectToPlayer struct { func (x *SSRedirectToPlayer) Reset() { *x = SSRedirectToPlayer{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[90] + mi := &file_server_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7026,7 +7092,7 @@ func (x *SSRedirectToPlayer) String() string { func (*SSRedirectToPlayer) ProtoMessage() {} func (x *SSRedirectToPlayer) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[90] + mi := &file_server_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7039,7 +7105,7 @@ func (x *SSRedirectToPlayer) ProtoReflect() protoreflect.Message { // Deprecated: Use SSRedirectToPlayer.ProtoReflect.Descriptor instead. func (*SSRedirectToPlayer) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{90} + return file_server_proto_rawDescGZIP(), []int{91} } func (x *SSRedirectToPlayer) GetSnId() int32 { @@ -7086,7 +7152,7 @@ type WGInviteMatchRob struct { func (x *WGInviteMatchRob) Reset() { *x = WGInviteMatchRob{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[91] + mi := &file_server_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7099,7 +7165,7 @@ func (x *WGInviteMatchRob) String() string { func (*WGInviteMatchRob) ProtoMessage() {} func (x *WGInviteMatchRob) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[91] + mi := &file_server_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7112,7 +7178,7 @@ func (x *WGInviteMatchRob) ProtoReflect() protoreflect.Message { // Deprecated: Use WGInviteMatchRob.ProtoReflect.Descriptor instead. func (*WGInviteMatchRob) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{91} + return file_server_proto_rawDescGZIP(), []int{92} } func (x *WGInviteMatchRob) GetPlatform() string { @@ -7163,7 +7229,7 @@ type GameInfo struct { func (x *GameInfo) Reset() { *x = GameInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[92] + mi := &file_server_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7176,7 +7242,7 @@ func (x *GameInfo) String() string { func (*GameInfo) ProtoMessage() {} func (x *GameInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[92] + mi := &file_server_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7189,7 +7255,7 @@ func (x *GameInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GameInfo.ProtoReflect.Descriptor instead. func (*GameInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{92} + return file_server_proto_rawDescGZIP(), []int{93} } func (x *GameInfo) GetGameId() int32 { @@ -7228,7 +7294,7 @@ type WGGameJackpot struct { func (x *WGGameJackpot) Reset() { *x = WGGameJackpot{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[93] + mi := &file_server_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7241,7 +7307,7 @@ func (x *WGGameJackpot) String() string { func (*WGGameJackpot) ProtoMessage() {} func (x *WGGameJackpot) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[93] + mi := &file_server_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7254,7 +7320,7 @@ func (x *WGGameJackpot) ProtoReflect() protoreflect.Message { // Deprecated: Use WGGameJackpot.ProtoReflect.Descriptor instead. func (*WGGameJackpot) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{93} + return file_server_proto_rawDescGZIP(), []int{94} } func (x *WGGameJackpot) GetSid() int64 { @@ -7304,7 +7370,7 @@ type BigWinHistoryInfo struct { func (x *BigWinHistoryInfo) Reset() { *x = BigWinHistoryInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[94] + mi := &file_server_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7317,7 +7383,7 @@ func (x *BigWinHistoryInfo) String() string { func (*BigWinHistoryInfo) ProtoMessage() {} func (x *BigWinHistoryInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[94] + mi := &file_server_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7330,7 +7396,7 @@ func (x *BigWinHistoryInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BigWinHistoryInfo.ProtoReflect.Descriptor instead. func (*BigWinHistoryInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{94} + return file_server_proto_rawDescGZIP(), []int{95} } func (x *BigWinHistoryInfo) GetSpinID() string { @@ -7410,7 +7476,7 @@ type WGPlayerEnterMiniGame struct { func (x *WGPlayerEnterMiniGame) Reset() { *x = WGPlayerEnterMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[95] + mi := &file_server_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7423,7 +7489,7 @@ func (x *WGPlayerEnterMiniGame) String() string { func (*WGPlayerEnterMiniGame) ProtoMessage() {} func (x *WGPlayerEnterMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[95] + mi := &file_server_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7436,7 +7502,7 @@ func (x *WGPlayerEnterMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerEnterMiniGame.ProtoReflect.Descriptor instead. func (*WGPlayerEnterMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{95} + return file_server_proto_rawDescGZIP(), []int{96} } func (x *WGPlayerEnterMiniGame) GetSid() int64 { @@ -7524,7 +7590,7 @@ type WGPlayerLeaveMiniGame struct { func (x *WGPlayerLeaveMiniGame) Reset() { *x = WGPlayerLeaveMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[96] + mi := &file_server_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7537,7 +7603,7 @@ func (x *WGPlayerLeaveMiniGame) String() string { func (*WGPlayerLeaveMiniGame) ProtoMessage() {} func (x *WGPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[96] + mi := &file_server_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7550,7 +7616,7 @@ func (x *WGPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerLeaveMiniGame.ProtoReflect.Descriptor instead. func (*WGPlayerLeaveMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{96} + return file_server_proto_rawDescGZIP(), []int{97} } func (x *WGPlayerLeaveMiniGame) GetSid() int64 { @@ -7593,7 +7659,7 @@ type WGPlayerLeave struct { func (x *WGPlayerLeave) Reset() { *x = WGPlayerLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[97] + mi := &file_server_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7606,7 +7672,7 @@ func (x *WGPlayerLeave) String() string { func (*WGPlayerLeave) ProtoMessage() {} func (x *WGPlayerLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[97] + mi := &file_server_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7619,7 +7685,7 @@ func (x *WGPlayerLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerLeave.ProtoReflect.Descriptor instead. func (*WGPlayerLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{97} + return file_server_proto_rawDescGZIP(), []int{98} } func (x *WGPlayerLeave) GetSnId() int32 { @@ -7645,7 +7711,7 @@ type GWPlayerLeaveMiniGame struct { func (x *GWPlayerLeaveMiniGame) Reset() { *x = GWPlayerLeaveMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[98] + mi := &file_server_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7658,7 +7724,7 @@ func (x *GWPlayerLeaveMiniGame) String() string { func (*GWPlayerLeaveMiniGame) ProtoMessage() {} func (x *GWPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[98] + mi := &file_server_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7671,7 +7737,7 @@ func (x *GWPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerLeaveMiniGame.ProtoReflect.Descriptor instead. func (*GWPlayerLeaveMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{98} + return file_server_proto_rawDescGZIP(), []int{99} } func (x *GWPlayerLeaveMiniGame) GetSceneId() int32 { @@ -7721,7 +7787,7 @@ type GWDestroyMiniScene struct { func (x *GWDestroyMiniScene) Reset() { *x = GWDestroyMiniScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[99] + mi := &file_server_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7734,7 +7800,7 @@ func (x *GWDestroyMiniScene) String() string { func (*GWDestroyMiniScene) ProtoMessage() {} func (x *GWDestroyMiniScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[99] + mi := &file_server_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7747,7 +7813,7 @@ func (x *GWDestroyMiniScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDestroyMiniScene.ProtoReflect.Descriptor instead. func (*GWDestroyMiniScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{99} + return file_server_proto_rawDescGZIP(), []int{100} } func (x *GWDestroyMiniScene) GetSceneId() int32 { @@ -7769,7 +7835,7 @@ type GRDestroyScene struct { func (x *GRDestroyScene) Reset() { *x = GRDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[100] + mi := &file_server_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7782,7 +7848,7 @@ func (x *GRDestroyScene) String() string { func (*GRDestroyScene) ProtoMessage() {} func (x *GRDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[100] + mi := &file_server_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7795,7 +7861,7 @@ func (x *GRDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GRDestroyScene.ProtoReflect.Descriptor instead. func (*GRDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{100} + return file_server_proto_rawDescGZIP(), []int{101} } func (x *GRDestroyScene) GetSceneId() int32 { @@ -7817,7 +7883,7 @@ type RWAccountInvalid struct { func (x *RWAccountInvalid) Reset() { *x = RWAccountInvalid{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[101] + mi := &file_server_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7830,7 +7896,7 @@ func (x *RWAccountInvalid) String() string { func (*RWAccountInvalid) ProtoMessage() {} func (x *RWAccountInvalid) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[101] + mi := &file_server_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7843,7 +7909,7 @@ func (x *RWAccountInvalid) ProtoReflect() protoreflect.Message { // Deprecated: Use RWAccountInvalid.ProtoReflect.Descriptor instead. func (*RWAccountInvalid) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{101} + return file_server_proto_rawDescGZIP(), []int{102} } func (x *RWAccountInvalid) GetAcc() string { @@ -7866,7 +7932,7 @@ type WGDTRoomInfo struct { func (x *WGDTRoomInfo) Reset() { *x = WGDTRoomInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[102] + mi := &file_server_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7879,7 +7945,7 @@ func (x *WGDTRoomInfo) String() string { func (*WGDTRoomInfo) ProtoMessage() {} func (x *WGDTRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[102] + mi := &file_server_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7892,7 +7958,7 @@ func (x *WGDTRoomInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDTRoomInfo.ProtoReflect.Descriptor instead. func (*WGDTRoomInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{102} + return file_server_proto_rawDescGZIP(), []int{103} } func (x *WGDTRoomInfo) GetDataKey() string { @@ -7927,7 +7993,7 @@ type PlayerDTCoin struct { func (x *PlayerDTCoin) Reset() { *x = PlayerDTCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[103] + mi := &file_server_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7940,7 +8006,7 @@ func (x *PlayerDTCoin) String() string { func (*PlayerDTCoin) ProtoMessage() {} func (x *PlayerDTCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[103] + mi := &file_server_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7953,7 +8019,7 @@ func (x *PlayerDTCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerDTCoin.ProtoReflect.Descriptor instead. func (*PlayerDTCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{103} + return file_server_proto_rawDescGZIP(), []int{104} } func (x *PlayerDTCoin) GetNickName() string { @@ -8024,7 +8090,7 @@ type EResult struct { func (x *EResult) Reset() { *x = EResult{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[104] + mi := &file_server_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8037,7 +8103,7 @@ func (x *EResult) String() string { func (*EResult) ProtoMessage() {} func (x *EResult) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[104] + mi := &file_server_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8050,7 +8116,7 @@ func (x *EResult) ProtoReflect() protoreflect.Message { // Deprecated: Use EResult.ProtoReflect.Descriptor instead. func (*EResult) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{104} + return file_server_proto_rawDescGZIP(), []int{105} } func (x *EResult) GetIndex() string { @@ -8092,7 +8158,7 @@ type GWDTRoomInfo struct { func (x *GWDTRoomInfo) Reset() { *x = GWDTRoomInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[105] + mi := &file_server_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8105,7 +8171,7 @@ func (x *GWDTRoomInfo) String() string { func (*GWDTRoomInfo) ProtoMessage() {} func (x *GWDTRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[105] + mi := &file_server_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8118,7 +8184,7 @@ func (x *GWDTRoomInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDTRoomInfo.ProtoReflect.Descriptor instead. func (*GWDTRoomInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{105} + return file_server_proto_rawDescGZIP(), []int{106} } func (x *GWDTRoomInfo) GetDataKey() string { @@ -8234,7 +8300,7 @@ type WGRoomResults struct { func (x *WGRoomResults) Reset() { *x = WGRoomResults{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[106] + mi := &file_server_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8247,7 +8313,7 @@ func (x *WGRoomResults) String() string { func (*WGRoomResults) ProtoMessage() {} func (x *WGRoomResults) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[106] + mi := &file_server_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8260,7 +8326,7 @@ func (x *WGRoomResults) ProtoReflect() protoreflect.Message { // Deprecated: Use WGRoomResults.ProtoReflect.Descriptor instead. func (*WGRoomResults) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{106} + return file_server_proto_rawDescGZIP(), []int{107} } func (x *WGRoomResults) GetRoomId() int32 { @@ -8305,7 +8371,7 @@ type GWRoomResults struct { func (x *GWRoomResults) Reset() { *x = GWRoomResults{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[107] + mi := &file_server_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8318,7 +8384,7 @@ func (x *GWRoomResults) String() string { func (*GWRoomResults) ProtoMessage() {} func (x *GWRoomResults) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[107] + mi := &file_server_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8331,7 +8397,7 @@ func (x *GWRoomResults) ProtoReflect() protoreflect.Message { // Deprecated: Use GWRoomResults.ProtoReflect.Descriptor instead. func (*GWRoomResults) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{107} + return file_server_proto_rawDescGZIP(), []int{108} } func (x *GWRoomResults) GetDataKey() string { @@ -8369,7 +8435,7 @@ type GWAddSingleAdjust struct { func (x *GWAddSingleAdjust) Reset() { *x = GWAddSingleAdjust{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[108] + mi := &file_server_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8382,7 +8448,7 @@ func (x *GWAddSingleAdjust) String() string { func (*GWAddSingleAdjust) ProtoMessage() {} func (x *GWAddSingleAdjust) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[108] + mi := &file_server_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8395,7 +8461,7 @@ func (x *GWAddSingleAdjust) ProtoReflect() protoreflect.Message { // Deprecated: Use GWAddSingleAdjust.ProtoReflect.Descriptor instead. func (*GWAddSingleAdjust) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{108} + return file_server_proto_rawDescGZIP(), []int{109} } func (x *GWAddSingleAdjust) GetSnId() int32 { @@ -8433,7 +8499,7 @@ type WGSingleAdjust struct { func (x *WGSingleAdjust) Reset() { *x = WGSingleAdjust{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[109] + mi := &file_server_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8446,7 +8512,7 @@ func (x *WGSingleAdjust) String() string { func (*WGSingleAdjust) ProtoMessage() {} func (x *WGSingleAdjust) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[109] + mi := &file_server_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8459,7 +8525,7 @@ func (x *WGSingleAdjust) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSingleAdjust.ProtoReflect.Descriptor instead. func (*WGSingleAdjust) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{109} + return file_server_proto_rawDescGZIP(), []int{110} } func (x *WGSingleAdjust) GetSceneId() int32 { @@ -8500,7 +8566,7 @@ type WbCtrlCfg struct { func (x *WbCtrlCfg) Reset() { *x = WbCtrlCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[110] + mi := &file_server_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8513,7 +8579,7 @@ func (x *WbCtrlCfg) String() string { func (*WbCtrlCfg) ProtoMessage() {} func (x *WbCtrlCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[110] + mi := &file_server_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8526,7 +8592,7 @@ func (x *WbCtrlCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use WbCtrlCfg.ProtoReflect.Descriptor instead. func (*WbCtrlCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{110} + return file_server_proto_rawDescGZIP(), []int{111} } func (x *WbCtrlCfg) GetPlatform() string { @@ -8585,7 +8651,7 @@ type WGBuyRecTimeItem struct { func (x *WGBuyRecTimeItem) Reset() { *x = WGBuyRecTimeItem{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[111] + mi := &file_server_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8598,7 +8664,7 @@ func (x *WGBuyRecTimeItem) String() string { func (*WGBuyRecTimeItem) ProtoMessage() {} func (x *WGBuyRecTimeItem) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[111] + mi := &file_server_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8611,7 +8677,7 @@ func (x *WGBuyRecTimeItem) ProtoReflect() protoreflect.Message { // Deprecated: Use WGBuyRecTimeItem.ProtoReflect.Descriptor instead. func (*WGBuyRecTimeItem) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{111} + return file_server_proto_rawDescGZIP(), []int{112} } func (x *WGBuyRecTimeItem) GetSnId() int32 { @@ -8648,7 +8714,7 @@ type WGUpdateSkin struct { func (x *WGUpdateSkin) Reset() { *x = WGUpdateSkin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[112] + mi := &file_server_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8661,7 +8727,7 @@ func (x *WGUpdateSkin) String() string { func (*WGUpdateSkin) ProtoMessage() {} func (x *WGUpdateSkin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[112] + mi := &file_server_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8674,7 +8740,7 @@ func (x *WGUpdateSkin) ProtoReflect() protoreflect.Message { // Deprecated: Use WGUpdateSkin.ProtoReflect.Descriptor instead. func (*WGUpdateSkin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{112} + return file_server_proto_rawDescGZIP(), []int{113} } func (x *WGUpdateSkin) GetSnId() int32 { @@ -8691,6 +8757,62 @@ func (x *WGUpdateSkin) GetId() int32 { return 0 } +// PACKET_PlayerChangeItems +type PlayerChangeItems struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` + Items []*Item `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 道具变化数量 +} + +func (x *PlayerChangeItems) Reset() { + *x = PlayerChangeItems{} + if protoimpl.UnsafeEnabled { + mi := &file_server_proto_msgTypes[114] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PlayerChangeItems) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlayerChangeItems) ProtoMessage() {} + +func (x *PlayerChangeItems) ProtoReflect() protoreflect.Message { + mi := &file_server_proto_msgTypes[114] + 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 PlayerChangeItems.ProtoReflect.Descriptor instead. +func (*PlayerChangeItems) Descriptor() ([]byte, []int) { + return file_server_proto_rawDescGZIP(), []int{114} +} + +func (x *PlayerChangeItems) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *PlayerChangeItems) GetItems() []*Item { + if x != nil { + return x.Items + } + return nil +} + var File_server_proto protoreflect.FileDescriptor var file_server_proto_rawDesc = []byte{ @@ -8735,1135 +8857,1147 @@ var file_server_proto_rawDesc = []byte{ 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x54, 0x65, 0x78, 0x74, 0x22, 0xbc, 0x05, 0x0a, 0x0d, 0x57, 0x47, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, - 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x43, 0x6c, 0x75, 0x62, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, - 0x6c, 0x75, 0x62, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x50, - 0x6f, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, - 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, - 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x15, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, - 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x65, - 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x43, 0x68, - 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x22, 0x3c, 0x0a, 0x0e, 0x57, 0x47, 0x44, 0x65, 0x73, - 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x03, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, - 0x73, 0x47, 0x72, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, - 0x47, 0x72, 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x22, 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x47, - 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x52, 0x65, - 0x62, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0xdd, 0x06, 0x0a, 0x0d, - 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, - 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, - 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, - 0x4d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, - 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, - 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, - 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x28, 0x09, 0x52, 0x04, 0x54, 0x65, 0x78, 0x74, 0x22, 0x28, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, + 0x75, 0x6d, 0x22, 0xe0, 0x05, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, + 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, + 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x33, 0x0a, 0x0a, + 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, + 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6c, 0x75, + 0x62, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6c, 0x75, 0x62, 0x12, 0x1e, 0x0a, + 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x42, + 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, + 0x74, 0x72, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, + 0x74, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, + 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, + 0x6b, 0x12, 0x22, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3c, 0x0a, 0x0e, 0x57, 0x47, 0x44, 0x65, 0x73, 0x74, 0x72, + 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x03, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x47, + 0x72, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x47, 0x72, + 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x22, 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, + 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, + 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x52, 0x65, 0x62, 0x61, + 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0xdd, 0x06, 0x0a, 0x0d, 0x57, 0x47, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x53, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x49, + 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, + 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, + 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, + 0x2e, 0x0a, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x2e, 0x0a, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x2e, 0x0a, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, + 0x75, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x52, 0x65, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, - 0x73, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x73, 0x74, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, - 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x61, + 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x52, 0x61, + 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, + 0x72, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, + 0x72, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, 0x74, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, + 0x74, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0d, 0x57, - 0x47, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x7a, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, - 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, - 0x65, 0x72, 0x54, 0x73, 0x22, 0x91, 0x07, 0x0a, 0x0d, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, - 0x65, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x65, 0x74, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, - 0x46, 0x6c, 0x6f, 0x77, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, - 0x12, 0x2e, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, - 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x57, - 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, - 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x61, - 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x57, 0x47, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x44, 0x72, 0x6f, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x52, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, + 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0d, 0x57, 0x47, 0x41, + 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x22, 0x3e, - 0x0a, 0x10, 0x47, 0x57, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, - 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, - 0x01, 0x0a, 0x13, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x56, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x69, 0x70, 0x12, 0x22, - 0x0a, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, - 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x49, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, - 0x0a, 0x15, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x55, 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x0f, 0x57, 0x47, 0x44, - 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x69, - 0x6e, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x65, - 0x65, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x14, - 0x0a, 0x05, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, - 0x6f, 0x6e, 0x74, 0x68, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x63, 0x63, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x50, - 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, - 0xae, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x42, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x42, - 0x69, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, - 0x22, 0x41, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x65, 0x12, 0x30, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, - 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x65, 0x73, 0x22, 0x9c, 0x04, 0x0a, 0x0f, 0x47, 0x52, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x03, 0x52, - 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x52, - 0x03, 0x52, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, - 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, - 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, - 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, - 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, - 0x50, 0x6f, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, - 0x72, 0x50, 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x56, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x56, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, - 0x44, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x49, 0x44, 0x22, 0xb2, 0x01, 0x0a, 0x0a, 0x57, 0x52, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, - 0x63, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x42, - 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x43, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0c, 0x57, 0x52, 0x47, 0x61, 0x6d, - 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x52, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0b, 0x57, 0x54, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, - 0x69, 0x6e, 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, - 0x65, 0x52, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, - 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x09, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, - 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, - 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, - 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, - 0x6f, 0x64, 0x65, 0x22, 0x76, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, - 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x33, 0x0a, 0x09, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x74, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x22, 0x3a, 0x0a, 0x0a, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0c, - 0x47, 0x57, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x34, 0x0a, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, - 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa7, 0x01, 0x0a, - 0x0d, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, + 0x6e, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x7a, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, + 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, + 0x54, 0x73, 0x22, 0x91, 0x07, 0x0a, 0x0d, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, + 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, + 0x6f, 0x77, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x2e, + 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x36, + 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x57, 0x0a, 0x10, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, + 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, + 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, + 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, + 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x44, 0x72, 0x6f, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x52, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x10, + 0x47, 0x57, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, 0x72, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, + 0x13, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x69, + 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x69, 0x70, 0x12, 0x22, 0x0a, 0x0c, + 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x70, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, 0x0a, 0x15, + 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, + 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x0f, 0x57, 0x47, 0x44, 0x61, 0x79, + 0x54, 0x69, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x65, 0x65, 0x6b, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x14, 0x0a, 0x05, + 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x6f, 0x6e, + 0x74, 0x68, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xae, 0x01, + 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, + 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x69, + 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x42, 0x69, 0x6e, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, + 0x0a, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x22, 0x41, + 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, + 0x30, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, + 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, + 0x73, 0x22, 0x9c, 0x04, 0x0a, 0x0f, 0x47, 0x52, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x03, 0x52, 0x65, 0x63, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x52, 0x03, 0x52, + 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, - 0x0a, 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, - 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, - 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, - 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, - 0x44, 0x44, 0x61, 0x74, 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, - 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, - 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, - 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, - 0x34, 0x0a, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x49, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, - 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, - 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x12, 0x2c, 0x0a, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, - 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, - 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, - 0x73, 0x22, 0x5c, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x4a, 0x0a, 0x0e, 0x47, 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, - 0x47, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, - 0x65, 0x77, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, - 0x77, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, - 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x46, 0x6c, 0x61, 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, - 0x65, 0x64, 0x4f, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, - 0x65, 0x77, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, - 0x67, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x69, 0x73, 0x72, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, - 0x6f, 0x62, 0x22, 0xa7, 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, - 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, - 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, - 0x0f, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, + 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6d, + 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, 0x6f, 0x6d, + 0x6f, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, + 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, + 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, + 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, + 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, + 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, + 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, + 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, + 0x22, 0xb2, 0x01, 0x0a, 0x0a, 0x57, 0x52, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, + 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, + 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0c, 0x57, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x52, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0b, 0x57, 0x54, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x50, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, 0x6e, + 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, + 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x10, + 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, + 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x09, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, - 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, - 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, - 0x6f, 0x69, 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, - 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, - 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, - 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, - 0x57, 0x47, 0x53, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, - 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x26, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, - 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, - 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, - 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x22, 0x7e, 0x0a, 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, - 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, - 0x67, 0x22, 0x7a, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, - 0x63, 0x65, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, - 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, - 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, - 0x47, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x22, 0x72, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x28, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, - 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, - 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, - 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, - 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, - 0x07, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, - 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, - 0xc2, 0x01, 0x0a, 0x10, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, - 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, - 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, - 0x47, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, - 0x65, 0x63, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, - 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, - 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x22, 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, - 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, - 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, - 0x6d, 0x70, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, - 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, - 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x68, 0x69, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x50, 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, - 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, - 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, - 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, - 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, - 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, - 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, - 0x0a, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, - 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x22, 0x43, 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, - 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, - 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, - 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, - 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, - 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, - 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, - 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x22, 0x3a, 0x0a, 0x0e, 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, - 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, - 0x4f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, - 0x44, 0x0a, 0x0f, 0x47, 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, - 0x49, 0x4e, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x41, 0x75, 0x74, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, - 0x61, 0x67, 0x22, 0x74, 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, - 0x62, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, - 0x75, 0x65, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, - 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, - 0x28, 0x0a, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, - 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, - 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, - 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, - 0x6e, 0x75, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, - 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, - 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, - 0x6c, 0x22, 0x6e, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, - 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, - 0x67, 0x22, 0x4c, 0x0a, 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, - 0x66, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, - 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, - 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, - 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, - 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, - 0x56, 0x61, 0x6c, 0x22, 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, - 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, - 0x56, 0x61, 0x6c, 0x22, 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x52, 0x05, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, + 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, + 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, + 0x65, 0x22, 0x76, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, + 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, + 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x33, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x43, 0x74, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, - 0x01, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, - 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, - 0x11, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, - 0x47, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, - 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, - 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, - 0x12, 0x53, 0x53, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, + 0x0a, 0x0a, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x69, + 0x73, 0x68, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0c, 0x47, 0x57, + 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x34, + 0x0a, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x73, + 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x57, + 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, + 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, + 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, + 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, + 0x77, 0x61, 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, 0x44, 0x44, + 0x61, 0x74, 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, + 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, + 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x43, + 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, + 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, + 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x43, + 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, + 0x2c, 0x0a, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, 0x69, 0x6e, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, + 0x03, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, + 0x5c, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, + 0x0e, 0x47, 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, 0x47, 0x52, + 0x65, 0x62, 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x77, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x77, 0x53, + 0x6e, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, + 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, + 0x6c, 0x61, 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, + 0x4f, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, 0x65, 0x77, + 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, + 0x72, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, + 0x22, 0xa7, 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, + 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, + 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, + 0x0a, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x47, + 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x0f, 0x47, + 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x44, 0x61, + 0x74, 0x61, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, + 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, + 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x57, 0x47, + 0x53, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, - 0x61, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, - 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, - 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, - 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, - 0x67, 0x57, 0x69, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x16, 0x0a, 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, - 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, - 0x42, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, - 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, - 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, - 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, - 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, - 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, - 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, - 0x75, 0x73, 0x74, 0x22, 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, - 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, - 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, - 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, - 0x52, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, - 0x63, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, - 0x0c, 0x57, 0x47, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, - 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, - 0xc6, 0x01, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, - 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x9b, 0x03, 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, - 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, - 0x6f, 0x70, 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, - 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, - 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, - 0x75, 0x0a, 0x0d, 0x57, 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, - 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, - 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, - 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, - 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x57, + 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, + 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, + 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x6c, + 0x69, 0x65, 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, + 0x7e, 0x0a, 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x6e, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, 0x69, 0x64, + 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x22, + 0x7a, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x63, 0x65, + 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0a, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, 0x65, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x42, + 0x47, 0x61, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, 0x47, 0x61, + 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x72, + 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, + 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, 0x69, 0x6e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x4c, + 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x6f, + 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, + 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, 0xc2, 0x01, + 0x0a, 0x10, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, + 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x52, 0x65, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x63, + 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, + 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, + 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x22, 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, - 0x57, 0x47, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x2e, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, - 0x22, 0xaf, 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, - 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, - 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, - 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x73, 0x22, 0x60, 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, - 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, - 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x53, 0x6b, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x2a, 0xe4, 0x16, 0x0a, 0x0a, 0x53, 0x53, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, - 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, - 0x43, 0x48, 0x10, 0xe9, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, - 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x5f, 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, - 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, - 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, - 0x52, 0x4f, 0x55, 0x50, 0x54, 0x41, 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, - 0x47, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, - 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, - 0x54, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, - 0x43, 0x45, 0x4e, 0x45, 0x10, 0xce, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x10, 0xcf, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, - 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, - 0x4c, 0x45, 0x44, 0x52, 0x4f, 0x4f, 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, - 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, - 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, - 0x52, 0x4f, 0x50, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, - 0x48, 0x4f, 0x4c, 0x44, 0x10, 0xd4, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, - 0x4f, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, - 0x53, 0x49, 0x4f, 0x4e, 0x55, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, - 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, - 0x43, 0x4f, 0x52, 0x44, 0x10, 0xd8, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, - 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, - 0x49, 0x45, 0x4e, 0x43, 0x45, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, - 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, - 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, + 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, + 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, 0x6d, 0x70, + 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, 0x6d, 0x70, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, + 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x44, 0x57, + 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, + 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, + 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x50, 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x12, 0x28, + 0x0a, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, + 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, + 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, + 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, + 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x22, 0x43, 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, + 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, + 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x4c, + 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, + 0x43, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, + 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x61, + 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, 0x0a, 0x0e, + 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, + 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, + 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, + 0x0a, 0x0e, 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x44, 0x0a, + 0x0f, 0x47, 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, + 0x12, 0x31, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, + 0x75, 0x74, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, + 0x22, 0x74, 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, + 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, 0x1e, 0x0a, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, + 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, + 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, + 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, + 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, + 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, + 0x75, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, + 0x6e, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, + 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, + 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, + 0x4c, 0x0a, 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, 0x66, 0x67, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, 0x2e, 0x0a, + 0x12, 0x47, 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, + 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, + 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x22, + 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, + 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, + 0x6c, 0x22, 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, + 0x6c, 0x22, 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, + 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x69, + 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, + 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, + 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, + 0x50, 0x6f, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, + 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, + 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, + 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x11, 0x57, + 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, 0x47, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, + 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x73, 0x74, + 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x53, + 0x53, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, + 0x96, 0x01, 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x52, 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, + 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, 0x47, 0x61, + 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, + 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, + 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x67, 0x57, + 0x69, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, + 0x70, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, + 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, + 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, + 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, + 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, + 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, + 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, + 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, + 0x74, 0x22, 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, + 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, + 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x57, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x44, + 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, 0x52, 0x44, + 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x63, 0x63, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, 0x0c, 0x57, + 0x47, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, + 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, + 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xc6, 0x01, + 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, + 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x9b, 0x03, 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1c, + 0x0a, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, + 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, + 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x70, + 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, + 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, + 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x75, 0x0a, + 0x0d, 0x57, 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, + 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, + 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, + 0x61, 0x4b, 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, + 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, 0x53, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, 0x57, 0x47, + 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, + 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, + 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, + 0x6a, 0x75, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0xaf, + 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, + 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, + 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, + 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, + 0x22, 0x60, 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, + 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x45, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, + 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x6e, 0x64, 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, + 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x4b, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, + 0x22, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, + 0x65, 0x6d, 0x73, 0x2a, 0x83, 0x17, 0x0a, 0x0a, 0x53, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x52, + 0x56, 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, 0x5f, 0x4c, 0x4f, 0x41, 0x44, + 0x10, 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xe9, 0x07, + 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, + 0x54, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, + 0x10, 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, + 0x5f, 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x54, + 0x41, 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, 0x47, 0x5f, 0x4d, 0x55, 0x4c, + 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x53, 0x43, 0x45, + 0x4e, 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, + 0xce, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xcf, 0x08, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x52, 0x4f, + 0x4f, 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, + 0x45, 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x52, 0x4f, 0x50, 0x4c, 0x49, + 0x4e, 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x10, + 0xd4, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x42, 0x49, 0x4e, + 0x44, 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x55, + 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x54, 0x55, + 0x52, 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, + 0xd8, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, + 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x4c, 0x45, + 0x41, 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xdc, + 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, + 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, 0xdd, 0x08, 0x12, 0x21, 0x0a, + 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, + 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xde, 0x08, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, 0x08, 0x12, 0x1c, 0x0a, 0x17, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x42, 0x49, + 0x4c, 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x5f, 0x53, + 0x4e, 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, + 0xe3, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, - 0x41, 0x52, 0x54, 0x10, 0xdc, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, - 0xdd, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x41, 0x47, 0x45, 0x4e, 0x54, 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x10, 0xde, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, - 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, - 0x4c, 0x55, 0x42, 0x42, 0x49, 0x4c, 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, - 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4e, 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, - 0x45, 0x53, 0x49, 0x54, 0x10, 0xe3, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, - 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, - 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, - 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, - 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, - 0x45, 0x45, 0x4e, 0x44, 0x10, 0xe7, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x46, 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, - 0xe8, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, - 0x10, 0xe9, 0x08, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, - 0x10, 0xea, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, - 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, - 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, - 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, - 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x10, 0xed, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, - 0x10, 0xf0, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, - 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, - 0x56, 0x45, 0x10, 0xf3, 0x08, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x57, 0x42, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x43, 0x41, 0x52, 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, - 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x10, 0xde, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x57, 0x5f, 0x4e, 0x45, 0x57, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, - 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, - 0x4c, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, - 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, - 0x4f, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, - 0xe3, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, - 0x45, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, - 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, - 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, - 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, - 0x45, 0x53, 0x45, 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, - 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, - 0x42, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x4c, 0x4f, 0x47, 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x10, 0xf0, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, - 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, - 0x45, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, - 0x4f, 0x49, 0x4e, 0x10, 0xf4, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, - 0x52, 0x4b, 0x54, 0x41, 0x47, 0x10, 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, - 0x4e, 0x54, 0x45, 0x52, 0x43, 0x4f, 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, - 0x55, 0x45, 0x10, 0xf6, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, - 0x54, 0x10, 0xf7, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, - 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, - 0x45, 0x4e, 0x45, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, - 0x41, 0x59, 0x10, 0xfa, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, - 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xfb, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, - 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, - 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, - 0x42, 0x41, 0x53, 0x45, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, - 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, - 0x45, 0x43, 0x54, 0x54, 0x4f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, - 0x54, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, - 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, - 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, - 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x41, 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, + 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x4e, 0x44, 0x10, + 0xe7, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x46, 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xe8, 0x08, 0x12, 0x1f, 0x0a, + 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xe9, 0x08, 0x12, 0x1e, + 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0xea, 0x08, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, 0x08, 0x12, 0x24, 0x0a, 0x1f, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, + 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, + 0xed, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, + 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, + 0x4f, 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x10, 0xf0, 0x08, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, + 0x61, 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xf3, 0x08, + 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x57, 0x42, + 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x41, + 0x52, 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x53, 0x43, 0x45, 0x4e, 0x45, + 0x10, 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x12, + 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x45, 0x57, + 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, + 0x54, 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x53, 0x45, 0x54, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x42, 0x4c, 0x41, + 0x43, 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x52, 0x45, 0x4c, 0x49, + 0x45, 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe3, 0x0b, 0x12, 0x1a, 0x0a, + 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, + 0x52, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, + 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, 0x0b, 0x12, 0x1c, 0x0a, 0x17, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x43, + 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x5f, 0x4d, 0x45, 0x53, + 0x53, 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4c, 0x4f, + 0x47, 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf0, 0x0b, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, + 0x50, 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, + 0x4f, 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, + 0x10, 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf4, + 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x52, 0x4b, 0x54, 0x41, 0x47, + 0x10, 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x43, + 0x4f, 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0xf6, 0x0b, + 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, + 0x4d, 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xf7, 0x0b, 0x12, + 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x52, 0x4f, + 0x46, 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x45, + 0x43, 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x59, 0x10, 0xfa, 0x0b, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, + 0xfb, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x47, 0x52, 0x41, 0x44, 0x45, + 0x10, 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, 0x4d, 0x41, 0x54, 0x43, 0x48, + 0x10, 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x41, 0x53, 0x45, 0x43, + 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x54, 0x4f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x4d, 0x41, 0x54, + 0x43, 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, + 0x54, 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x49, + 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, + 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x86, 0x0c, 0x12, 0x23, + 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, - 0x10, 0x86, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, - 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, - 0x49, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, - 0x45, 0x4e, 0x45, 0x10, 0x89, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, - 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, - 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, - 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, - 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, - 0x53, 0x54, 0x10, 0x8e, 0x0c, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x41, 0x44, 0x44, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, - 0x53, 0x54, 0x10, 0x8f, 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x42, 0x55, 0x59, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, - 0x4d, 0x10, 0x90, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x42, - 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x10, 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x43, 0x45, 0x4e, + 0x45, 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x52, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x89, + 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, + 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, 0x0c, 0x12, 0x19, 0x0a, 0x14, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, + 0x54, 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, + 0x10, 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8e, 0x0c, + 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x44, + 0x44, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8f, 0x0c, + 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x42, 0x55, + 0x59, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x90, 0x0c, 0x12, + 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x10, 0x92, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, + 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9879,7 +10013,7 @@ func file_server_proto_rawDescGZIP() []byte { } var file_server_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 118) +var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 120) var file_server_proto_goTypes = []interface{}{ (SSPacketID)(0), // 0: server.SSPacketID (SGBindGroupTag_OpCode)(0), // 1: server.SGBindGroupTag.OpCode @@ -9891,155 +10025,159 @@ var file_server_proto_goTypes = []interface{}{ (*ServerState)(nil), // 7: server.ServerState (*ServerCtrl)(nil), // 8: server.ServerCtrl (*ServerNotice)(nil), // 9: server.ServerNotice - (*WGCreateScene)(nil), // 10: server.WGCreateScene - (*WGDestroyScene)(nil), // 11: server.WGDestroyScene - (*GWDestroyScene)(nil), // 12: server.GWDestroyScene - (*RebateTask)(nil), // 13: server.RebateTask - (*WGPlayerEnter)(nil), // 14: server.WGPlayerEnter - (*WGAudienceSit)(nil), // 15: server.WGAudienceSit - (*WGPlayerReturn)(nil), // 16: server.WGPlayerReturn - (*GWPlayerLeave)(nil), // 17: server.GWPlayerLeave - (*WGPlayerDropLine)(nil), // 18: server.WGPlayerDropLine - (*WGPlayerRehold)(nil), // 19: server.WGPlayerRehold - (*GWBilledRoomCard)(nil), // 20: server.GWBilledRoomCard - (*GGPlayerSessionBind)(nil), // 21: server.GGPlayerSessionBind - (*GGPlayerSessionUnBind)(nil), // 22: server.GGPlayerSessionUnBind - (*WGDayTimeChange)(nil), // 23: server.WGDayTimeChange - (*ReplayPlayerData)(nil), // 24: server.ReplayPlayerData - (*ReplayRecord)(nil), // 25: server.ReplayRecord - (*ReplaySequene)(nil), // 26: server.ReplaySequene - (*GRReplaySequene)(nil), // 27: server.GRReplaySequene - (*WRLoginRec)(nil), // 28: server.WRLoginRec - (*WRGameDetail)(nil), // 29: server.WRGameDetail - (*WRPlayerData)(nil), // 30: server.WRPlayerData - (*WTPlayerPay)(nil), // 31: server.WTPlayerPay - (*PlayerGameRec)(nil), // 32: server.PlayerGameRec - (*GWGameRec)(nil), // 33: server.GWGameRec - (*GWSceneStart)(nil), // 34: server.GWSceneStart - (*PlayerCtx)(nil), // 35: server.PlayerCtx - (*FishRecord)(nil), // 36: server.FishRecord - (*GWFishRecord)(nil), // 37: server.GWFishRecord - (*GWSceneState)(nil), // 38: server.GWSceneState - (*WRInviteRobot)(nil), // 39: server.WRInviteRobot - (*WRInviteCreateRoom)(nil), // 40: server.WRInviteCreateRoom - (*WGAgentKickOutPlayer)(nil), // 41: server.WGAgentKickOutPlayer - (*WDDataAnalysis)(nil), // 42: server.WDDataAnalysis - (*PlayerCard)(nil), // 43: server.PlayerCard - (*GNPlayerCards)(nil), // 44: server.GNPlayerCards - (*RobotData)(nil), // 45: server.RobotData - (*GNPlayerParam)(nil), // 46: server.GNPlayerParam - (*GWRebuildScene)(nil), // 47: server.GWRebuildScene - (*WGRebindPlayerSnId)(nil), // 48: server.WGRebindPlayerSnId - (*GWPlayerFlag)(nil), // 49: server.GWPlayerFlag - (*WGHundredOp)(nil), // 50: server.WGHundredOp - (*GWNewNotice)(nil), // 51: server.GWNewNotice - (*PlayerStatics)(nil), // 52: server.PlayerStatics - (*GWPlayerStatics)(nil), // 53: server.GWPlayerStatics - (*WGResetCoinPool)(nil), // 54: server.WGResetCoinPool - (*WGSetPlayerBlackLevel)(nil), // 55: server.WGSetPlayerBlackLevel - (*GWAutoRelieveWBLevel)(nil), // 56: server.GWAutoRelieveWBLevel - (*GWScenePlayerLog)(nil), // 57: server.GWScenePlayerLog - (*GWPlayerForceLeave)(nil), // 58: server.GWPlayerForceLeave - (*PlayerData)(nil), // 59: server.PlayerData - (*GWPlayerData)(nil), // 60: server.GWPlayerData - (*PlayerWinScore)(nil), // 61: server.PlayerWinScore - (*GWPlayerWinScore)(nil), // 62: server.GWPlayerWinScore - (*WGPayerOnGameCount)(nil), // 63: server.WGPayerOnGameCount - (*GRGameFreeData)(nil), // 64: server.GRGameFreeData - (*WGSyncPlayerSafeBoxCoin)(nil), // 65: server.WGSyncPlayerSafeBoxCoin - (*WGClubMessage)(nil), // 66: server.WGClubMessage - (*DWThirdRebateMessage)(nil), // 67: server.DWThirdRebateMessage - (*DWThirdRoundMessage)(nil), // 68: server.DWThirdRoundMessage - (*WDACKThirdRebateMessage)(nil), // 69: server.WDACKThirdRebateMessage - (*GWGameStateLog)(nil), // 70: server.GWGameStateLog - (*GWGameState)(nil), // 71: server.GWGameState - (*GWGameJackList)(nil), // 72: server.GWGameJackList - (*GWGameJackCoin)(nil), // 73: server.GWGameJackCoin - (*WGNiceIdRebind)(nil), // 74: server.WGNiceIdRebind - (*PLAYERWINCOININFO)(nil), // 75: server.PLAYERWINCOININFO - (*GWPLAYERWINCOIN)(nil), // 76: server.GWPLAYERWINCOIN - (*GWPlayerAutoMarkTag)(nil), // 77: server.GWPlayerAutoMarkTag - (*WGInviteRobEnterCoinSceneQueue)(nil), // 78: server.WGInviteRobEnterCoinSceneQueue - (*WGGameForceStart)(nil), // 79: server.WGGameForceStart - (*ProfitControlGameCfg)(nil), // 80: server.ProfitControlGameCfg - (*ProfitControlPlatformCfg)(nil), // 81: server.ProfitControlPlatformCfg - (*WGProfitControlCorrect)(nil), // 82: server.WGProfitControlCorrect - (*GWChangeSceneEvent)(nil), // 83: server.GWChangeSceneEvent - (*PlayerIParam)(nil), // 84: server.PlayerIParam - (*PlayerSParam)(nil), // 85: server.PlayerSParam - (*PlayerCParam)(nil), // 86: server.PlayerCParam - (*PlayerMatchCoin)(nil), // 87: server.PlayerMatchCoin - (*GWPlayerMatchBilled)(nil), // 88: server.GWPlayerMatchBilled - (*GWPlayerMatchGrade)(nil), // 89: server.GWPlayerMatchGrade - (*WGPlayerQuitMatch)(nil), // 90: server.WGPlayerQuitMatch - (*WGSceneMatchBaseChange)(nil), // 91: server.WGSceneMatchBaseChange - (*SSRedirectToPlayer)(nil), // 92: server.SSRedirectToPlayer - (*WGInviteMatchRob)(nil), // 93: server.WGInviteMatchRob - (*GameInfo)(nil), // 94: server.GameInfo - (*WGGameJackpot)(nil), // 95: server.WGGameJackpot - (*BigWinHistoryInfo)(nil), // 96: server.BigWinHistoryInfo - (*WGPlayerEnterMiniGame)(nil), // 97: server.WGPlayerEnterMiniGame - (*WGPlayerLeaveMiniGame)(nil), // 98: server.WGPlayerLeaveMiniGame - (*WGPlayerLeave)(nil), // 99: server.WGPlayerLeave - (*GWPlayerLeaveMiniGame)(nil), // 100: server.GWPlayerLeaveMiniGame - (*GWDestroyMiniScene)(nil), // 101: server.GWDestroyMiniScene - (*GRDestroyScene)(nil), // 102: server.GRDestroyScene - (*RWAccountInvalid)(nil), // 103: server.RWAccountInvalid - (*WGDTRoomInfo)(nil), // 104: server.WGDTRoomInfo - (*PlayerDTCoin)(nil), // 105: server.PlayerDTCoin - (*EResult)(nil), // 106: server.EResult - (*GWDTRoomInfo)(nil), // 107: server.GWDTRoomInfo - (*WGRoomResults)(nil), // 108: server.WGRoomResults - (*GWRoomResults)(nil), // 109: server.GWRoomResults - (*GWAddSingleAdjust)(nil), // 110: server.GWAddSingleAdjust - (*WGSingleAdjust)(nil), // 111: server.WGSingleAdjust - (*WbCtrlCfg)(nil), // 112: server.WbCtrlCfg - (*WGBuyRecTimeItem)(nil), // 113: server.WGBuyRecTimeItem - (*WGUpdateSkin)(nil), // 114: server.WGUpdateSkin - nil, // 115: server.WGPlayerEnter.ItemsEntry - nil, // 116: server.WGPlayerEnter.RankScoreEntry - nil, // 117: server.GWPlayerLeave.ItemsEntry - nil, // 118: server.GWPlayerLeave.MatchRobotGradesEntry - nil, // 119: server.GWPlayerLeave.RankScoreEntry - (*DB_GameFree)(nil), // 120: server.DB_GameFree + (*Item)(nil), // 10: server.Item + (*WGCreateScene)(nil), // 11: server.WGCreateScene + (*WGDestroyScene)(nil), // 12: server.WGDestroyScene + (*GWDestroyScene)(nil), // 13: server.GWDestroyScene + (*RebateTask)(nil), // 14: server.RebateTask + (*WGPlayerEnter)(nil), // 15: server.WGPlayerEnter + (*WGAudienceSit)(nil), // 16: server.WGAudienceSit + (*WGPlayerReturn)(nil), // 17: server.WGPlayerReturn + (*GWPlayerLeave)(nil), // 18: server.GWPlayerLeave + (*WGPlayerDropLine)(nil), // 19: server.WGPlayerDropLine + (*WGPlayerRehold)(nil), // 20: server.WGPlayerRehold + (*GWBilledRoomCard)(nil), // 21: server.GWBilledRoomCard + (*GGPlayerSessionBind)(nil), // 22: server.GGPlayerSessionBind + (*GGPlayerSessionUnBind)(nil), // 23: server.GGPlayerSessionUnBind + (*WGDayTimeChange)(nil), // 24: server.WGDayTimeChange + (*ReplayPlayerData)(nil), // 25: server.ReplayPlayerData + (*ReplayRecord)(nil), // 26: server.ReplayRecord + (*ReplaySequene)(nil), // 27: server.ReplaySequene + (*GRReplaySequene)(nil), // 28: server.GRReplaySequene + (*WRLoginRec)(nil), // 29: server.WRLoginRec + (*WRGameDetail)(nil), // 30: server.WRGameDetail + (*WRPlayerData)(nil), // 31: server.WRPlayerData + (*WTPlayerPay)(nil), // 32: server.WTPlayerPay + (*PlayerGameRec)(nil), // 33: server.PlayerGameRec + (*GWGameRec)(nil), // 34: server.GWGameRec + (*GWSceneStart)(nil), // 35: server.GWSceneStart + (*PlayerCtx)(nil), // 36: server.PlayerCtx + (*FishRecord)(nil), // 37: server.FishRecord + (*GWFishRecord)(nil), // 38: server.GWFishRecord + (*GWSceneState)(nil), // 39: server.GWSceneState + (*WRInviteRobot)(nil), // 40: server.WRInviteRobot + (*WRInviteCreateRoom)(nil), // 41: server.WRInviteCreateRoom + (*WGAgentKickOutPlayer)(nil), // 42: server.WGAgentKickOutPlayer + (*WDDataAnalysis)(nil), // 43: server.WDDataAnalysis + (*PlayerCard)(nil), // 44: server.PlayerCard + (*GNPlayerCards)(nil), // 45: server.GNPlayerCards + (*RobotData)(nil), // 46: server.RobotData + (*GNPlayerParam)(nil), // 47: server.GNPlayerParam + (*GWRebuildScene)(nil), // 48: server.GWRebuildScene + (*WGRebindPlayerSnId)(nil), // 49: server.WGRebindPlayerSnId + (*GWPlayerFlag)(nil), // 50: server.GWPlayerFlag + (*WGHundredOp)(nil), // 51: server.WGHundredOp + (*GWNewNotice)(nil), // 52: server.GWNewNotice + (*PlayerStatics)(nil), // 53: server.PlayerStatics + (*GWPlayerStatics)(nil), // 54: server.GWPlayerStatics + (*WGResetCoinPool)(nil), // 55: server.WGResetCoinPool + (*WGSetPlayerBlackLevel)(nil), // 56: server.WGSetPlayerBlackLevel + (*GWAutoRelieveWBLevel)(nil), // 57: server.GWAutoRelieveWBLevel + (*GWScenePlayerLog)(nil), // 58: server.GWScenePlayerLog + (*GWPlayerForceLeave)(nil), // 59: server.GWPlayerForceLeave + (*PlayerData)(nil), // 60: server.PlayerData + (*GWPlayerData)(nil), // 61: server.GWPlayerData + (*PlayerWinScore)(nil), // 62: server.PlayerWinScore + (*GWPlayerWinScore)(nil), // 63: server.GWPlayerWinScore + (*WGPayerOnGameCount)(nil), // 64: server.WGPayerOnGameCount + (*GRGameFreeData)(nil), // 65: server.GRGameFreeData + (*WGSyncPlayerSafeBoxCoin)(nil), // 66: server.WGSyncPlayerSafeBoxCoin + (*WGClubMessage)(nil), // 67: server.WGClubMessage + (*DWThirdRebateMessage)(nil), // 68: server.DWThirdRebateMessage + (*DWThirdRoundMessage)(nil), // 69: server.DWThirdRoundMessage + (*WDACKThirdRebateMessage)(nil), // 70: server.WDACKThirdRebateMessage + (*GWGameStateLog)(nil), // 71: server.GWGameStateLog + (*GWGameState)(nil), // 72: server.GWGameState + (*GWGameJackList)(nil), // 73: server.GWGameJackList + (*GWGameJackCoin)(nil), // 74: server.GWGameJackCoin + (*WGNiceIdRebind)(nil), // 75: server.WGNiceIdRebind + (*PLAYERWINCOININFO)(nil), // 76: server.PLAYERWINCOININFO + (*GWPLAYERWINCOIN)(nil), // 77: server.GWPLAYERWINCOIN + (*GWPlayerAutoMarkTag)(nil), // 78: server.GWPlayerAutoMarkTag + (*WGInviteRobEnterCoinSceneQueue)(nil), // 79: server.WGInviteRobEnterCoinSceneQueue + (*WGGameForceStart)(nil), // 80: server.WGGameForceStart + (*ProfitControlGameCfg)(nil), // 81: server.ProfitControlGameCfg + (*ProfitControlPlatformCfg)(nil), // 82: server.ProfitControlPlatformCfg + (*WGProfitControlCorrect)(nil), // 83: server.WGProfitControlCorrect + (*GWChangeSceneEvent)(nil), // 84: server.GWChangeSceneEvent + (*PlayerIParam)(nil), // 85: server.PlayerIParam + (*PlayerSParam)(nil), // 86: server.PlayerSParam + (*PlayerCParam)(nil), // 87: server.PlayerCParam + (*PlayerMatchCoin)(nil), // 88: server.PlayerMatchCoin + (*GWPlayerMatchBilled)(nil), // 89: server.GWPlayerMatchBilled + (*GWPlayerMatchGrade)(nil), // 90: server.GWPlayerMatchGrade + (*WGPlayerQuitMatch)(nil), // 91: server.WGPlayerQuitMatch + (*WGSceneMatchBaseChange)(nil), // 92: server.WGSceneMatchBaseChange + (*SSRedirectToPlayer)(nil), // 93: server.SSRedirectToPlayer + (*WGInviteMatchRob)(nil), // 94: server.WGInviteMatchRob + (*GameInfo)(nil), // 95: server.GameInfo + (*WGGameJackpot)(nil), // 96: server.WGGameJackpot + (*BigWinHistoryInfo)(nil), // 97: server.BigWinHistoryInfo + (*WGPlayerEnterMiniGame)(nil), // 98: server.WGPlayerEnterMiniGame + (*WGPlayerLeaveMiniGame)(nil), // 99: server.WGPlayerLeaveMiniGame + (*WGPlayerLeave)(nil), // 100: server.WGPlayerLeave + (*GWPlayerLeaveMiniGame)(nil), // 101: server.GWPlayerLeaveMiniGame + (*GWDestroyMiniScene)(nil), // 102: server.GWDestroyMiniScene + (*GRDestroyScene)(nil), // 103: server.GRDestroyScene + (*RWAccountInvalid)(nil), // 104: server.RWAccountInvalid + (*WGDTRoomInfo)(nil), // 105: server.WGDTRoomInfo + (*PlayerDTCoin)(nil), // 106: server.PlayerDTCoin + (*EResult)(nil), // 107: server.EResult + (*GWDTRoomInfo)(nil), // 108: server.GWDTRoomInfo + (*WGRoomResults)(nil), // 109: server.WGRoomResults + (*GWRoomResults)(nil), // 110: server.GWRoomResults + (*GWAddSingleAdjust)(nil), // 111: server.GWAddSingleAdjust + (*WGSingleAdjust)(nil), // 112: server.WGSingleAdjust + (*WbCtrlCfg)(nil), // 113: server.WbCtrlCfg + (*WGBuyRecTimeItem)(nil), // 114: server.WGBuyRecTimeItem + (*WGUpdateSkin)(nil), // 115: server.WGUpdateSkin + (*PlayerChangeItems)(nil), // 116: server.PlayerChangeItems + nil, // 117: server.WGPlayerEnter.ItemsEntry + nil, // 118: server.WGPlayerEnter.RankScoreEntry + nil, // 119: server.GWPlayerLeave.ItemsEntry + nil, // 120: server.GWPlayerLeave.MatchRobotGradesEntry + nil, // 121: server.GWPlayerLeave.RankScoreEntry + (*DB_GameFree)(nil), // 122: server.DB_GameFree } var file_server_proto_depIdxs = []int32{ 1, // 0: server.SGBindGroupTag.Code:type_name -> server.SGBindGroupTag.OpCode 4, // 1: server.ServerCtrl.Params:type_name -> server.OpResultParam - 120, // 2: server.WGCreateScene.DBGameFree:type_name -> server.DB_GameFree - 84, // 3: server.WGPlayerEnter.IParams:type_name -> server.PlayerIParam - 85, // 4: server.WGPlayerEnter.SParams:type_name -> server.PlayerSParam - 86, // 5: server.WGPlayerEnter.CParams:type_name -> server.PlayerCParam - 115, // 6: server.WGPlayerEnter.Items:type_name -> server.WGPlayerEnter.ItemsEntry - 116, // 7: server.WGPlayerEnter.RankScore:type_name -> server.WGPlayerEnter.RankScoreEntry - 117, // 8: server.GWPlayerLeave.Items:type_name -> server.GWPlayerLeave.ItemsEntry - 118, // 9: server.GWPlayerLeave.MatchRobotGrades:type_name -> server.GWPlayerLeave.MatchRobotGradesEntry - 119, // 10: server.GWPlayerLeave.RankScore:type_name -> server.GWPlayerLeave.RankScoreEntry - 25, // 11: server.ReplaySequene.Sequenes:type_name -> server.ReplayRecord - 26, // 12: server.GRReplaySequene.Rec:type_name -> server.ReplaySequene - 24, // 13: server.GRReplaySequene.Datas:type_name -> server.ReplayPlayerData - 32, // 14: server.GWGameRec.Datas:type_name -> server.PlayerGameRec - 36, // 15: server.GWFishRecord.FishRecords:type_name -> server.FishRecord - 43, // 16: server.GNPlayerCards.PlayerCards:type_name -> server.PlayerCard - 45, // 17: server.GNPlayerParam.Playerdata:type_name -> server.RobotData - 52, // 18: server.GWPlayerStatics.Datas:type_name -> server.PlayerStatics - 59, // 19: server.GWPlayerData.Datas:type_name -> server.PlayerData - 61, // 20: server.GWPlayerWinScore.PlayerWinScores:type_name -> server.PlayerWinScore - 120, // 21: server.GRGameFreeData.DBGameFree:type_name -> server.DB_GameFree - 120, // 22: server.WGClubMessage.DBGameFree:type_name -> server.DB_GameFree - 75, // 23: server.GWPLAYERWINCOIN.player:type_name -> server.PLAYERWINCOININFO - 80, // 24: server.ProfitControlPlatformCfg.GameCfg:type_name -> server.ProfitControlGameCfg - 81, // 25: server.WGProfitControlCorrect.Cfg:type_name -> server.ProfitControlPlatformCfg - 87, // 26: server.GWPlayerMatchBilled.Players:type_name -> server.PlayerMatchCoin - 87, // 27: server.GWPlayerMatchGrade.Players:type_name -> server.PlayerMatchCoin - 94, // 28: server.WGGameJackpot.Info:type_name -> server.GameInfo - 105, // 29: server.GWDTRoomInfo.Players:type_name -> server.PlayerDTCoin - 106, // 30: server.GWDTRoomInfo.Results:type_name -> server.EResult - 31, // [31:31] is the sub-list for method output_type - 31, // [31:31] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 122, // 2: server.WGCreateScene.DBGameFree:type_name -> server.DB_GameFree + 10, // 3: server.WGCreateScene.Items:type_name -> server.Item + 85, // 4: server.WGPlayerEnter.IParams:type_name -> server.PlayerIParam + 86, // 5: server.WGPlayerEnter.SParams:type_name -> server.PlayerSParam + 87, // 6: server.WGPlayerEnter.CParams:type_name -> server.PlayerCParam + 117, // 7: server.WGPlayerEnter.Items:type_name -> server.WGPlayerEnter.ItemsEntry + 118, // 8: server.WGPlayerEnter.RankScore:type_name -> server.WGPlayerEnter.RankScoreEntry + 119, // 9: server.GWPlayerLeave.Items:type_name -> server.GWPlayerLeave.ItemsEntry + 120, // 10: server.GWPlayerLeave.MatchRobotGrades:type_name -> server.GWPlayerLeave.MatchRobotGradesEntry + 121, // 11: server.GWPlayerLeave.RankScore:type_name -> server.GWPlayerLeave.RankScoreEntry + 26, // 12: server.ReplaySequene.Sequenes:type_name -> server.ReplayRecord + 27, // 13: server.GRReplaySequene.Rec:type_name -> server.ReplaySequene + 25, // 14: server.GRReplaySequene.Datas:type_name -> server.ReplayPlayerData + 33, // 15: server.GWGameRec.Datas:type_name -> server.PlayerGameRec + 37, // 16: server.GWFishRecord.FishRecords:type_name -> server.FishRecord + 44, // 17: server.GNPlayerCards.PlayerCards:type_name -> server.PlayerCard + 46, // 18: server.GNPlayerParam.Playerdata:type_name -> server.RobotData + 53, // 19: server.GWPlayerStatics.Datas:type_name -> server.PlayerStatics + 60, // 20: server.GWPlayerData.Datas:type_name -> server.PlayerData + 62, // 21: server.GWPlayerWinScore.PlayerWinScores:type_name -> server.PlayerWinScore + 122, // 22: server.GRGameFreeData.DBGameFree:type_name -> server.DB_GameFree + 122, // 23: server.WGClubMessage.DBGameFree:type_name -> server.DB_GameFree + 76, // 24: server.GWPLAYERWINCOIN.player:type_name -> server.PLAYERWINCOININFO + 81, // 25: server.ProfitControlPlatformCfg.GameCfg:type_name -> server.ProfitControlGameCfg + 82, // 26: server.WGProfitControlCorrect.Cfg:type_name -> server.ProfitControlPlatformCfg + 88, // 27: server.GWPlayerMatchBilled.Players:type_name -> server.PlayerMatchCoin + 88, // 28: server.GWPlayerMatchGrade.Players:type_name -> server.PlayerMatchCoin + 95, // 29: server.WGGameJackpot.Info:type_name -> server.GameInfo + 106, // 30: server.GWDTRoomInfo.Players:type_name -> server.PlayerDTCoin + 107, // 31: server.GWDTRoomInfo.Results:type_name -> server.EResult + 10, // 32: server.PlayerChangeItems.Items:type_name -> server.Item + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_server_proto_init() } @@ -10146,7 +10284,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGCreateScene); i { + switch v := v.(*Item); i { case 0: return &v.state case 1: @@ -10158,7 +10296,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDestroyScene); i { + switch v := v.(*WGCreateScene); i { case 0: return &v.state case 1: @@ -10170,7 +10308,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDestroyScene); i { + switch v := v.(*WGDestroyScene); i { case 0: return &v.state case 1: @@ -10182,7 +10320,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RebateTask); i { + switch v := v.(*GWDestroyScene); i { case 0: return &v.state case 1: @@ -10194,7 +10332,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerEnter); i { + switch v := v.(*RebateTask); i { case 0: return &v.state case 1: @@ -10206,7 +10344,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGAudienceSit); i { + switch v := v.(*WGPlayerEnter); i { case 0: return &v.state case 1: @@ -10218,7 +10356,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerReturn); i { + switch v := v.(*WGAudienceSit); i { case 0: return &v.state case 1: @@ -10230,7 +10368,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerLeave); i { + switch v := v.(*WGPlayerReturn); i { case 0: return &v.state case 1: @@ -10242,7 +10380,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerDropLine); i { + switch v := v.(*GWPlayerLeave); i { case 0: return &v.state case 1: @@ -10254,7 +10392,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerRehold); i { + switch v := v.(*WGPlayerDropLine); i { case 0: return &v.state case 1: @@ -10266,7 +10404,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWBilledRoomCard); i { + switch v := v.(*WGPlayerRehold); i { case 0: return &v.state case 1: @@ -10278,7 +10416,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GGPlayerSessionBind); i { + switch v := v.(*GWBilledRoomCard); i { case 0: return &v.state case 1: @@ -10290,7 +10428,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GGPlayerSessionUnBind); i { + switch v := v.(*GGPlayerSessionBind); i { case 0: return &v.state case 1: @@ -10302,7 +10440,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDayTimeChange); i { + switch v := v.(*GGPlayerSessionUnBind); i { case 0: return &v.state case 1: @@ -10314,7 +10452,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayPlayerData); i { + switch v := v.(*WGDayTimeChange); i { case 0: return &v.state case 1: @@ -10326,7 +10464,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayRecord); i { + switch v := v.(*ReplayPlayerData); i { case 0: return &v.state case 1: @@ -10338,7 +10476,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplaySequene); i { + switch v := v.(*ReplayRecord); i { case 0: return &v.state case 1: @@ -10350,7 +10488,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRReplaySequene); i { + switch v := v.(*ReplaySequene); i { case 0: return &v.state case 1: @@ -10362,7 +10500,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRLoginRec); i { + switch v := v.(*GRReplaySequene); i { case 0: return &v.state case 1: @@ -10374,7 +10512,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRGameDetail); i { + switch v := v.(*WRLoginRec); i { case 0: return &v.state case 1: @@ -10386,7 +10524,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRPlayerData); i { + switch v := v.(*WRGameDetail); i { case 0: return &v.state case 1: @@ -10398,7 +10536,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WTPlayerPay); i { + switch v := v.(*WRPlayerData); i { case 0: return &v.state case 1: @@ -10410,7 +10548,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerGameRec); i { + switch v := v.(*WTPlayerPay); i { case 0: return &v.state case 1: @@ -10422,7 +10560,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameRec); i { + switch v := v.(*PlayerGameRec); i { case 0: return &v.state case 1: @@ -10434,7 +10572,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWSceneStart); i { + switch v := v.(*GWGameRec); i { case 0: return &v.state case 1: @@ -10446,7 +10584,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCtx); i { + switch v := v.(*GWSceneStart); i { case 0: return &v.state case 1: @@ -10458,7 +10596,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FishRecord); i { + switch v := v.(*PlayerCtx); i { case 0: return &v.state case 1: @@ -10470,7 +10608,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWFishRecord); i { + switch v := v.(*FishRecord); i { case 0: return &v.state case 1: @@ -10482,7 +10620,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWSceneState); i { + switch v := v.(*GWFishRecord); i { case 0: return &v.state case 1: @@ -10494,7 +10632,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRInviteRobot); i { + switch v := v.(*GWSceneState); i { case 0: return &v.state case 1: @@ -10506,7 +10644,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRInviteCreateRoom); i { + switch v := v.(*WRInviteRobot); i { case 0: return &v.state case 1: @@ -10518,7 +10656,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGAgentKickOutPlayer); i { + switch v := v.(*WRInviteCreateRoom); i { case 0: return &v.state case 1: @@ -10530,7 +10668,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WDDataAnalysis); i { + switch v := v.(*WGAgentKickOutPlayer); i { case 0: return &v.state case 1: @@ -10542,7 +10680,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCard); i { + switch v := v.(*WDDataAnalysis); i { case 0: return &v.state case 1: @@ -10554,7 +10692,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GNPlayerCards); i { + switch v := v.(*PlayerCard); i { case 0: return &v.state case 1: @@ -10566,7 +10704,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RobotData); i { + switch v := v.(*GNPlayerCards); i { case 0: return &v.state case 1: @@ -10578,7 +10716,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GNPlayerParam); i { + switch v := v.(*RobotData); i { case 0: return &v.state case 1: @@ -10590,7 +10728,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWRebuildScene); i { + switch v := v.(*GNPlayerParam); i { case 0: return &v.state case 1: @@ -10602,7 +10740,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGRebindPlayerSnId); i { + switch v := v.(*GWRebuildScene); i { case 0: return &v.state case 1: @@ -10614,7 +10752,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerFlag); i { + switch v := v.(*WGRebindPlayerSnId); i { case 0: return &v.state case 1: @@ -10626,7 +10764,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGHundredOp); i { + switch v := v.(*GWPlayerFlag); i { case 0: return &v.state case 1: @@ -10638,7 +10776,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWNewNotice); i { + switch v := v.(*WGHundredOp); i { case 0: return &v.state case 1: @@ -10650,7 +10788,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerStatics); i { + switch v := v.(*GWNewNotice); i { case 0: return &v.state case 1: @@ -10662,7 +10800,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerStatics); i { + switch v := v.(*PlayerStatics); i { case 0: return &v.state case 1: @@ -10674,7 +10812,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGResetCoinPool); i { + switch v := v.(*GWPlayerStatics); i { case 0: return &v.state case 1: @@ -10686,7 +10824,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSetPlayerBlackLevel); i { + switch v := v.(*WGResetCoinPool); i { case 0: return &v.state case 1: @@ -10698,7 +10836,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWAutoRelieveWBLevel); i { + switch v := v.(*WGSetPlayerBlackLevel); i { case 0: return &v.state case 1: @@ -10710,7 +10848,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWScenePlayerLog); i { + switch v := v.(*GWAutoRelieveWBLevel); i { case 0: return &v.state case 1: @@ -10722,7 +10860,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerForceLeave); i { + switch v := v.(*GWScenePlayerLog); i { case 0: return &v.state case 1: @@ -10734,7 +10872,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerData); i { + switch v := v.(*GWPlayerForceLeave); i { case 0: return &v.state case 1: @@ -10746,7 +10884,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerData); i { + switch v := v.(*PlayerData); i { case 0: return &v.state case 1: @@ -10758,7 +10896,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerWinScore); i { + switch v := v.(*GWPlayerData); i { case 0: return &v.state case 1: @@ -10770,7 +10908,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerWinScore); i { + switch v := v.(*PlayerWinScore); i { case 0: return &v.state case 1: @@ -10782,7 +10920,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPayerOnGameCount); i { + switch v := v.(*GWPlayerWinScore); i { case 0: return &v.state case 1: @@ -10794,7 +10932,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRGameFreeData); i { + switch v := v.(*WGPayerOnGameCount); i { case 0: return &v.state case 1: @@ -10806,7 +10944,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSyncPlayerSafeBoxCoin); i { + switch v := v.(*GRGameFreeData); i { case 0: return &v.state case 1: @@ -10818,7 +10956,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGClubMessage); i { + switch v := v.(*WGSyncPlayerSafeBoxCoin); i { case 0: return &v.state case 1: @@ -10830,7 +10968,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DWThirdRebateMessage); i { + switch v := v.(*WGClubMessage); i { case 0: return &v.state case 1: @@ -10842,7 +10980,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DWThirdRoundMessage); i { + switch v := v.(*DWThirdRebateMessage); i { case 0: return &v.state case 1: @@ -10854,7 +10992,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WDACKThirdRebateMessage); i { + switch v := v.(*DWThirdRoundMessage); i { case 0: return &v.state case 1: @@ -10866,7 +11004,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameStateLog); i { + switch v := v.(*WDACKThirdRebateMessage); i { case 0: return &v.state case 1: @@ -10878,7 +11016,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameState); i { + switch v := v.(*GWGameStateLog); i { case 0: return &v.state case 1: @@ -10890,7 +11028,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameJackList); i { + switch v := v.(*GWGameState); i { case 0: return &v.state case 1: @@ -10902,7 +11040,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameJackCoin); i { + switch v := v.(*GWGameJackList); i { case 0: return &v.state case 1: @@ -10914,7 +11052,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGNiceIdRebind); i { + switch v := v.(*GWGameJackCoin); i { case 0: return &v.state case 1: @@ -10926,7 +11064,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PLAYERWINCOININFO); i { + switch v := v.(*WGNiceIdRebind); i { case 0: return &v.state case 1: @@ -10938,7 +11076,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPLAYERWINCOIN); i { + switch v := v.(*PLAYERWINCOININFO); i { case 0: return &v.state case 1: @@ -10950,7 +11088,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerAutoMarkTag); i { + switch v := v.(*GWPLAYERWINCOIN); i { case 0: return &v.state case 1: @@ -10962,7 +11100,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGInviteRobEnterCoinSceneQueue); i { + switch v := v.(*GWPlayerAutoMarkTag); i { case 0: return &v.state case 1: @@ -10974,7 +11112,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGGameForceStart); i { + switch v := v.(*WGInviteRobEnterCoinSceneQueue); i { case 0: return &v.state case 1: @@ -10986,7 +11124,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProfitControlGameCfg); i { + switch v := v.(*WGGameForceStart); i { case 0: return &v.state case 1: @@ -10998,7 +11136,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProfitControlPlatformCfg); i { + switch v := v.(*ProfitControlGameCfg); i { case 0: return &v.state case 1: @@ -11010,7 +11148,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGProfitControlCorrect); i { + switch v := v.(*ProfitControlPlatformCfg); i { case 0: return &v.state case 1: @@ -11022,7 +11160,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWChangeSceneEvent); i { + switch v := v.(*WGProfitControlCorrect); i { case 0: return &v.state case 1: @@ -11034,7 +11172,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerIParam); i { + switch v := v.(*GWChangeSceneEvent); i { case 0: return &v.state case 1: @@ -11046,7 +11184,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerSParam); i { + switch v := v.(*PlayerIParam); i { case 0: return &v.state case 1: @@ -11058,7 +11196,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCParam); i { + switch v := v.(*PlayerSParam); i { case 0: return &v.state case 1: @@ -11070,7 +11208,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerMatchCoin); i { + switch v := v.(*PlayerCParam); i { case 0: return &v.state case 1: @@ -11082,7 +11220,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerMatchBilled); i { + switch v := v.(*PlayerMatchCoin); i { case 0: return &v.state case 1: @@ -11094,7 +11232,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerMatchGrade); i { + switch v := v.(*GWPlayerMatchBilled); i { case 0: return &v.state case 1: @@ -11106,7 +11244,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerQuitMatch); i { + switch v := v.(*GWPlayerMatchGrade); i { case 0: return &v.state case 1: @@ -11118,7 +11256,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSceneMatchBaseChange); i { + switch v := v.(*WGPlayerQuitMatch); i { case 0: return &v.state case 1: @@ -11130,7 +11268,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SSRedirectToPlayer); i { + switch v := v.(*WGSceneMatchBaseChange); i { case 0: return &v.state case 1: @@ -11142,7 +11280,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGInviteMatchRob); i { + switch v := v.(*SSRedirectToPlayer); i { case 0: return &v.state case 1: @@ -11154,7 +11292,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameInfo); i { + switch v := v.(*WGInviteMatchRob); i { case 0: return &v.state case 1: @@ -11166,7 +11304,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGGameJackpot); i { + switch v := v.(*GameInfo); i { case 0: return &v.state case 1: @@ -11178,7 +11316,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BigWinHistoryInfo); i { + switch v := v.(*WGGameJackpot); i { case 0: return &v.state case 1: @@ -11190,7 +11328,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerEnterMiniGame); i { + switch v := v.(*BigWinHistoryInfo); i { case 0: return &v.state case 1: @@ -11202,7 +11340,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerLeaveMiniGame); i { + switch v := v.(*WGPlayerEnterMiniGame); i { case 0: return &v.state case 1: @@ -11214,7 +11352,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerLeave); i { + switch v := v.(*WGPlayerLeaveMiniGame); i { case 0: return &v.state case 1: @@ -11226,7 +11364,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerLeaveMiniGame); i { + switch v := v.(*WGPlayerLeave); i { case 0: return &v.state case 1: @@ -11238,7 +11376,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDestroyMiniScene); i { + switch v := v.(*GWPlayerLeaveMiniGame); i { case 0: return &v.state case 1: @@ -11250,7 +11388,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRDestroyScene); i { + switch v := v.(*GWDestroyMiniScene); i { case 0: return &v.state case 1: @@ -11262,7 +11400,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RWAccountInvalid); i { + switch v := v.(*GRDestroyScene); i { case 0: return &v.state case 1: @@ -11274,7 +11412,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDTRoomInfo); i { + switch v := v.(*RWAccountInvalid); i { case 0: return &v.state case 1: @@ -11286,7 +11424,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerDTCoin); i { + switch v := v.(*WGDTRoomInfo); i { case 0: return &v.state case 1: @@ -11298,7 +11436,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EResult); i { + switch v := v.(*PlayerDTCoin); i { case 0: return &v.state case 1: @@ -11310,7 +11448,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDTRoomInfo); i { + switch v := v.(*EResult); i { case 0: return &v.state case 1: @@ -11322,7 +11460,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGRoomResults); i { + switch v := v.(*GWDTRoomInfo); i { case 0: return &v.state case 1: @@ -11334,7 +11472,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWRoomResults); i { + switch v := v.(*WGRoomResults); i { case 0: return &v.state case 1: @@ -11346,7 +11484,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWAddSingleAdjust); i { + switch v := v.(*GWRoomResults); i { case 0: return &v.state case 1: @@ -11358,7 +11496,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSingleAdjust); i { + switch v := v.(*GWAddSingleAdjust); i { case 0: return &v.state case 1: @@ -11370,7 +11508,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WbCtrlCfg); i { + switch v := v.(*WGSingleAdjust); i { case 0: return &v.state case 1: @@ -11382,7 +11520,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGBuyRecTimeItem); i { + switch v := v.(*WbCtrlCfg); i { case 0: return &v.state case 1: @@ -11394,6 +11532,18 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WGBuyRecTimeItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_server_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WGUpdateSkin); i { case 0: return &v.state @@ -11405,6 +11555,18 @@ func file_server_proto_init() { return nil } } + file_server_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PlayerChangeItems); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -11412,7 +11574,7 @@ func file_server_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_server_proto_rawDesc, NumEnums: 2, - NumMessages: 118, + NumMessages: 120, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/server/server.proto b/protocol/server/server.proto index 3f5d54b..6ef0c23 100644 --- a/protocol/server/server.proto +++ b/protocol/server/server.proto @@ -108,6 +108,7 @@ enum SSPacketID { PACKET_GW_ADDSINGLEADJUST = 1551; PACKET_WG_BUYRECTIMEITEM = 1552; PACKET_WG_UpdateSkin = 1553; // 修改皮肤id + PACKET_PlayerChangeItems = 1554; // 修改玩家道具数量 } //PACKET_SG_BINDGROUPTAG @@ -161,6 +162,11 @@ message ServerNotice { string Text = 1; } +message Item { + int32 Id = 1; + int64 Num = 2; +} + //PACKET_WG_CREATESCENE message WGCreateScene { int32 SceneId = 1; @@ -186,6 +192,7 @@ message WGCreateScene { int32 PlayerNum = 21; bool RealCtrl = 22; repeated int32 ChessRank = 23; + repeated Item Items = 24; // 奖励道具 } //PACKET_WG_DESTROYSCENE @@ -998,4 +1005,10 @@ message WGBuyRecTimeItem{ message WGUpdateSkin{ int32 SnId = 1; int32 Id = 2; // 皮肤id +} + +// PACKET_PlayerChangeItems +message PlayerChangeItems{ + int32 SnId = 1; + repeated Item Items = 2; // 道具变化数量 } \ No newline at end of file diff --git a/protocol/tienlen/tienlen.pb.go b/protocol/tienlen/tienlen.pb.go index ae02080..b8ef2e9 100644 --- a/protocol/tienlen/tienlen.pb.go +++ b/protocol/tienlen/tienlen.pb.go @@ -654,6 +654,13 @@ type SCTienLenRoomInfo struct { OutCardRecord []int32 `protobuf:"varint,30,rep,packed,name=OutCardRecord,proto3" json:"OutCardRecord,omitempty"` //已打出去的牌 IsOutRecord bool `protobuf:"varint,31,opt,name=IsOutRecord,proto3" json:"IsOutRecord,omitempty"` //是否能用记牌器 ItemRecExpireTime int64 `protobuf:"varint,32,opt,name=ItemRecExpireTime,proto3" json:"ItemRecExpireTime,omitempty"` //记牌器到期时间 + // 房卡场配置 + RoomTypeId int32 `protobuf:"varint,33,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` //房间类型id + RoomConfigId int32 `protobuf:"varint,34,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + NeedPassword int32 `protobuf:"varint,35,opt,name=NeedPassword,proto3" json:"NeedPassword,omitempty"` //是否需要密码 1需要 + CostType int32 `protobuf:"varint,36,opt,name=CostType,proto3" json:"CostType,omitempty"` //房卡支付方式 1AA 2房主 + Voice int32 `protobuf:"varint,37,opt,name=Voice,proto3" json:"Voice,omitempty"` //是否开启语音 1开启 + Password string `protobuf:"bytes,38,opt,name=Password,proto3" json:"Password,omitempty"` //房间密码 } func (x *SCTienLenRoomInfo) Reset() { @@ -891,6 +898,48 @@ func (x *SCTienLenRoomInfo) GetItemRecExpireTime() int64 { return 0 } +func (x *SCTienLenRoomInfo) GetRoomTypeId() int32 { + if x != nil { + return x.RoomTypeId + } + return 0 +} + +func (x *SCTienLenRoomInfo) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *SCTienLenRoomInfo) GetNeedPassword() int32 { + if x != nil { + return x.NeedPassword + } + return 0 +} + +func (x *SCTienLenRoomInfo) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *SCTienLenRoomInfo) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +func (x *SCTienLenRoomInfo) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + //房间状态更新 type SCTienLenRoomState struct { state protoimpl.MessageState @@ -2294,20 +2343,77 @@ func (x *SCTienLenPetSkillRes) GetPetSkillRes() bool { return false } +type ItemInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 道具ID + Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` // 道具数量 +} + +func (x *ItemInfo) Reset() { + *x = ItemInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_tienlen_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ItemInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ItemInfo) ProtoMessage() {} + +func (x *ItemInfo) ProtoReflect() protoreflect.Message { + mi := &file_tienlen_proto_msgTypes[24] + 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 ItemInfo.ProtoReflect.Descriptor instead. +func (*ItemInfo) Descriptor() ([]byte, []int) { + return file_tienlen_proto_rawDescGZIP(), []int{24} +} + +func (x *ItemInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ItemInfo) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 +} + type TienLenCycleBilledInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家ID - RoundScore []int64 `protobuf:"varint,2,rep,packed,name=RoundScore,proto3" json:"RoundScore,omitempty"` // 每轮得分 - Score int64 `protobuf:"varint,3,opt,name=Score,proto3" json:"Score,omitempty"` // 基础分 + SnId int32 `protobuf:"varint,1,opt,name=SnId,proto3" json:"SnId,omitempty"` // 玩家ID + RoundScore []int64 `protobuf:"varint,2,rep,packed,name=RoundScore,proto3" json:"RoundScore,omitempty"` // 每轮得分 + Score int64 `protobuf:"varint,3,opt,name=Score,proto3" json:"Score,omitempty"` // 基础分 + Award []*ItemInfo `protobuf:"bytes,4,rep,name=Award,proto3" json:"Award,omitempty"` // 奖励道具 + TotalScore int64 `protobuf:"varint,5,opt,name=TotalScore,proto3" json:"TotalScore,omitempty"` // 总分 } func (x *TienLenCycleBilledInfo) Reset() { *x = TienLenCycleBilledInfo{} if protoimpl.UnsafeEnabled { - mi := &file_tienlen_proto_msgTypes[24] + mi := &file_tienlen_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2320,7 +2426,7 @@ func (x *TienLenCycleBilledInfo) String() string { func (*TienLenCycleBilledInfo) ProtoMessage() {} func (x *TienLenCycleBilledInfo) ProtoReflect() protoreflect.Message { - mi := &file_tienlen_proto_msgTypes[24] + mi := &file_tienlen_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2333,7 +2439,7 @@ func (x *TienLenCycleBilledInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TienLenCycleBilledInfo.ProtoReflect.Descriptor instead. func (*TienLenCycleBilledInfo) Descriptor() ([]byte, []int) { - return file_tienlen_proto_rawDescGZIP(), []int{24} + return file_tienlen_proto_rawDescGZIP(), []int{25} } func (x *TienLenCycleBilledInfo) GetSnId() int32 { @@ -2357,6 +2463,20 @@ func (x *TienLenCycleBilledInfo) GetScore() int64 { return 0 } +func (x *TienLenCycleBilledInfo) GetAward() []*ItemInfo { + if x != nil { + return x.Award + } + return nil +} + +func (x *TienLenCycleBilledInfo) GetTotalScore() int64 { + if x != nil { + return x.TotalScore + } + return 0 +} + // PACKET_SCTienLenCycleBilled type SCTienLenCycleBilled struct { state protoimpl.MessageState @@ -2369,7 +2489,7 @@ type SCTienLenCycleBilled struct { func (x *SCTienLenCycleBilled) Reset() { *x = SCTienLenCycleBilled{} if protoimpl.UnsafeEnabled { - mi := &file_tienlen_proto_msgTypes[25] + mi := &file_tienlen_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2382,7 +2502,7 @@ func (x *SCTienLenCycleBilled) String() string { func (*SCTienLenCycleBilled) ProtoMessage() {} func (x *SCTienLenCycleBilled) ProtoReflect() protoreflect.Message { - mi := &file_tienlen_proto_msgTypes[25] + mi := &file_tienlen_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2395,7 +2515,7 @@ func (x *SCTienLenCycleBilled) ProtoReflect() protoreflect.Message { // Deprecated: Use SCTienLenCycleBilled.ProtoReflect.Descriptor instead. func (*SCTienLenCycleBilled) Descriptor() ([]byte, []int) { - return file_tienlen_proto_rawDescGZIP(), []int{25} + return file_tienlen_proto_rawDescGZIP(), []int{26} } func (x *SCTienLenCycleBilled) GetList() []*TienLenCycleBilledInfo { @@ -2479,7 +2599,7 @@ var file_tienlen_proto_rawDesc = []byte{ 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x23, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xab, 0x07, 0x0a, 0x11, 0x53, 0x43, 0x54, + 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xe1, 0x08, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, @@ -2538,255 +2658,273 @@ var file_tienlen_proto_rawDesc = []byte{ 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x42, 0x0a, 0x12, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x43, 0x53, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, - 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, - 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x22, 0x46, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, - 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x28, 0x0a, 0x14, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x50, 0x6f, 0x73, 0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x57, - 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, - 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, - 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, - 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, - 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x64, 0x64, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, - 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x22, 0x4d, 0x0a, 0x13, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, - 0x6c, 0x65, 0x64, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x18, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x12, - 0x1e, 0x0a, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, - 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x6f, 0x73, - 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x57, - 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, - 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, - 0x6e, 0x22, 0x5b, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, - 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, - 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, - 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x88, - 0x02, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, - 0x54, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, - 0x2e, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x47, 0x72, - 0x61, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x39, - 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7f, 0x0a, 0x11, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, - 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, - 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x3b, 0x0a, 0x19, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, - 0x72, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x1a, 0x53, 0x43, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, - 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41, 0x75, 0x64, 0x69, - 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x42, - 0x6f, 0x6d, 0x62, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x42, - 0x6f, 0x6d, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x43, 0x61, 0x72, 0x64, 0x5f, 0x70, - 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, - 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, - 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, - 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, - 0x66, 0x74, 0x5f, 0x31, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, - 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, - 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, - 0x74, 0x32, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, - 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, - 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x28, 0x0a, 0x10, 0x4f, - 0x74, 0x68, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, - 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x31, 0x18, 0x0d, 0x20, + 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, + 0x70, 0x65, 0x49, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, + 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, 0x22, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, + 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, + 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x23, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, + 0x69, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x26, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x42, 0x0a, 0x12, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x22, 0x45, 0x0a, 0x11, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, + 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, + 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, + 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, + 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, + 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x46, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, + 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, + 0x22, 0x28, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, + 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, + 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, + 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, + 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x47, + 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, + 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, + 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, + 0x6e, 0x48, 0x75, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, + 0x75, 0x22, 0x4d, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, + 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, + 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, + 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, + 0x22, 0xc4, 0x01, 0x0a, 0x18, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, + 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, + 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, + 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, + 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, + 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x5b, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, + 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, + 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, + 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, + 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, + 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x2e, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x44, 0x61, 0x74, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x7f, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, + 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, + 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, + 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, + 0x22, 0x3b, 0x0a, 0x19, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, + 0x1a, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x41, + 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, + 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x19, 0x0a, 0x08, 0x42, 0x6f, 0x6d, 0x62, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x42, 0x6f, 0x6d, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, + 0x43, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, + 0x50, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, + 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, + 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, + 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, + 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, + 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, + 0x30, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, + 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, + 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, + 0x74, 0x5f, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, + 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, + 0x33, 0x12, 0x28, 0x0a, 0x10, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, + 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, + 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, - 0x31, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, - 0x73, 0x5f, 0x32, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x33, 0x12, 0x2a, 0x0a, - 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, - 0x64, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, - 0x75, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, - 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x46, 0x69, - 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, - 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x14, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x20, 0x0a, 0x0c, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x15, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x20, - 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x16, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, - 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, - 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, - 0x74, 0x33, 0x12, 0x19, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x18, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, - 0x45, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, - 0x1a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x49, 0x73, 0x57, 0x69, 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, - 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, - 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x41, - 0x0a, 0x1b, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, - 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, - 0x74, 0x22, 0x68, 0x0a, 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, - 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, - 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, - 0x52, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, - 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x22, 0x62, 0x0a, 0x16, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, - 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x75, - 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x52, - 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, - 0x4b, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x3e, 0x0a, 0x0c, - 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, - 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, - 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, - 0x09, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0xa2, 0x05, 0x0a, - 0x0f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, - 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, - 0x65, 0x6e, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4f, 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4f, 0x70, 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, - 0x6e, 0x74, 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, - 0x64, 0x10, 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, - 0x65, 0x64, 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, - 0x73, 0x10, 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, - 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, - 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, - 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, - 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, - 0x86, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, - 0x10, 0x87, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, - 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, - 0x88, 0x2a, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, - 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, - 0x6e, 0x74, 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, - 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, + 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, + 0x73, 0x5f, 0x31, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x32, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, + 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, + 0x64, 0x73, 0x33, 0x12, 0x2a, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, + 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, + 0x27, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, + 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, + 0x18, 0x14, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, + 0x74, 0x30, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, + 0x5f, 0x31, 0x18, 0x15, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, + 0x65, 0x66, 0x74, 0x31, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, + 0x66, 0x74, 0x5f, 0x32, 0x18, 0x16, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, + 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x19, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, + 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, + 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, + 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, + 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, + 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x50, 0x6f, 0x73, 0x22, 0x41, 0x0a, 0x1b, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, + 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, + 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, + 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, + 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x68, 0x0a, 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, + 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, + 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, + 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, + 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, + 0x73, 0x22, 0x2c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, + 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, + 0xab, 0x01, 0x0a, 0x16, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, + 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x03, 0x52, 0x0a, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x49, 0x74, + 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x4b, 0x0a, + 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, + 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x3e, 0x0a, 0x0c, 0x4f, 0x70, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4f, + 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0xa2, 0x05, 0x0a, 0x0f, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x16, + 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, + 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, + 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, + 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, + 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x10, + 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, + 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, + 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, + 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, + 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, 0x2a, 0x12, + 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, + 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, + 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, 0x86, 0x2a, + 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, 0x87, + 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, + 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, 0x88, 0x2a, + 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, + 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, + 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, 0x1b, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, + 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, - 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x12, - 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, - 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x8c, - 0x2a, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2f, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x8c, 0x2a, 0x42, + 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2f, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2802,7 +2940,7 @@ func file_tienlen_proto_rawDescGZIP() []byte { } var file_tienlen_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_tienlen_proto_msgTypes = make([]protoimpl.MessageInfo, 28) +var file_tienlen_proto_msgTypes = make([]protoimpl.MessageInfo, 29) var file_tienlen_proto_goTypes = []interface{}{ (OpResultCode)(0), // 0: tienlen.OpResultCode (TienLenPacketID)(0), // 1: tienlen.TienLenPacketID @@ -2830,13 +2968,14 @@ var file_tienlen_proto_goTypes = []interface{}{ (*SCTienLenPlayerThinkLongCnt)(nil), // 23: tienlen.SCTienLenPlayerThinkLongCnt (*SCTienLenPlayerFirstGiveItemItem)(nil), // 24: tienlen.SCTienLenPlayerFirstGiveItemItem (*SCTienLenPetSkillRes)(nil), // 25: tienlen.SCTienLenPetSkillRes - (*TienLenCycleBilledInfo)(nil), // 26: tienlen.TienLenCycleBilledInfo - (*SCTienLenCycleBilled)(nil), // 27: tienlen.SCTienLenCycleBilled - nil, // 28: tienlen.TienLenPlayerData.ItemsEntry - nil, // 29: tienlen.SCTienLenCardTest.GradesEntry + (*ItemInfo)(nil), // 26: tienlen.ItemInfo + (*TienLenCycleBilledInfo)(nil), // 27: tienlen.TienLenCycleBilledInfo + (*SCTienLenCycleBilled)(nil), // 28: tienlen.SCTienLenCycleBilled + nil, // 29: tienlen.TienLenPlayerData.ItemsEntry + nil, // 30: tienlen.SCTienLenCardTest.GradesEntry } var file_tienlen_proto_depIdxs = []int32{ - 28, // 0: tienlen.TienLenPlayerData.Items:type_name -> tienlen.TienLenPlayerData.ItemsEntry + 29, // 0: tienlen.TienLenPlayerData.Items:type_name -> tienlen.TienLenPlayerData.ItemsEntry 3, // 1: tienlen.TienLenPlayerData.SkillInfo:type_name -> tienlen.PetSkillInfo 4, // 2: tienlen.PetSkillInfo.SkillData:type_name -> tienlen.SkillInfo 2, // 3: tienlen.SCTienLenRoomInfo.Players:type_name -> tienlen.TienLenPlayerData @@ -2845,13 +2984,14 @@ var file_tienlen_proto_depIdxs = []int32{ 2, // 6: tienlen.SCTienLenPlayerEnter.Data:type_name -> tienlen.TienLenPlayerData 12, // 7: tienlen.TienLenPlayerGameBilled.AddItems:type_name -> tienlen.AddItem 13, // 8: tienlen.SCTienLenGameBilled.Datas:type_name -> tienlen.TienLenPlayerGameBilled - 29, // 9: tienlen.SCTienLenCardTest.Grades:type_name -> tienlen.SCTienLenCardTest.GradesEntry - 26, // 10: tienlen.SCTienLenCycleBilled.List:type_name -> tienlen.TienLenCycleBilledInfo - 11, // [11:11] is the sub-list for method output_type - 11, // [11:11] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 30, // 9: tienlen.SCTienLenCardTest.Grades:type_name -> tienlen.SCTienLenCardTest.GradesEntry + 26, // 10: tienlen.TienLenCycleBilledInfo.Award:type_name -> tienlen.ItemInfo + 27, // 11: tienlen.SCTienLenCycleBilled.List:type_name -> tienlen.TienLenCycleBilledInfo + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_tienlen_proto_init() } @@ -3149,7 +3289,7 @@ func file_tienlen_proto_init() { } } file_tienlen_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TienLenCycleBilledInfo); i { + switch v := v.(*ItemInfo); i { case 0: return &v.state case 1: @@ -3161,6 +3301,18 @@ func file_tienlen_proto_init() { } } file_tienlen_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TienLenCycleBilledInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tienlen_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCTienLenCycleBilled); i { case 0: return &v.state @@ -3179,7 +3331,7 @@ func file_tienlen_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_tienlen_proto_rawDesc, NumEnums: 2, - NumMessages: 28, + NumMessages: 29, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/tienlen/tienlen.proto b/protocol/tienlen/tienlen.proto index 57b169c..49568e2 100644 --- a/protocol/tienlen/tienlen.proto +++ b/protocol/tienlen/tienlen.proto @@ -117,6 +117,14 @@ message SCTienLenRoomInfo { repeated int32 OutCardRecord = 30 ;//已打出去的牌 bool IsOutRecord = 31;//是否能用记牌器 int64 ItemRecExpireTime = 32; //记牌器到期时间 + // 房卡场配置 + int32 RoomTypeId = 33; //房间类型id + int32 RoomConfigId = 34; //房间配置id + int32 NeedPassword = 35; //是否需要密码 1需要 + int32 CostType = 36; //房卡支付方式 1AA 2房主 + int32 Voice = 37; //是否开启语音 1开启 + string Password = 38; //房间密码 + // 房卡场配置 } //房间状态更新 @@ -268,11 +276,17 @@ message SCTienLenPetSkillRes{ bool PetSkillRes = 3; //true生效 } +message ItemInfo { + int32 Id = 1; // 道具ID + int64 Num = 2; // 道具数量 +} + message TienLenCycleBilledInfo { int32 SnId = 1; // 玩家ID repeated int64 RoundScore = 2; // 每轮得分 int64 Score = 3; // 基础分 - // 总积分 = RoundScore + Score + repeated ItemInfo Award = 4; // 奖励道具 + int64 TotalScore = 5; // 总分 } // PACKET_SCTienLenCycleBilled diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index d672d3c..a284f6a 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -1904,24 +1904,30 @@ type RoomInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` - SceneId int32 `protobuf:"varint,2,opt,name=SceneId,proto3" json:"SceneId,omitempty"` //场景id - GameId int32 `protobuf:"varint,3,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏id - GameMode int32 `protobuf:"varint,4,opt,name=GameMode,proto3" json:"GameMode,omitempty"` //游戏模式 - SceneMode int32 `protobuf:"varint,5,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` //房间模式,参考common.SceneMode_XXX - GroupId int32 `protobuf:"varint,6,opt,name=GroupId,proto3" json:"GroupId,omitempty"` //组id - GameFreeId int32 `protobuf:"varint,7,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` - SrvId int32 `protobuf:"varint,8,opt,name=SrvId,proto3" json:"SrvId,omitempty"` //服务器id - Creator int32 `protobuf:"varint,9,opt,name=Creator,proto3" json:"Creator,omitempty"` //创建者账号id - Agentor int32 `protobuf:"varint,10,opt,name=Agentor,proto3" json:"Agentor,omitempty"` //代理者id - ReplayCode string `protobuf:"bytes,11,opt,name=ReplayCode,proto3" json:"ReplayCode,omitempty"` //回放码 - Params []int32 `protobuf:"varint,12,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场景参数 - PlayerIds []int32 `protobuf:"varint,13,rep,packed,name=PlayerIds,proto3" json:"PlayerIds,omitempty"` //所有玩家id - PlayerCnt int32 `protobuf:"varint,14,opt,name=PlayerCnt,proto3" json:"PlayerCnt,omitempty"` //玩家数量 - RobotCnt int32 `protobuf:"varint,15,opt,name=RobotCnt,proto3" json:"RobotCnt,omitempty"` //AI数量 - Start int32 `protobuf:"varint,16,opt,name=Start,proto3" json:"Start,omitempty"` //0.等待 1.游戏中 - CreateTime int64 `protobuf:"varint,17,opt,name=CreateTime,proto3" json:"CreateTime,omitempty"` //创建时间 - BaseScore int32 `protobuf:"varint,18,opt,name=BaseScore,proto3" json:"BaseScore,omitempty"` //底分 + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` + SceneId int32 `protobuf:"varint,2,opt,name=SceneId,proto3" json:"SceneId,omitempty"` //房间id + GameId int32 `protobuf:"varint,3,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏id + GameMode int32 `protobuf:"varint,4,opt,name=GameMode,proto3" json:"GameMode,omitempty"` //游戏模式 + SceneMode int32 `protobuf:"varint,5,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` //房间模式,参考common.SceneMode_XXX + GroupId int32 `protobuf:"varint,6,opt,name=GroupId,proto3" json:"GroupId,omitempty"` //组id + GameFreeId int32 `protobuf:"varint,7,opt,name=GameFreeId,proto3" json:"GameFreeId,omitempty"` // 场次id + SrvId int32 `protobuf:"varint,8,opt,name=SrvId,proto3" json:"SrvId,omitempty"` //服务器id + Creator int32 `protobuf:"varint,9,opt,name=Creator,proto3" json:"Creator,omitempty"` //创建者账号id + Agentor int32 `protobuf:"varint,10,opt,name=Agentor,proto3" json:"Agentor,omitempty"` //代理者id + ReplayCode string `protobuf:"bytes,11,opt,name=ReplayCode,proto3" json:"ReplayCode,omitempty"` //回放码 + Params []int32 `protobuf:"varint,12,rep,packed,name=Params,proto3" json:"Params,omitempty"` //场景参数 + PlayerIds []int32 `protobuf:"varint,13,rep,packed,name=PlayerIds,proto3" json:"PlayerIds,omitempty"` //所有玩家id + PlayerCnt int32 `protobuf:"varint,14,opt,name=PlayerCnt,proto3" json:"PlayerCnt,omitempty"` //玩家数量 + RobotCnt int32 `protobuf:"varint,15,opt,name=RobotCnt,proto3" json:"RobotCnt,omitempty"` //AI数量 + Start int32 `protobuf:"varint,16,opt,name=Start,proto3" json:"Start,omitempty"` //0.等待 1.游戏中 + CreateTime int64 `protobuf:"varint,17,opt,name=CreateTime,proto3" json:"CreateTime,omitempty"` //创建时间 + BaseScore int32 `protobuf:"varint,18,opt,name=BaseScore,proto3" json:"BaseScore,omitempty"` //底分 + RoomConfigId int32 `protobuf:"varint,19,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` //房间配置id + CurrRound int32 `protobuf:"varint,20,opt,name=CurrRound,proto3" json:"CurrRound,omitempty"` //当前局数 + MaxRound int32 `protobuf:"varint,21,opt,name=MaxRound,proto3" json:"MaxRound,omitempty"` //最大局数 + Password string `protobuf:"bytes,22,opt,name=Password,proto3" json:"Password,omitempty"` // 密码 + CostType int32 `protobuf:"varint,23,opt,name=CostType,proto3" json:"CostType,omitempty"` // 付费方式 1房主 2AA + Voice int32 `protobuf:"varint,24,opt,name=Voice,proto3" json:"Voice,omitempty"` // 语音开关 1开启 } func (x *RoomInfo) Reset() { @@ -2082,6 +2088,48 @@ func (x *RoomInfo) GetBaseScore() int32 { return 0 } +func (x *RoomInfo) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *RoomInfo) GetCurrRound() int32 { + if x != nil { + return x.CurrRound + } + return 0 +} + +func (x *RoomInfo) GetMaxRound() int32 { + if x != nil { + return x.MaxRound + } + return 0 +} + +func (x *RoomInfo) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +func (x *RoomInfo) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *RoomInfo) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + type PlayerSingleAdjust struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -8888,7 +8936,7 @@ var file_common_proto_rawDesc = []byte{ 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0xfa, 0x03, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, + 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0xa6, 0x05, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, @@ -8920,943 +8968,954 @@ var file_common_proto_rawDesc = []byte{ 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x22, 0xb4, 0x04, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, - 0x75, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, - 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x42, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x16, 0x0a, - 0x06, 0x42, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x42, - 0x65, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, - 0x6f, 0x73, 0x65, 0x4d, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x42, 0x61, - 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x6f, 0x73, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x42, - 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x4d, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x4d, 0x69, 0x6e, 0x12, - 0x18, 0x0a, 0x07, 0x43, 0x61, 0x72, 0x64, 0x4d, 0x69, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x43, 0x61, 0x72, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x61, 0x72, - 0x64, 0x4d, 0x61, 0x78, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x61, 0x72, 0x64, - 0x4d, 0x61, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, - 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x0a, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x72, 0x76, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x72, 0x76, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x53, 0x72, 0x76, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x53, 0x72, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0xfd, 0x04, 0x0a, 0x0f, 0x43, 0x6f, 0x69, - 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x49, 0x6e, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x49, 0x6e, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, - 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, - 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x51, 0x75, 0x44, 0x75, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x51, 0x75, 0x44, 0x75, - 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, - 0x0a, 0x0c, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, - 0x61, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, - 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, - 0x73, 0x4d, 0x61, 0x78, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x52, 0x61, - 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, - 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x6f, - 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x43, - 0x6f, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x74, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x74, 0x72, 0x6c, - 0x52, 0x61, 0x74, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x74, 0x72, 0x6c, - 0x52, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x4e, 0x6f, 0x76, 0x69, - 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x49, - 0x6e, 0x69, 0x74, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, - 0x0a, 0x0f, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb5, 0x02, 0x0a, 0x0b, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x72, 0x63, 0x53, 0x6e, 0x69, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x72, 0x63, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x44, 0x65, 0x73, 0x74, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x44, 0x65, 0x73, 0x74, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x47, 0x69, 0x66, 0x74, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x47, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x69, 0x66, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x69, 0x66, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x22, 0xf5, 0x02, 0x0a, 0x0d, 0x48, 0x6f, 0x72, 0x73, 0x65, 0x52, 0x61, 0x63, 0x65, 0x4c, 0x61, - 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, - 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, - 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x73, - 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x73, 0x67, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x0d, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x53, 0x74, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x53, 0x74, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x63, 0x22, 0x39, 0x0a, 0x0d, 0x4f, 0x6e, 0x6c, 0x69, - 0x6e, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x43, 0x6e, 0x74, 0x22, 0xe5, 0x02, 0x0a, 0x0c, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, - 0x12, 0x2a, 0x0a, 0x10, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, - 0x65, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x41, 0x6e, 0x64, 0x72, - 0x6f, 0x69, 0x64, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, - 0x49, 0x6f, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x49, 0x6f, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, - 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x44, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4f, - 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x13, - 0x54, 0x6f, 0x64, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x54, 0x6f, 0x64, 0x61, 0x79, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x36, - 0x0a, 0x16, 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, - 0x53, 0x65, 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6e, 0x74, - 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x9a, 0x03, 0x0a, 0x0c, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x43, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6d, 0x67, 0x55, - 0x72, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, - 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x49, 0x73, 0x4c, 0x6f, 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, - 0x4c, 0x6f, 0x6f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x58, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, - 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, - 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, - 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x22, 0x9b, 0x04, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, - 0x68, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x45, 0x78, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x45, 0x78, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x56, 0x69, 0x70, 0x44, 0x61, - 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0e, 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x2c, 0x0a, 0x11, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4e, 0x6f, 0x74, 0x56, - 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x22, 0x0a, - 0x0c, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x4e, 0x6f, 0x74, 0x56, - 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, - 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, - 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x54, 0x65, 0x6c, 0x44, 0x61, - 0x74, 0x61, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x07, 0x54, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x45, 0x0a, 0x0d, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x60, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x4a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4a, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x73, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, - 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, - 0x6f, 0x70, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2a, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, - 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x22, 0x6c, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x83, - 0x05, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x41, - 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x41, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x6c, 0x69, 0x6e, 0x67, - 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6f, 0x6f, 0x6c, - 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x18, 0x0a, - 0x07, 0x41, 0x64, 0x64, 0x41, 0x72, 0x65, 0x61, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, - 0x41, 0x64, 0x64, 0x41, 0x72, 0x65, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x43, 0x6f, 0x73, 0x74, 0x41, 0x72, 0x65, 0x61, 0x18, 0x11, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x08, 0x43, 0x6f, 0x73, 0x74, 0x41, 0x72, 0x65, 0x61, 0x12, 0x31, 0x0a, 0x05, 0x41, 0x77, 0x61, - 0x72, 0x64, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x69, - 0x6f, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x18, - 0x0a, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x46, 0x69, 0x72, 0x73, - 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x46, - 0x69, 0x72, 0x73, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x0c, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, - 0x53, 0x68, 0x6f, 0x70, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x50, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x74, - 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x49, 0x74, 0x65, - 0x6d, 0x4e, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x0e, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, - 0x6f, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x44, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x44, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb1, 0x07, 0x0a, 0x0d, - 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x65, 0x62, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x75, 0x6d, 0x65, 0x62, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x2c, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x05, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, - 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x53, 0x69, 0x67, - 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x53, - 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, - 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x38, 0x0a, 0x0e, 0x53, 0x69, 0x67, - 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x49, - 0x74, 0x65, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x12, - 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x48, 0x4d, 0x53, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x4d, 0x53, 0x12, 0x28, 0x0a, - 0x0f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x48, 0x4d, 0x53, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, - 0x65, 0x45, 0x6e, 0x64, 0x48, 0x4d, 0x53, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x10, 0x20, 0x03, 0x28, 0x03, 0x52, - 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x41, 0x77, 0x61, 0x72, 0x64, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x75, 0x6c, - 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, - 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x18, 0x19, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x41, 0x75, 0x64, 0x69, 0x65, - 0x6e, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0e, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, - 0x5a, 0x0a, 0x11, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x61, 0x6d, 0x65, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x5b, 0x0a, 0x0d, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x22, 0x64, 0x0a, 0x0b, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, - 0x07, 0x49, 0x74, 0x65, 0x6d, 0x5f, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, - 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x27, - 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, - 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, - 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x52, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x52, - 0x61, 0x74, 0x65, 0x22, 0xba, 0x01, 0x0a, 0x18, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, - 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x30, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, - 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, - 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, - 0x74, 0x65, 0x52, 0x08, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x22, 0x61, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, - 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, - 0x12, 0x31, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, - 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, - 0x61, 0x74, 0x65, 0x22, 0x48, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, - 0x32, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, - 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0xc9, 0x02, - 0x0a, 0x10, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, - 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x44, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, - 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, - 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, - 0x70, 0x44, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, - 0x74, 0x65, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x52, 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x12, - 0x44, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x52, 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, - 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, - 0x32, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, - 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, 0x65, 0x22, 0x78, 0x0a, 0x14, 0x57, 0x65, 0x6c, - 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, - 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x22, 0xdb, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, - 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, - 0x69, 0x63, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x12, 0x1a, 0x0a, 0x08, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, - 0x5f, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x64, 0x22, 0xa3, 0x01, 0x0a, 0x17, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x42, 0x6c, 0x69, - 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, - 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x4d, 0x69, 0x6e, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x0c, 0x57, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x74, - 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x49, - 0x74, 0x65, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x49, 0x50, 0x45, 0x58, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x56, 0x49, 0x50, 0x45, 0x58, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, - 0x73, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, - 0x75, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x32, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x8d, 0x01, 0x0a, 0x17, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, - 0x50, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, - 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, 0x52, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x72, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, + 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x16, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, + 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x22, 0xb4, + 0x04, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, + 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, 0x63, - 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x22, - 0xa8, 0x01, 0x0a, 0x1c, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x6f, 0x75, 0x73, 0x50, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, - 0x70, 0x72, 0x65, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, - 0x0a, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, - 0x79, 0x63, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x22, 0xa2, 0x07, 0x0a, 0x06, 0x56, - 0x49, 0x50, 0x63, 0x66, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, - 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x56, 0x69, 0x70, 0x45, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x69, 0x70, - 0x45, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x33, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x34, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x35, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x36, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, - 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, - 0x65, 0x38, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, - 0x69, 0x6e, 0x65, 0x49, 0x44, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x68, 0x6f, 0x70, 0x49, 0x64, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, - 0x37, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, - 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, - 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, - 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, + 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x06, 0x42, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x65, 0x74, + 0x4d, 0x61, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x42, 0x65, 0x74, 0x4d, 0x61, + 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x6f, 0x73, 0x65, 0x4d, + 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, + 0x4c, 0x6f, 0x73, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x42, 0x61, 0x6e, 0x6b, 0x65, + 0x72, 0x57, 0x69, 0x6e, 0x4d, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x42, + 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x4d, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x43, + 0x61, 0x72, 0x64, 0x4d, 0x69, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x61, + 0x72, 0x64, 0x4d, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x78, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x78, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x57, + 0x69, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, + 0x6e, 0x52, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x72, 0x76, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x72, 0x76, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x72, + 0x76, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x72, 0x76, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4e, 0x75, 0x6d, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4e, 0x75, 0x6d, + 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x44, 0x61, 0x74, 0x61, 0x22, 0xfd, 0x04, 0x0a, 0x0f, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, + 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x6e, + 0x69, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x49, + 0x6e, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x6f, 0x77, 0x65, + 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x4c, 0x6f, + 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, 0x70, 0x65, + 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x55, 0x70, + 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x51, 0x75, 0x44, 0x75, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x51, 0x75, 0x44, 0x75, 0x12, 0x1c, 0x0a, 0x09, + 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x55, 0x70, + 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x1c, + 0x0a, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, + 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, + 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x52, 0x61, 0x74, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x6f, 0x69, 0x6e, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x43, 0x6f, 0x69, 0x6e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x50, 0x6f, + 0x6f, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, + 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x74, 0x72, 0x6c, 0x52, 0x61, 0x74, 0x65, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x74, 0x72, 0x6c, 0x52, 0x61, 0x74, 0x65, + 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x4e, + 0x6f, 0x76, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x4e, 0x6f, + 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x14, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0f, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb5, 0x02, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, + 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x53, 0x72, 0x63, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x53, 0x72, 0x63, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x65, + 0x73, 0x74, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x65, + 0x73, 0x74, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x69, + 0x66, 0x74, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x47, 0x69, 0x66, 0x74, + 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x69, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x69, 0x66, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xf5, 0x02, 0x0a, + 0x0d, 0x48, 0x6f, 0x72, 0x73, 0x65, 0x52, 0x61, 0x63, 0x65, 0x4c, 0x61, 0x6d, 0x70, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, + 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x6f, + 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x46, 0x6f, 0x6f, 0x74, + 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x72, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x6e, + 0x64, 0x53, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x74, 0x61, 0x6e, + 0x64, 0x53, 0x65, 0x63, 0x22, 0x39, 0x0a, 0x0d, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x61, + 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x22, + 0xe5, 0x02, 0x0a, 0x0c, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, + 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x4f, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x6f, 0x73, 0x4f, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x49, 0x6f, 0x73, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, + 0x44, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0d, 0x44, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4f, 0x6e, 0x52, 0x6f, 0x6f, + 0x6d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x54, 0x6f, 0x64, 0x61, + 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x54, 0x6f, 0x64, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x53, 0x65, + 0x76, 0x65, 0x6e, 0x44, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, + 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x53, 0x65, 0x76, 0x65, + 0x6e, 0x44, 0x61, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, + 0x6e, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4f, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6e, 0x74, 0x52, 0x09, 0x47, 0x61, + 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x9a, 0x03, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, + 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x49, 0x6d, 0x67, 0x55, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, + 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x4c, 0x6f, + 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x4c, 0x6f, 0x6f, 0x70, + 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x4c, 0x6f, 0x6f, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, + 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x55, 0x72, 0x6c, 0x22, 0x58, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, + 0x74, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x04, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x9b, + 0x04, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x12, + 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x44, + 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x2c, 0x0a, 0x06, 0x45, 0x78, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x45, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, + 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x56, 0x69, 0x70, + 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x4e, + 0x6f, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x44, 0x61, + 0x79, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x56, 0x69, 0x70, + 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, + 0x0f, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x4e, 0x6f, 0x74, 0x56, 0x69, 0x70, 0x53, 0x68, + 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x54, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x11, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, + 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x54, 0x65, 0x6c, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x12, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x45, 0x0a, 0x0d, + 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, + 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x55, 0x72, 0x6c, 0x22, 0x60, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4a, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4a, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x43, 0x61, 0x73, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x52, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x2a, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x57, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6c, 0x0a, 0x0a, + 0x53, 0x68, 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, + 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x68, + 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x83, 0x05, 0x0a, 0x08, 0x49, + 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x50, + 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x69, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x50, 0x69, 0x63, 0x74, + 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x41, 0x64, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x41, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6f, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6f, 0x6f, 0x6c, 0x69, 0x6e, 0x67, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x0d, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, + 0x41, 0x72, 0x65, 0x61, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x41, 0x64, 0x64, 0x41, + 0x72, 0x65, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x43, + 0x6f, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, + 0x74, 0x41, 0x72, 0x65, 0x61, 0x18, 0x11, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, + 0x74, 0x41, 0x72, 0x65, 0x61, 0x12, 0x31, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x12, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, + 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x56, 0x69, 0x70, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x56, 0x69, 0x70, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x14, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, 0x6e, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x46, 0x69, 0x72, 0x73, 0x74, 0x53, 0x77, 0x69, + 0x74, 0x63, 0x68, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x46, 0x69, 0x72, 0x73, 0x74, + 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x70, 0x0a, 0x0e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x22, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x52, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, - 0x6f, 0x22, 0x95, 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, - 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, - 0x65, 0x61, 0x6c, 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, - 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, - 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x57, 0x0a, 0x0b, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x08, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x22, 0x64, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x27, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, - 0x74, 0x65, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x75, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x73, - 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x63, 0x66, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x05, - 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, 0x65, - 0x62, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x22, 0x50, 0x0a, 0x0c, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x24, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x68, 0x6f, 0x70, + 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x22, 0x50, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, + 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x6e, + 0x66, 0x6f, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x55, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x6f, 0x77, + 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x44, 0x6f, + 0x77, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb1, 0x07, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x75, + 0x6d, 0x65, 0x62, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x4e, 0x75, 0x6d, 0x65, 0x62, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x12, 0x2c, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x6e, 0x66, 0x6f, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, + 0x26, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, + 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x75, + 0x70, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, + 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x38, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, + 0x6f, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x24, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, + 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x2c, 0x0a, 0x11, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x4d, 0x53, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, + 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x4d, 0x53, 0x12, 0x28, 0x0a, 0x0f, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, 0x48, 0x4d, 0x53, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x45, 0x6e, 0x64, + 0x48, 0x4d, 0x53, 0x12, 0x26, 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x10, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0e, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x54, + 0x69, 0x74, 0x6c, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x54, + 0x69, 0x74, 0x6c, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x53, 0x68, 0x6f, 0x77, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, + 0x74, 0x49, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x55, 0x73, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x1e, 0x0a, + 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x24, 0x0a, + 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x17, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4e, 0x75, 0x6d, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, + 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x41, 0x75, 0x64, + 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x5a, 0x0a, 0x11, 0x47, + 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, - 0xb4, 0x03, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, - 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x6f, - 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x51, 0x75, - 0x44, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x51, 0x75, 0x44, 0x75, 0x12, 0x1c, - 0x0a, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, - 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, - 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, - 0x0a, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, - 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x46, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x46, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x12, 0x1c, 0x0a, 0x09, - 0x46, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x46, 0x69, 0x67, 0x68, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, - 0x79, 0x55, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x79, 0x55, 0x70, - 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x50, 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x69, - 0x61, 0x6e, 0x48, 0x75, 0x52, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, - 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0xc8, 0x01, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x5b, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, + 0x72, 0x74, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x0d, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, - 0x6e, 0x48, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, - 0x75, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x69, 0x4b, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x50, 0x61, 0x69, 0x4b, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, - 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x12, - 0x20, 0x0a, 0x0b, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, - 0x61, 0x22, 0x4f, 0x0a, 0x19, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x50, 0x68, 0x6f, 0x6e, - 0x65, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x22, 0x4a, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x6d, 0x12, 0x29, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x64, 0x0a, 0x0b, + 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x47, + 0x72, 0x61, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x49, 0x74, 0x65, + 0x6d, 0x5f, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, + 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x44, + 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, + 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x52, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x74, 0x65, 0x22, + 0xba, 0x01, 0x0a, 0x18, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, + 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, + 0x0a, 0x08, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, + 0x65, 0x54, 0x75, 0x72, 0x6e, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x61, 0x74, 0x65, 0x52, 0x08, + 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x61, 0x0a, 0x10, + 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x79, 0x12, 0x31, 0x0a, 0x09, + 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, + 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x22, + 0x48, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0xc9, 0x02, 0x0a, 0x10, 0x57, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, + 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, + 0x61, 0x74, 0x65, 0x52, 0x04, 0x44, 0x61, 0x74, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x41, 0x64, 0x64, + 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, + 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, + 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, + 0x0a, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x12, 0x44, 0x0a, 0x10, 0x41, + 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, + 0x64, 0x64, 0x55, 0x70, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, + 0x10, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x47, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x32, 0x54, 0x79, 0x70, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0e, 0x41, 0x64, 0x64, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, + 0x32, 0x54, 0x79, 0x70, 0x65, 0x22, 0x78, 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, + 0x37, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x37, 0x53, 0x69, 0x67, + 0x6e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, + 0xdb, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, + 0x65, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x5f, 0x49, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xa3, 0x01, + 0x0a, 0x17, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, + 0x78, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x78, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x4d, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x69, + 0x6e, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x0c, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, + 0x70, 0x72, 0x65, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x14, 0x0a, 0x05, 0x56, 0x49, 0x50, 0x45, 0x58, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x56, 0x49, 0x50, 0x45, 0x58, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x31, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, + 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x12, + 0x1a, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8d, 0x01, 0x0a, 0x17, + 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x50, 0x61, 0x79, 0x44, + 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, + 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, 0x52, 0x04, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, + 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x22, 0xa8, 0x01, 0x0a, 0x1c, + 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x6f, 0x75, + 0x73, 0x50, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, + 0x61, 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x53, 0x70, 0x72, 0x65, 0x65, + 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x79, + 0x63, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x79, 0x63, 0x6c, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x22, 0xa2, 0x07, 0x0a, 0x06, 0x56, 0x49, 0x50, 0x63, 0x66, + 0x67, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x56, 0x69, 0x70, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, + 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x69, 0x70, 0x45, + 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x69, 0x70, 0x45, 0x78, 0x12, 0x14, + 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x31, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x31, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x32, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x33, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x33, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x34, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x35, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x35, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x36, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x36, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x37, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x37, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x50, + 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x38, 0x12, 0x28, + 0x0a, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x49, + 0x44, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4f, + 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, + 0x49, 0x64, 0x32, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, + 0x64, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x37, 0x12, 0x26, 0x0a, 0x0e, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x72, 0x65, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, + 0x65, 0x39, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, + 0x65, 0x67, 0x65, 0x39, 0x1a, 0x38, 0x0a, 0x0a, 0x41, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, + 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x31, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, + 0x0f, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, + 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x70, 0x0a, 0x0e, 0x56, + 0x49, 0x50, 0x63, 0x66, 0x67, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x22, 0x0a, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x49, 0x50, 0x63, 0x66, 0x67, 0x52, 0x04, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, + 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x22, 0x95, 0x01, + 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, + 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, + 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x57, + 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x57, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x53, 0x77, + 0x69, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x08, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x64, + 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x49, + 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, + 0x49, 0x74, 0x65, 0x6d, 0x22, 0x75, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, + 0x6b, 0x63, 0x66, 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, + 0x2e, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x22, 0xb4, 0x03, 0x0a, 0x0a, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x70, 0x70, 0x65, 0x72, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x55, 0x70, 0x70, 0x65, + 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x4c, 0x6f, 0x77, 0x65, + 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x51, 0x75, 0x44, 0x75, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x51, 0x75, 0x44, 0x75, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, + 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x55, + 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x55, 0x70, 0x70, 0x65, + 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x55, 0x70, 0x70, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x1c, 0x0a, 0x09, + 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x6f, + 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x4f, 0x64, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x18, + 0x0a, 0x07, 0x46, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x46, 0x69, 0x67, 0x68, 0x74, 0x55, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x69, 0x67, 0x68, + 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x46, 0x69, 0x67, + 0x68, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x79, 0x55, 0x70, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x79, 0x55, 0x70, 0x12, 0x18, 0x0a, 0x07, + 0x50, 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, + 0x61, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, + 0x52, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x54, 0x69, 0x61, 0x6e, + 0x48, 0x75, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x10, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x77, 0x69, 0x74, + 0x63, 0x68, 0x22, 0xc8, 0x01, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x53, + 0x77, 0x69, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x12, 0x14, 0x0a, + 0x05, 0x50, 0x61, 0x69, 0x4b, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, + 0x69, 0x4b, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x46, + 0x65, 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x47, 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x47, 0x6f, 0x6f, 0x64, 0x46, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x22, 0x4f, 0x0a, + 0x19, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4c, 0x6f, 0x74, + 0x74, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x67, - 0x0a, 0x13, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0x8e, - 0x03, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1c, - 0x0a, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0d, - 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, - 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, - 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x50, 0x61, 0x79, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x07, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, - 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x73, 0x32, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, - 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x73, 0x33, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x91, 0x01, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, - 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x31, 0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, - 0x72, 0x64, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, - 0x72, 0x64, 0x32, 0x22, 0xea, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, - 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, - 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, - 0x6f, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, - 0x22, 0x64, 0x0a, 0x10, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x06, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, - 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x44, 0x0a, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0a, 0x52, - 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, - 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x92, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x50, 0x65, 0x72, - 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x44, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x44, - 0x61, 0x79, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, - 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, - 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, - 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, - 0x65, 0x22, 0x68, 0x0a, 0x15, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, - 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x3d, 0x0a, 0x09, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x12, 0x44, - 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x49, - 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, - 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x4d, - 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, - 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, - 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, - 0x22, 0x70, 0x0a, 0x14, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, - 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, - 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, - 0x74, 0x61, 0x22, 0x53, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x05, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x52, 0x61, 0x6e, 0x6b, - 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, - 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, - 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x61, 0x6e, 0x6b, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x4a, + 0x0a, 0x14, 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x67, 0x0a, 0x13, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, + 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, + 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0x8e, 0x03, 0x0a, 0x0f, 0x41, + 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x69, + 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x42, + 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x41, + 0x0a, 0x08, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x73, 0x31, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x31, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x32, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, + 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x32, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, + 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x1a, 0x3b, + 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x91, 0x01, 0x0a, 0x11, + 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x31, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x31, 0x12, 0x28, 0x0a, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, - 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0xb3, 0x01, - 0x0a, 0x0c, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, - 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x54, 0x75, 0x72, 0x6e, 0x4f, 0x66, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, - 0x75, 0x72, 0x6e, 0x4f, 0x66, 0x66, 0x12, 0x2b, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, - 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, - 0x61, 0x72, 0x64, 0x22, 0x56, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x43, + 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x41, 0x77, 0x61, 0x72, 0x64, 0x32, 0x22, + 0xea, 0x01, 0x0a, 0x14, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, + 0x12, 0x24, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, + 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x49, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, + 0x0a, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x64, 0x0a, 0x10, + 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x45, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x44, 0x0a, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x52, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x22, 0x92, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x28, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xed, 0x01, 0x0a, 0x09, - 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x35, 0x0a, 0x06, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x2e, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, - 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, - 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x1a, 0x39, 0x0a, 0x0b, 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa6, 0x02, 0x0a, 0x08, - 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, - 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x55, 0x6e, - 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, - 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x2e, - 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x1c, 0x0a, - 0x09, 0x49, 0x73, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x49, 0x73, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, - 0x6b, 0x69, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x50, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x26, - 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x44, + 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x44, 0x61, 0x79, 0x73, 0x12, + 0x35, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, + 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x47, 0x72, 0x61, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x47, 0x72, + 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x64, 0x64, 0x72, 0x61, 0x74, 0x65, 0x22, 0x68, 0x0a, + 0x15, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, + 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, 0x3d, 0x0a, 0x09, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xd3, 0x01, 0x0a, 0x12, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, + 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, + 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, + 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, + 0x4e, 0x75, 0x6d, 0x12, 0x37, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x69, + 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x70, 0x0a, 0x14, + 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x3c, 0x0a, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x44, + 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x0b, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x22, 0x53, + 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x29, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, + 0x65, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x22, 0xb3, 0x01, 0x0a, 0x0c, 0x52, 0x61, + 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x75, 0x72, 0x6e, + 0x4f, 0x66, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, 0x75, 0x72, 0x6e, 0x4f, + 0x66, 0x66, 0x12, 0x2b, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x22, + 0x56, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x28, 0x0a, + 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xed, 0x01, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6e, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x35, 0x0a, 0x06, 0x55, + 0x70, 0x49, 0x74, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x55, + 0x70, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x55, 0x70, 0x49, 0x74, + 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, + 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x39, 0x0a, 0x0b, + 0x55, 0x70, 0x49, 0x74, 0x65, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa6, 0x02, 0x0a, 0x08, 0x53, 0x6b, 0x69, 0x6e, + 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, + 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x55, 0x6e, + 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x49, 0x73, + 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x6b, 0x69, 0x6c, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x6b, 0x69, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x06, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x73, + 0x1a, 0x3e, 0x0a, 0x10, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x50, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x26, 0x0a, 0x05, 0x49, 0x74, + 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4c, 0x6f, 0x67, 0x12, 0x3c, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, + 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x65, 0x62, 0x61, + 0x70, 0x69, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, + 0x67, 0x22, 0x70, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, + 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, + 0x64, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x4c, 0x6f, 0x67, 0x22, 0x60, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, + 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x10, 0x0a, + 0x03, 0x55, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x12, + 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, + 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x0b, 0x47, 0x75, 0x69, 0x64, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x02, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x22, 0x4f, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x4c, 0x0a, 0x0c, 0x53, 0x70, 0x69, 0x72, + 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0xcc, 0x03, 0x0a, 0x0a, 0x52, + 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, - 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x12, 0x3c, 0x0a, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, - 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, - 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x41, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, - 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x22, 0x70, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, - 0x67, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, - 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, - 0x67, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x41, - 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x22, 0x60, 0x0a, 0x0c, 0x41, 0x77, 0x61, 0x72, 0x64, - 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, - 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, - 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x10, 0x41, 0x6e, - 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, - 0x65, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x0b, - 0x47, 0x75, 0x69, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6b, 0x69, 0x70, 0x22, 0x4f, 0x0a, 0x0d, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x4c, 0x0a, 0x0c, - 0x53, 0x70, 0x69, 0x72, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x72, 0x0a, 0x08, 0x52, 0x6f, - 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x22, 0xcc, - 0x03, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, - 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, - 0x64, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, - 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, - 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, - 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, - 0x6f, 0x69, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x42, 0x26, 0x5a, - 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x4f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, + 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, + 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, + 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, + 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x65, 0x65, 0x64, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, + 0x65, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, + 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, + 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x52, 0x49, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, + 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, + 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto index f02ef15..81526a1 100644 --- a/protocol/webapi/common.proto +++ b/protocol/webapi/common.proto @@ -225,12 +225,12 @@ message ModInfo { message RoomInfo{ string Platform = 1; - int32 SceneId = 2;//场景id + int32 SceneId = 2;//房间id int32 GameId = 3;//游戏id int32 GameMode = 4;//游戏模式 int32 SceneMode = 5;//房间模式,参考common.SceneMode_XXX int32 GroupId = 6;//组id - int32 GameFreeId = 7; + int32 GameFreeId = 7; // 场次id int32 SrvId = 8;//服务器id int32 Creator = 9;//创建者账号id int32 Agentor = 10;//代理者id @@ -242,7 +242,14 @@ message RoomInfo{ int32 Start = 16;//0.等待 1.游戏中 int64 CreateTime = 17;//创建时间 int32 BaseScore = 18;//底分 + int32 RoomConfigId = 19;//房间配置id + int32 CurrRound = 20;//当前局数 + int32 MaxRound = 21;//最大局数 + string Password = 22;// 密码 + int32 CostType = 23;// 付费方式 1房主 2AA + int32 Voice = 24;// 语音开关 1开启 } + message PlayerSingleAdjust{ string Id = 1; string Platform = 2; diff --git a/protocol/webapi/webapi.pb.go b/protocol/webapi/webapi.pb.go index 3182d25..2480f77 100644 --- a/protocol/webapi/webapi.pb.go +++ b/protocol/webapi/webapi.pb.go @@ -37,6 +37,7 @@ const ( TagCode_TelExist TagCode = 9 // 手机号已存在 TagCode_AccountNotFound TagCode = 10 // 账号未找到 TagCode_TelNotBind TagCode = 11 // 手机号未绑定 + TagCode_NotFound TagCode = 12 // 未找到 ) // Enum value maps for TagCode. @@ -54,6 +55,7 @@ var ( 9: "TelExist", 10: "AccountNotFound", 11: "TelNotBind", + 12: "NotFound", } TagCode_value = map[string]int32{ "UNKNOWN": 0, @@ -68,6 +70,7 @@ var ( "TelExist": 9, "AccountNotFound": 10, "TelNotBind": 11, + "NotFound": 12, } ) @@ -1804,17 +1807,19 @@ type ASListRoom struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` - GameMode int32 `protobuf:"varint,3,opt,name=GameMode,proto3" json:"GameMode,omitempty"` - GroupId int32 `protobuf:"varint,4,opt,name=GroupId,proto3" json:"GroupId,omitempty"` - SnId int32 `protobuf:"varint,5,opt,name=SnId,proto3" json:"SnId,omitempty"` - SceneId int32 `protobuf:"varint,6,opt,name=SceneId,proto3" json:"SceneId,omitempty"` - PageNo int32 `protobuf:"varint,7,opt,name=PageNo,proto3" json:"PageNo,omitempty"` - PageSize int32 `protobuf:"varint,8,opt,name=PageSize,proto3" json:"PageSize,omitempty"` - ClubId int32 `protobuf:"varint,9,opt,name=ClubId,proto3" json:"ClubId,omitempty"` - RoomType int32 `protobuf:"varint,10,opt,name=RoomType,proto3" json:"RoomType,omitempty"` //roomType=0所有房间,roomType=1俱乐部房间,roomType=2个人房间 - GamefreeId int32 `protobuf:"varint,11,opt,name=GamefreeId,proto3" json:"GamefreeId,omitempty"` + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` + GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` + GameMode int32 `protobuf:"varint,3,opt,name=GameMode,proto3" json:"GameMode,omitempty"` + GroupId int32 `protobuf:"varint,4,opt,name=GroupId,proto3" json:"GroupId,omitempty"` + SnId int32 `protobuf:"varint,5,opt,name=SnId,proto3" json:"SnId,omitempty"` + SceneId int32 `protobuf:"varint,6,opt,name=SceneId,proto3" json:"SceneId,omitempty"` + PageNo int32 `protobuf:"varint,7,opt,name=PageNo,proto3" json:"PageNo,omitempty"` + PageSize int32 `protobuf:"varint,8,opt,name=PageSize,proto3" json:"PageSize,omitempty"` + ClubId int32 `protobuf:"varint,9,opt,name=ClubId,proto3" json:"ClubId,omitempty"` + RoomType int32 `protobuf:"varint,10,opt,name=RoomType,proto3" json:"RoomType,omitempty"` //roomType=0所有房间,roomType=1俱乐部房间,roomType=2个人房间 + GamefreeId int32 `protobuf:"varint,11,opt,name=GamefreeId,proto3" json:"GamefreeId,omitempty"` + IsCustom int32 `protobuf:"varint,12,opt,name=IsCustom,proto3" json:"IsCustom,omitempty"` // 房卡场 1是 + RoomConfigId int32 `protobuf:"varint,13,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` // 房间玩法id } func (x *ASListRoom) Reset() { @@ -1926,6 +1931,20 @@ func (x *ASListRoom) GetGamefreeId() int32 { return 0 } +func (x *ASListRoom) GetIsCustom() int32 { + if x != nil { + return x.IsCustom + } + return 0 +} + +func (x *ASListRoom) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + type SAListRoom struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -9153,6 +9172,196 @@ func (x *WindowsInfo) GetGainNum() int32 { return 0 } +// 获取对局详情 /api/game/room_info +type ASRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` // 房间id +} + +func (x *ASRoomInfo) Reset() { + *x = ASRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_webapi_proto_msgTypes[134] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ASRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ASRoomInfo) ProtoMessage() {} + +func (x *ASRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_webapi_proto_msgTypes[134] + 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 ASRoomInfo.ProtoReflect.Descriptor instead. +func (*ASRoomInfo) Descriptor() ([]byte, []int) { + return file_webapi_proto_rawDescGZIP(), []int{134} +} + +func (x *ASRoomInfo) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +type RoundInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Round int32 `protobuf:"varint,1,opt,name=Round,proto3" json:"Round,omitempty"` //局数 + Ts int64 `protobuf:"varint,2,opt,name=Ts,proto3" json:"Ts,omitempty"` //结束时间 + Score []int64 `protobuf:"varint,3,rep,packed,name=Score,proto3" json:"Score,omitempty"` //分数 + LogId string `protobuf:"bytes,4,opt,name=LogId,proto3" json:"LogId,omitempty"` // 牌局记录id +} + +func (x *RoundInfo) Reset() { + *x = RoundInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_webapi_proto_msgTypes[135] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoundInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoundInfo) ProtoMessage() {} + +func (x *RoundInfo) ProtoReflect() protoreflect.Message { + mi := &file_webapi_proto_msgTypes[135] + 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 RoundInfo.ProtoReflect.Descriptor instead. +func (*RoundInfo) Descriptor() ([]byte, []int) { + return file_webapi_proto_rawDescGZIP(), []int{135} +} + +func (x *RoundInfo) GetRound() int32 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *RoundInfo) GetTs() int64 { + if x != nil { + return x.Ts + } + return 0 +} + +func (x *RoundInfo) GetScore() []int64 { + if x != nil { + return x.Score + } + return nil +} + +func (x *RoundInfo) GetLogId() string { + if x != nil { + return x.LogId + } + return "" +} + +type SARoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Tag TagCode `protobuf:"varint,1,opt,name=Tag,proto3,enum=webapi.TagCode" json:"Tag,omitempty"` //错误码 + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` //错误信息 + SnId []int32 `protobuf:"varint,3,rep,packed,name=SnId,proto3" json:"SnId,omitempty"` // 玩家id + List []*RoundInfo `protobuf:"bytes,4,rep,name=List,proto3" json:"List,omitempty"` // 每局结算 +} + +func (x *SARoomInfo) Reset() { + *x = SARoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_webapi_proto_msgTypes[136] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SARoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SARoomInfo) ProtoMessage() {} + +func (x *SARoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_webapi_proto_msgTypes[136] + 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 SARoomInfo.ProtoReflect.Descriptor instead. +func (*SARoomInfo) Descriptor() ([]byte, []int) { + return file_webapi_proto_rawDescGZIP(), []int{136} +} + +func (x *SARoomInfo) GetTag() TagCode { + if x != nil { + return x.Tag + } + return TagCode_UNKNOWN +} + +func (x *SARoomInfo) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *SARoomInfo) GetSnId() []int32 { + if x != nil { + return x.SnId + } + return nil +} + +func (x *SARoomInfo) GetList() []*RoundInfo { + if x != nil { + return x.List + } + return nil +} + var File_webapi_proto protoreflect.FileDescriptor var file_webapi_proto_rawDesc = []byte{ @@ -9344,7 +9553,7 @@ var file_webapi_proto_rawDesc = []byte{ 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x12, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xac, 0x02, 0x0a, 0x0a, 0x41, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xec, 0x02, 0x0a, 0x0a, 0x41, 0x53, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, @@ -9363,7 +9572,11 @@ var file_webapi_proto_rawDesc = []byte{ 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x66, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, - 0x61, 0x6d, 0x65, 0x66, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0xc3, 0x01, 0x0a, 0x0a, 0x53, 0x41, + 0x61, 0x6d, 0x65, 0x66, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x49, 0x73, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, + 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x22, 0xc3, 0x01, 0x0a, 0x0a, 0x53, 0x41, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, @@ -10141,23 +10354,40 @@ var file_webapi_proto_rawDesc = []byte{ 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x2a, 0xce, 0x01, 0x0a, - 0x07, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, - 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0e, - 0x0a, 0x0a, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x14, - 0x0a, 0x10, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, - 0x4f, 0x52, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, - 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, - 0x50, 0x6c, 0x61, 0x79, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, - 0x09, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x65, - 0x6c, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0a, 0x12, 0x0e, 0x0a, - 0x0a, 0x54, 0x65, 0x6c, 0x4e, 0x6f, 0x74, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x0b, 0x42, 0x26, 0x5a, - 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, - 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x22, 0x24, 0x0a, 0x0a, + 0x41, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, + 0x6f, 0x67, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, + 0x64, 0x22, 0x7c, 0x0a, 0x0a, 0x53, 0x41, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, + 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, + 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, + 0xdc, 0x01, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, + 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x03, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x44, + 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4a, + 0x59, 0x42, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, + 0x11, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x58, 0x49, 0x53, 0x54, + 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x08, 0x12, 0x0c, 0x0a, + 0x08, 0x54, 0x65, 0x6c, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0a, + 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x65, 0x6c, 0x4e, 0x6f, 0x74, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x0b, + 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0c, 0x42, 0x26, + 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -10173,7 +10403,7 @@ func file_webapi_proto_rawDescGZIP() []byte { } var file_webapi_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_webapi_proto_msgTypes = make([]protoimpl.MessageInfo, 134) +var file_webapi_proto_msgTypes = make([]protoimpl.MessageInfo, 137) var file_webapi_proto_goTypes = []interface{}{ (TagCode)(0), // 0: webapi.TagCode (*SAPlatformInfo)(nil), // 1: webapi.SAPlatformInfo @@ -10310,93 +10540,96 @@ var file_webapi_proto_goTypes = []interface{}{ (*ASPopUpWindowsConfig)(nil), // 132: webapi.ASPopUpWindowsConfig (*SAPopUpWindowsConfig)(nil), // 133: webapi.SAPopUpWindowsConfig (*WindowsInfo)(nil), // 134: webapi.WindowsInfo - (*Platform)(nil), // 135: webapi.Platform - (*PlatformGameConfig)(nil), // 136: webapi.PlatformGameConfig - (*GameConfigGroup)(nil), // 137: webapi.GameConfigGroup - (*GameConfigGlobal)(nil), // 138: webapi.GameConfigGlobal - (*PlatformDbConfig)(nil), // 139: webapi.PlatformDbConfig - (*CoinPoolSetting)(nil), // 140: webapi.CoinPoolSetting - (*RoomInfo)(nil), // 141: webapi.RoomInfo - (*PlayerSingleAdjust)(nil), // 142: webapi.PlayerSingleAdjust - (*PlayerData)(nil), // 143: webapi.PlayerData - (*HorseRaceLamp)(nil), // 144: webapi.HorseRaceLamp - (*MessageInfo)(nil), // 145: webapi.MessageInfo - (*ServerInfo)(nil), // 146: webapi.ServerInfo - (*OnlineReport)(nil), // 147: webapi.OnlineReport - (*ItemInfo)(nil), // 148: webapi.ItemInfo - (*ExchangeShop)(nil), // 149: webapi.ExchangeShop - (*ShopWeight)(nil), // 150: webapi.ShopWeight + (*ASRoomInfo)(nil), // 135: webapi.ASRoomInfo + (*RoundInfo)(nil), // 136: webapi.RoundInfo + (*SARoomInfo)(nil), // 137: webapi.SARoomInfo + (*Platform)(nil), // 138: webapi.Platform + (*PlatformGameConfig)(nil), // 139: webapi.PlatformGameConfig + (*GameConfigGroup)(nil), // 140: webapi.GameConfigGroup + (*GameConfigGlobal)(nil), // 141: webapi.GameConfigGlobal + (*PlatformDbConfig)(nil), // 142: webapi.PlatformDbConfig + (*CoinPoolSetting)(nil), // 143: webapi.CoinPoolSetting + (*RoomInfo)(nil), // 144: webapi.RoomInfo + (*PlayerSingleAdjust)(nil), // 145: webapi.PlayerSingleAdjust + (*PlayerData)(nil), // 146: webapi.PlayerData + (*HorseRaceLamp)(nil), // 147: webapi.HorseRaceLamp + (*MessageInfo)(nil), // 148: webapi.MessageInfo + (*ServerInfo)(nil), // 149: webapi.ServerInfo + (*OnlineReport)(nil), // 150: webapi.OnlineReport + (*ItemInfo)(nil), // 151: webapi.ItemInfo + (*ExchangeShop)(nil), // 152: webapi.ExchangeShop + (*ShopWeight)(nil), // 153: webapi.ShopWeight } var file_webapi_proto_depIdxs = []int32{ 0, // 0: webapi.ASPlatformInfo.Tag:type_name -> webapi.TagCode - 135, // 1: webapi.ASPlatformInfo.Platforms:type_name -> webapi.Platform + 138, // 1: webapi.ASPlatformInfo.Platforms:type_name -> webapi.Platform 0, // 2: webapi.ASGameConfig.Tag:type_name -> webapi.TagCode - 136, // 3: webapi.ASGameConfig.Configs:type_name -> webapi.PlatformGameConfig + 139, // 3: webapi.ASGameConfig.Configs:type_name -> webapi.PlatformGameConfig 0, // 4: webapi.ASGameConfigGroup.Tag:type_name -> webapi.TagCode - 137, // 5: webapi.ASGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup + 140, // 5: webapi.ASGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup 0, // 6: webapi.ASGameConfigGlobal.Tag:type_name -> webapi.TagCode - 138, // 7: webapi.ASGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal + 141, // 7: webapi.ASGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal 0, // 8: webapi.ASDbConfig.Tag:type_name -> webapi.TagCode - 139, // 9: webapi.ASDbConfig.DbConfigs:type_name -> webapi.PlatformDbConfig - 135, // 10: webapi.ASUpdatePlatform.Platforms:type_name -> webapi.Platform + 142, // 9: webapi.ASDbConfig.DbConfigs:type_name -> webapi.PlatformDbConfig + 138, // 10: webapi.ASUpdatePlatform.Platforms:type_name -> webapi.Platform 0, // 11: webapi.SAUpdatePlatform.Tag:type_name -> webapi.TagCode - 138, // 12: webapi.ASUpdateGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal + 141, // 12: webapi.ASUpdateGameConfigGlobal.GameStatus:type_name -> webapi.GameConfigGlobal 0, // 13: webapi.SAUpdateGameConfigGlobal.Tag:type_name -> webapi.TagCode - 136, // 14: webapi.ASUpdateGameConfig.Config:type_name -> webapi.PlatformGameConfig + 139, // 14: webapi.ASUpdateGameConfig.Config:type_name -> webapi.PlatformGameConfig 0, // 15: webapi.SAUpdateGameConfig.Tag:type_name -> webapi.TagCode - 137, // 16: webapi.ASUpdateGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup + 140, // 16: webapi.ASUpdateGameConfigGroup.GameConfigGroup:type_name -> webapi.GameConfigGroup 0, // 17: webapi.SAUpdateGameConfigGroup.Tag:type_name -> webapi.TagCode 0, // 18: webapi.SAAddCoinById.Tag:type_name -> webapi.TagCode 0, // 19: webapi.SAResetGamePool.Tag:type_name -> webapi.TagCode - 140, // 20: webapi.ASUpdateGamePool.CoinPoolSetting:type_name -> webapi.CoinPoolSetting + 143, // 20: webapi.ASUpdateGamePool.CoinPoolSetting:type_name -> webapi.CoinPoolSetting 0, // 21: webapi.SAUpdateGamePool.Tag:type_name -> webapi.TagCode 0, // 22: webapi.SAQueryGamePoolByGameId.Tag:type_name -> webapi.TagCode - 140, // 23: webapi.SAQueryGamePoolByGameId.CoinPoolSetting:type_name -> webapi.CoinPoolSetting - 140, // 24: webapi.CoinPoolStatesInfo.CoinPoolSetting:type_name -> webapi.CoinPoolSetting + 143, // 23: webapi.SAQueryGamePoolByGameId.CoinPoolSetting:type_name -> webapi.CoinPoolSetting + 143, // 24: webapi.CoinPoolStatesInfo.CoinPoolSetting:type_name -> webapi.CoinPoolSetting 0, // 25: webapi.SAQueryAllGamePool.Tag:type_name -> webapi.TagCode 26, // 26: webapi.SAQueryAllGamePool.CoinPoolStatesInfo:type_name -> webapi.CoinPoolStatesInfo 0, // 27: webapi.SAListRoom.Tag:type_name -> webapi.TagCode - 141, // 28: webapi.SAListRoom.RoomInfo:type_name -> webapi.RoomInfo + 144, // 28: webapi.SAListRoom.RoomInfo:type_name -> webapi.RoomInfo 0, // 29: webapi.SAGetRoom.Tag:type_name -> webapi.TagCode - 141, // 30: webapi.SAGetRoom.RoomInfo:type_name -> webapi.RoomInfo + 144, // 30: webapi.SAGetRoom.RoomInfo:type_name -> webapi.RoomInfo 0, // 31: webapi.SADestroyRoom.Tag:type_name -> webapi.TagCode - 142, // 32: webapi.ASSinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust + 145, // 32: webapi.ASSinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust 0, // 33: webapi.SASinglePlayerAdjust.Tag:type_name -> webapi.TagCode - 142, // 34: webapi.SASinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust + 145, // 34: webapi.SASinglePlayerAdjust.PlayerSingleAdjust:type_name -> webapi.PlayerSingleAdjust 0, // 35: webapi.SAGetPlayerData.Tag:type_name -> webapi.TagCode - 143, // 36: webapi.SAGetPlayerData.PlayerData:type_name -> webapi.PlayerData + 146, // 36: webapi.SAGetPlayerData.PlayerData:type_name -> webapi.PlayerData 0, // 37: webapi.SAMorePlayerData.Tag:type_name -> webapi.TagCode - 143, // 38: webapi.SAMorePlayerData.PlayerData:type_name -> webapi.PlayerData + 146, // 38: webapi.SAMorePlayerData.PlayerData:type_name -> webapi.PlayerData 0, // 39: webapi.SAKickPlayer.Tag:type_name -> webapi.TagCode 42, // 40: webapi.ASUpdatePlayerElement.PlayerEleArgs:type_name -> webapi.PlayerEleArgs 0, // 41: webapi.SAUpdatePlayerElement.Tag:type_name -> webapi.TagCode 0, // 42: webapi.SAWhiteBlackControl.Tag:type_name -> webapi.TagCode 0, // 43: webapi.SAQueryHorseRaceLampList.Tag:type_name -> webapi.TagCode - 144, // 44: webapi.SAQueryHorseRaceLampList.HorseRaceLamp:type_name -> webapi.HorseRaceLamp + 147, // 44: webapi.SAQueryHorseRaceLampList.HorseRaceLamp:type_name -> webapi.HorseRaceLamp 0, // 45: webapi.SACreateHorseRaceLamp.Tag:type_name -> webapi.TagCode 0, // 46: webapi.SAGetHorseRaceLampById.Tag:type_name -> webapi.TagCode - 144, // 47: webapi.SAGetHorseRaceLampById.HorseRaceLamp:type_name -> webapi.HorseRaceLamp - 144, // 48: webapi.ASEditHorseRaceLamp.HorseRaceLamp:type_name -> webapi.HorseRaceLamp + 147, // 47: webapi.SAGetHorseRaceLampById.HorseRaceLamp:type_name -> webapi.HorseRaceLamp + 147, // 48: webapi.ASEditHorseRaceLamp.HorseRaceLamp:type_name -> webapi.HorseRaceLamp 0, // 49: webapi.SAEditHorseRaceLamp.Tag:type_name -> webapi.TagCode 0, // 50: webapi.SARemoveHorseRaceLampById.Tag:type_name -> webapi.TagCode 0, // 51: webapi.SABlackBySnId.Tag:type_name -> webapi.TagCode 0, // 52: webapi.SACreateShortMessage.Tag:type_name -> webapi.TagCode 0, // 53: webapi.SAQueryShortMessageList.Tag:type_name -> webapi.TagCode - 145, // 54: webapi.SAQueryShortMessageList.MessageInfo:type_name -> webapi.MessageInfo + 148, // 54: webapi.SAQueryShortMessageList.MessageInfo:type_name -> webapi.MessageInfo 0, // 55: webapi.SADeleteShortMessage.Tag:type_name -> webapi.TagCode 0, // 56: webapi.SAQueryOnlineReportList.Tag:type_name -> webapi.TagCode - 143, // 57: webapi.SAQueryOnlineReportList.PlayerData:type_name -> webapi.PlayerData + 146, // 57: webapi.SAQueryOnlineReportList.PlayerData:type_name -> webapi.PlayerData 0, // 58: webapi.SASrvCtrlClose.Tag:type_name -> webapi.TagCode 0, // 59: webapi.SASrvCtrlNotice.Tag:type_name -> webapi.TagCode 0, // 60: webapi.SASrvCtrlStartScript.Tag:type_name -> webapi.TagCode 0, // 61: webapi.SAListServerStates.Tag:type_name -> webapi.TagCode - 146, // 62: webapi.SAListServerStates.ServerInfo:type_name -> webapi.ServerInfo + 149, // 62: webapi.SAListServerStates.ServerInfo:type_name -> webapi.ServerInfo 0, // 63: webapi.SAServerStateSwitch.Tag:type_name -> webapi.TagCode 0, // 64: webapi.SAResetEtcdData.Tag:type_name -> webapi.TagCode 0, // 65: webapi.SAOnlineReportTotal.Tag:type_name -> webapi.TagCode - 147, // 66: webapi.SAOnlineReportTotal.OnlineReport:type_name -> webapi.OnlineReport + 150, // 66: webapi.SAOnlineReportTotal.OnlineReport:type_name -> webapi.OnlineReport 0, // 67: webapi.SAAddCoinByIdAndPT.Tag:type_name -> webapi.TagCode - 148, // 68: webapi.JybInfoAward.ItemId:type_name -> webapi.ItemInfo + 151, // 68: webapi.JybInfoAward.ItemId:type_name -> webapi.ItemInfo 83, // 69: webapi.ASCreateJYB.Award:type_name -> webapi.JybInfoAward 0, // 70: webapi.SACreateJYB.Tag:type_name -> webapi.TagCode 0, // 71: webapi.SAUpdateJYB.Tag:type_name -> webapi.TagCode @@ -10408,10 +10641,10 @@ var file_webapi_proto_depIdxs = []int32{ 94, // 77: webapi.SAGetExchangeOrder.OrderList:type_name -> webapi.ExchangeOrderInfo 0, // 78: webapi.SAUpExchangeStatus.Tag:type_name -> webapi.TagCode 0, // 79: webapi.SAGetExchangeShop.Tag:type_name -> webapi.TagCode - 149, // 80: webapi.SAGetExchangeShop.List:type_name -> webapi.ExchangeShop - 150, // 81: webapi.SAGetExchangeShop.Weight:type_name -> webapi.ShopWeight + 152, // 80: webapi.SAGetExchangeShop.List:type_name -> webapi.ExchangeShop + 153, // 81: webapi.SAGetExchangeShop.Weight:type_name -> webapi.ShopWeight 0, // 82: webapi.SAThdUpdatePlayerCoin.Tag:type_name -> webapi.TagCode - 148, // 83: webapi.SACreateOrder.ItemInfo:type_name -> webapi.ItemInfo + 151, // 83: webapi.SACreateOrder.ItemInfo:type_name -> webapi.ItemInfo 0, // 84: webapi.SACallbackPayment.Tag:type_name -> webapi.TagCode 0, // 85: webapi.SAResource.Tag:type_name -> webapi.TagCode 0, // 86: webapi.SASendSms.Tag:type_name -> webapi.TagCode @@ -10420,17 +10653,19 @@ var file_webapi_proto_depIdxs = []int32{ 0, // 89: webapi.SAGetImgVerify.Tag:type_name -> webapi.TagCode 0, // 90: webapi.SAPlayerDelete.Tag:type_name -> webapi.TagCode 0, // 91: webapi.SAPlayerInviteLink.Tag:type_name -> webapi.TagCode - 148, // 92: webapi.ASAddItemById.ItemInfo:type_name -> webapi.ItemInfo + 151, // 92: webapi.ASAddItemById.ItemInfo:type_name -> webapi.ItemInfo 0, // 93: webapi.SAAddItemById.Tag:type_name -> webapi.TagCode 130, // 94: webapi.SASMSConfig.Info:type_name -> webapi.SMSInfo 0, // 95: webapi.SASMSConfig.Tag:type_name -> webapi.TagCode 134, // 96: webapi.SAPopUpWindowsConfig.Info:type_name -> webapi.WindowsInfo 0, // 97: webapi.SAPopUpWindowsConfig.Tag:type_name -> webapi.TagCode - 98, // [98:98] is the sub-list for method output_type - 98, // [98:98] is the sub-list for method input_type - 98, // [98:98] is the sub-list for extension type_name - 98, // [98:98] is the sub-list for extension extendee - 0, // [0:98] is the sub-list for field type_name + 0, // 98: webapi.SARoomInfo.Tag:type_name -> webapi.TagCode + 136, // 99: webapi.SARoomInfo.List:type_name -> webapi.RoundInfo + 100, // [100:100] is the sub-list for method output_type + 100, // [100:100] is the sub-list for method input_type + 100, // [100:100] is the sub-list for extension type_name + 100, // [100:100] is the sub-list for extension extendee + 0, // [0:100] is the sub-list for field type_name } func init() { file_webapi_proto_init() } @@ -12048,6 +12283,42 @@ func file_webapi_proto_init() { return nil } } + file_webapi_proto_msgTypes[134].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ASRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_webapi_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoundInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_webapi_proto_msgTypes[136].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SARoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -12055,7 +12326,7 @@ func file_webapi_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_webapi_proto_rawDesc, NumEnums: 1, - NumMessages: 134, + NumMessages: 137, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/webapi/webapi.proto b/protocol/webapi/webapi.proto index d5aedaa..41d749d 100644 --- a/protocol/webapi/webapi.proto +++ b/protocol/webapi/webapi.proto @@ -35,6 +35,7 @@ enum TagCode { TelExist =9; // 手机号已存在 AccountNotFound =10; // 账号未找到 TelNotBind =11; // 手机号未绑定 + NotFound =12; // 未找到 } // =================================================== @@ -279,6 +280,8 @@ message ASListRoom{ int32 ClubId = 9; int32 RoomType = 10;//roomType=0所有房间,roomType=1俱乐部房间,roomType=2个人房间 int32 GamefreeId = 11; + int32 IsCustom = 12; // 房卡场 1是 + int32 RoomConfigId = 13; // 房间玩法id } message SAListRoom{ TagCode Tag = 1; //错误码 @@ -969,3 +972,22 @@ message WindowsInfo{ int32 PartNum = 4;//参与人数 int32 GainNum = 5;//领取人数 } + +// 获取对局详情 /api/game/room_info +message ASRoomInfo{ + int32 RoomId = 1; // 房间id +} + +message RoundInfo{ + int32 Round = 1; //局数 + int64 Ts = 2; //结束时间 + repeated int64 Score = 3; //分数 + string LogId = 4; // 牌局记录id +} + +message SARoomInfo{ + TagCode Tag = 1; //错误码 + string Msg = 2; //错误信息 + repeated int32 SnId = 3; // 玩家id + repeated RoundInfo List = 4; // 每局结算 +} \ No newline at end of file diff --git a/worldsrv/action_bag.go b/worldsrv/action_bag.go index 9058404..1975421 100644 --- a/worldsrv/action_bag.go +++ b/worldsrv/action_bag.go @@ -308,9 +308,9 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e send() return nil } - bagInfo, _, isF := BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, - Change: []*Item{ + bagInfo, _, isF := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: []*model.Item{ { ItemId: msg.GetItemId(), ItemNum: -1, @@ -333,9 +333,9 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e logger.Logger.Trace("道具分解", msg.ItemId) itemInfo := srvdata.GameItemMgr.Get(p.Platform, msg.ItemId) if msg.ItemNum > 0 && itemInfo != nil { - _, _, isF := BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, - Change: []*Item{ + _, _, isF := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: []*model.Item{ { ItemId: msg.GetItemId(), ItemNum: int64(-msg.GetItemNum()), @@ -348,19 +348,19 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e }) if isF { pack.RetCode = bag.OpResultCode_OPRC_Sucess - var changeItems []*Item + var changeItems []*model.Item for k, v := range itemInfo.GetGain() { if v > 0 { - changeItems = append(changeItems, &Item{ + changeItems = append(changeItems, &model.Item{ ItemId: int32(k), ItemNum: v * int64(msg.GetItemNum()), }) } } - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: changeItems, - Cost: []*model.ItemInfo{ + Cost: []*model.Item{ { ItemId: msg.GetItemId(), ItemNum: int64(msg.GetItemNum()), diff --git a/worldsrv/action_pets.go b/worldsrv/action_pets.go index fe7c5b7..40af61f 100644 --- a/worldsrv/action_pets.go +++ b/worldsrv/action_pets.go @@ -529,7 +529,7 @@ func CSSkinUpgrade(s *netlib.Session, packetid int, data interface{}, sid int64) return nil } - var change []*Item + var change []*model.Item for _, v := range info.GetCost() { e := BagMgrSingleton.GetItem(p.SnId, v.GetId()) if e == nil || e.ItemNum < v.GetN() { @@ -538,13 +538,13 @@ func CSSkinUpgrade(s *netlib.Session, packetid int, data interface{}, sid int64) send() return nil } - change = append(change, &Item{ + change = append(change, &model.Item{ ItemId: v.GetId(), ItemNum: -v.GetN(), }) } - _, _, ok = BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + _, _, ok = BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: change, Add: 0, GainWay: common.GainWaySkinUpGrade, @@ -580,7 +580,7 @@ func SkinUnLock(p *Player, id int32) (*pets.SkinInfo, pets.OpResultCode) { return nil, pets.OpResultCode_OPRC_Error } - var change []*Item + var change []*model.Item if info.GetUnLockType() == common.SkinGetVip { if p.VIP < info.GetNeedVip() { logger.Logger.Errorf("CSSKinUnLock Unlock vip error") @@ -592,13 +592,13 @@ func SkinUnLock(p *Player, id int32) (*pets.SkinInfo, pets.OpResultCode) { if e == nil || e.ItemNum < v.GetN() { return nil, pets.OpResultCode_OPRC_NotEnough } - change = append(change, &Item{ + change = append(change, &model.Item{ ItemId: v.GetId(), ItemNum: -v.GetN(), }) } - _, _, ok := BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + _, _, ok := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: change, Add: 0, GainWay: common.GainWaySkinUnLock, diff --git a/worldsrv/action_phonelottery.go b/worldsrv/action_phonelottery.go index 30591e1..f8f39e1 100644 --- a/worldsrv/action_phonelottery.go +++ b/worldsrv/action_phonelottery.go @@ -308,7 +308,7 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da } p.AddDiamond(-diamondNum, 0, common.GainWayDiamondLottery, "sys", "钻石抽奖") pack := &player_proto.SCDiamondLottery{} - var items []*Item + var items []*model.Item for i := 1; i <= int(count); i++ { weight := 0 for _, lotteryInfo := range config.Info { @@ -354,7 +354,7 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da for _, lotteryInfo := range config.Info { if lotteryInfo.Id == awardId { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: lotteryInfo.ItemId, // 物品id ItemNum: int64(lotteryInfo.Grade), // 数量 }) @@ -372,7 +372,7 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da value += int(lotteryInfo.Oddrate) if lotteryInfo.Type == 1 { if random <= value { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: lotteryInfo.ItemId, // 物品id ItemNum: int64(lotteryInfo.Grade), // 数量 }) @@ -389,10 +389,10 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da } } } - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: items, - Cost: []*model.ItemInfo{ + Cost: []*model.Item{ { ItemId: common.ItemIDDiamond, ItemNum: diamondNum, diff --git a/worldsrv/action_player.go b/worldsrv/action_player.go index 025416e..d800fbe 100644 --- a/worldsrv/action_player.go +++ b/worldsrv/action_player.go @@ -3101,9 +3101,9 @@ func CSUpdateAttribute(s *netlib.Session, packetId int, data interface{}, sid in send() // 获得10v卡 if p.GuideStep == 2 { - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, - Change: []*Item{ + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: []*model.Item{ { ItemId: common.ItemIDVCard, ItemNum: 10, diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 429e3b5..6481acb 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -150,39 +150,6 @@ func init() { gameCoinTs := msg.GetGameCoinTs() if !p.IsRob && !scene.IsTestScene() { - // 同步背包数据 - diffItems := []*Item{} - dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform) - if dbItemArr != nil { - items := msg.GetItems() - if items != nil { - for _, dbItem := range dbItemArr { - //todo 临时修复,正常应该道具需要使用事务同步 - switch dbItem.GetId() { - case common.ItemIDPermit, common.ItemIDWeekScore: - continue - } - if itemNum, exist := items[dbItem.Id]; exist { - oldItem := BagMgrSingleton.GetItem(p.SnId, dbItem.Id) - diffNum := itemNum - if oldItem != nil { - diffNum = itemNum - oldItem.ItemNum - } - if diffNum != 0 { - item := &Item{ - ItemId: dbItem.Id, - ItemNum: diffNum, - } - diffItems = append(diffItems, item) - } - } - } - } - } - if diffItems != nil && len(diffItems) != 0 { - BagMgrSingleton.AddItems(p, diffItems, 0, 0, "", "", 0, 0, true) - } - //对账点同步 if p.GameCoinTs < gameCoinTs { p.GameCoinTs = gameCoinTs @@ -648,6 +615,37 @@ func init() { } return nil })) + + // 同步道具数量 + netlib.Register(int(serverproto.SSPacketID_PACKET_PlayerChangeItems), &serverproto.PlayerChangeItems{}, HandlePlayerChangeItems) +} + +func HandlePlayerChangeItems(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Tracef("HandlePlayerChangeItems recv %v", data) + msg, ok := data.(*serverproto.PlayerChangeItems) + if !ok { + return nil + } + p := PlayerMgrSington.GetPlayerBySnId(msg.GetSnId()) + if p == nil { + return nil + } + var items []*model.Item + for _, v := range msg.GetItems() { + items = append(items, &model.Item{ + ItemId: v.GetId(), + ItemNum: v.GetNum(), + }) + } + _, _, ok = BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: items, + NoLog: true, + }) + if !ok { + logger.Logger.Errorf("HandlePlayerChangeItems add item failed %v", msg) + } + return nil } // 机器人服务器向worldsrv发送 diff --git a/worldsrv/action_welfare.go b/worldsrv/action_welfare.go index 5c8e874..b9b993f 100644 --- a/worldsrv/action_welfare.go +++ b/worldsrv/action_welfare.go @@ -13,7 +13,7 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/model" "mongo.games.com/game/proto" - webapi_proto "mongo.games.com/game/protocol/webapi" + webapiproto "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/protocol/welfare" "mongo.games.com/game/srvdata" "mongo.games.com/game/webapi" @@ -315,14 +315,14 @@ func CSInviteInfo(s *netlib.Session, packetid int, data interface{}, sid int64) var res []byte var err error task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - req := &webapi_proto.ASPlayerInviteLink{ + req := &webapiproto.ASPlayerInviteLink{ Platform: p.Platform, SnId: p.SnId, } res, err = webapi.ApiGetInviteLink(common.GetAppId(), req) return nil }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { - info := webapi_proto.SAPlayerInviteLink{} + info := webapiproto.SAPlayerInviteLink{} if err != nil || res == nil { logger.Logger.Errorf("ApiGetInviteLink err %v or not return", err) } else { @@ -1029,7 +1029,7 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int } if isExchange { - var exchangeConfig *webapi_proto.PermitExchangeConfig + var exchangeConfig *webapiproto.PermitExchangeConfig for _, v := range channelConfig.GetExchangeConfig() { if v.GetId() == msg.GetId() { exchangeConfig = v @@ -1038,10 +1038,10 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int } if exchangeConfig != nil { // 检查背包是否足够 - var items []*Item + var items []*model.Item var costItems []*Item var cost, gain []model.AwardItem - var cost1 []*model.ItemInfo + var cost1 []*model.Item for _, v := range exchangeConfig.GetCost() { item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()) if item == nil || item.ItemNum < v.GetItemNum() { @@ -1059,7 +1059,7 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int Id: v.GetItemId(), Num: v.GetItemNum(), }) - cost1 = append(cost1, &model.ItemInfo{ + cost1 = append(cost1, &model.Item{ ItemId: v.GetItemId(), ItemNum: v.GetItemNum(), }) @@ -1068,10 +1068,9 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int for _, v := range exchangeConfig.GetGain() { info := srvdata.GameItemMgr.Get(p.Platform, v.GetItemId()) if info != nil { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: v.GetItemId(), ItemNum: v.GetItemNum(), - Name: info.Name, }) gain = append(gain, model.AwardItem{ Id: v.GetItemId(), @@ -1085,8 +1084,8 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int common.GainWayPermitExchangeCost, "system", "赛季通行证兑换消耗", 0, 0, false) } // 增加背包物品 - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: items, Cost: cost1, Add: 0, diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index 13ae7d7..e770f5f 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -155,13 +155,28 @@ type ItemParam struct { } type AddItemParam struct { - Cost []*model.ItemInfo // 获得道具时消耗的道具数量 + Cost []*model.Item // 获得道具时消耗的道具数量 LogId string } -func (this *BagMgr) AddItemsV2(args *ItemParam) (*BagInfo, bag.OpResultCode, bool) { - return this.AddItems(args.P, args.Change, args.Add, args.GainWay, args.Operator, args.Remark, args.GameId, args.GameFreeId, args.NoLog, AddItemParam{ - Cost: args.Cost, +func (this *BagMgr) AddItemsV2(args *model.AddItemParam) (*BagInfo, bag.OpResultCode, bool) { + p := PlayerMgrSington.GetPlayerBySnId(args.P.SnId) + var items []*Item + var costs []*model.Item + for _, v := range args.Change { + items = append(items, &Item{ + ItemId: v.ItemId, + ItemNum: v.ItemNum, + }) + } + for _, v := range args.Cost { + costs = append(costs, &model.Item{ + ItemId: v.ItemId, + ItemNum: v.ItemNum, + }) + } + return this.AddItems(p, items, args.Add, args.GainWay, args.Operator, args.Remark, args.GameId, args.GameFreeId, args.NoLog, AddItemParam{ + Cost: costs, LogId: args.LogId, }) } @@ -177,7 +192,7 @@ func (this *BagMgr) AddItemsV2(args *ItemParam) (*BagInfo, bag.OpResultCode, boo // Deprecated: use [ AddItemsV2 ] instead func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int32, operator, remark string, gameId, gameFreeId int64, noLog bool, params ...AddItemParam) (*BagInfo, bag.OpResultCode, bool) { - var cost []*model.ItemInfo + var cost []*model.Item var id string if len(params) > 0 { cost = params[0].Cost @@ -745,14 +760,14 @@ func (this *BagMgr) ItemExchangeCard(p *Player, itemId int32, money, cardType in }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { if err != nil || res.GetCode() == "" || res.GetTag() != webapiproto.TagCode_SUCCESS { //返回道具 - items := make([]*Item, 0) - items = append(items, &Item{ + items := make([]*model.Item, 0) + items = append(items, &model.Item{ ItemId: itemId, // 物品id ItemNum: 1, // 数量 ObtainTime: time.Now().Unix(), }) - this.AddItemsV2(&ItemParam{ - P: p, + this.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: items, Add: 0, GainWay: common.GainWayItemChange, diff --git a/worldsrv/gamesess.go b/worldsrv/gamesess.go index 872056f..d7ad029 100644 --- a/worldsrv/gamesess.go +++ b/worldsrv/gamesess.go @@ -170,6 +170,14 @@ func (this *GameSession) AddScene(s *Scene) { DBGameFree: s.dbGameFree, Platform: s.limitPlatform.IdStr, } + if s.RoomConfig != nil { + for _, v := range s.RoomConfig.GetCost() { + msg.Items = append(msg.Items, &server_proto.Item{ + Id: v.GetItemId(), + Num: v.GetItemNum(), + }) + } + } if s.IsCoinScene() { if sp, ok := s.sp.(*ScenePolicyData); ok { msg.EnterAfterStart = proto.Bool(sp.EnterAfterStart) diff --git a/worldsrv/player.go b/worldsrv/player.go index 752df54..2ecf0cc 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -3870,9 +3870,9 @@ func (this *Player) VIPDraw(id, vip int32) { this.AddMoneyPayTotal(addVipExp) pack.Award[common.ItemIDVipExp] = addVipExp default: - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: this, - Change: []*Item{ + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: this.PlayerData, + Change: []*model.Item{ { ItemId: int32(k), ItemNum: v, @@ -3893,18 +3893,18 @@ func (this *Player) VIPDraw(id, vip int32) { LogChannelSingleton.WriteLog(log) case 1: - var items []*Item + var items []*model.Item var itemInfo []model.ItemInfo for k, v := range data.Privilege9 { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: int32(k), ItemNum: v, }) itemInfo = append(itemInfo, model.ItemInfo{ItemId: int32(k), ItemNum: v}) pack.Award[k] = v } - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: this, + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: this.PlayerData, Change: items, GainWay: common.GainWayVipGift9, Operator: "system", diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 04d0275..bfe8748 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -3,6 +3,7 @@ package main import ( "math" "mongo.games.com/game/common" + "mongo.games.com/game/model" hallproto "mongo.games.com/game/protocol/gamehall" "mongo.games.com/game/protocol/webapi" ) @@ -78,9 +79,9 @@ func (spd *ScenePolicyData) CanEnter(s *Scene, p *Player) int { return 0 } -func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player, f func(items []*Item)) bool { +func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player, f func(items []*model.Item)) bool { isEnough := true - var items []*Item + var items []*model.Item if costType == 1 { // 房主 for _, v := range roomConfig.GetCost() { @@ -88,7 +89,7 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba isEnough = false break } else { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: v.GetItemId(), ItemNum: v.GetItemNum(), }) @@ -102,7 +103,7 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba isEnough = false break } else { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: v.GetItemId(), ItemNum: v.GetItemNum(), }) @@ -116,13 +117,13 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba } func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player) bool { - return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*Item) {}) + return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*model.Item) {}) } func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { - return spd.costEnough(s.RoomCostType, s.playerNum, s.RoomConfig, p, func(items []*Item) { - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + return spd.costEnough(s.RoomCostType, s.playerNum, s.RoomConfig, p, func(items []*model.Item) { + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: items, GainWay: common.GainWayRoomCost, Operator: "system", diff --git a/worldsrv/welfmgr.go b/worldsrv/welfmgr.go index 865c8ef..bf2db88 100644 --- a/worldsrv/welfmgr.go +++ b/worldsrv/welfmgr.go @@ -849,7 +849,7 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) { } typeId := addUpDate2Type[0].Id addUpDate2Num := addUpDate2Type[0].Num - var cost []*model.ItemInfo + var cost []*model.Item if typeId == 1 { Num += 1 //看广告任务 @@ -865,7 +865,7 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) { p.AddDiamond(int64(-addUpDate2Num), 0, common.GainWaySign7Con, "system", "累计签到进阶奖励钻石消耗") logger.Logger.Trace("累计签到进阶奖励,扣除钻石uid = ", p.SnId) EndTime = -1 - cost = append(cost, &model.ItemInfo{ + cost = append(cost, &model.Item{ ItemId: common.ItemIDDiamond, ItemNum: int64(addUpDate2Num), }) @@ -877,18 +877,18 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) { } if EndTime == -1 { //发奖 - var items []*Item + var items []*model.Item for _, d2 := range addUpDate2 { for _, value := range d2.AddUpDate { - item := &Item{ + item := &model.Item{ ItemId: value.Item_Id, ItemNum: int64(value.Grade), } items = append(items, item) } } - BagMgrSingleton.AddItemsV2(&ItemParam{ - P: p, + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, Change: items, Cost: cost, Add: 0, From cae5536ed35b130de95133a529307da18c34bc3c Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 28 Aug 2024 09:12:01 +0800 Subject: [PATCH 41/63] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E6=B6=88=E8=80=97?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/l_itemlog.go | 2 ++ model/baginfo.go | 1 + model/itemdatalog.go | 55 +++++++++++++++++++------------------ worldsrv/bagmgr.go | 37 ++++++++++++++----------- worldsrv/scenepolicydata.go | 15 +++++----- 5 files changed, 61 insertions(+), 49 deletions(-) diff --git a/dbproxy/svc/l_itemlog.go b/dbproxy/svc/l_itemlog.go index 4fda8b7..49811bb 100644 --- a/dbproxy/svc/l_itemlog.go +++ b/dbproxy/svc/l_itemlog.go @@ -26,6 +26,8 @@ func ItemLogsCollection(plt string) *mongo.Collection { c_itemlog.EnsureIndex(mgo.Index{Key: []string{"gameid"}, Background: true, Sparse: true}) c_itemlog.EnsureIndex(mgo.Index{Key: []string{"gamefreeid"}, Background: true, Sparse: true}) c_itemlog.EnsureIndex(mgo.Index{Key: []string{"snid", "logtype", "itemid", "typeid"}, Background: true, Sparse: true}) + c_itemlog.EnsureIndex(mgo.Index{Key: []string{"roomconfigid"}, Background: true, Sparse: true}) + c_itemlog.EnsureIndex(mgo.Index{Key: []string{"typeid", "roomconfigid"}, Background: true, Sparse: true}) } return c_itemlog } diff --git a/model/baginfo.go b/model/baginfo.go index 00a1698..86a325c 100644 --- a/model/baginfo.go +++ b/model/baginfo.go @@ -95,4 +95,5 @@ type AddItemParam struct { GameId, GameFreeId int64 // 游戏id,场次id NoLog bool // 是否不记录日志 LogId string // 撤销的id,道具兑换失败 + RoomConfigId int32 // 房间配置id } diff --git a/model/itemdatalog.go b/model/itemdatalog.go index a6cd9ab..b4a96b4 100644 --- a/model/itemdatalog.go +++ b/model/itemdatalog.go @@ -14,20 +14,21 @@ var ( ) type ItemLog struct { - LogId bson.ObjectId `bson:"_id"` - Platform string //平台 - SnId int32 //玩家id - LogType int32 //记录类型 0.获取 1.消耗 - ItemId int32 //道具id - ItemName string //道具名称 - Count int64 //个数 - CreateTs int64 //记录时间 - Remark string //备注 - TypeId int32 // 变化类型 - GameId int32 // 游戏id,游戏中获得时有值 - GameFreeId int32 // 场次id,游戏中获得时有值 - Cost []*Item // 消耗的道具 - Id string // 撤销的id,兑换失败 + LogId bson.ObjectId `bson:"_id"` + Platform string //平台 + SnId int32 //玩家id + LogType int32 //记录类型 0.获取 1.消耗 + ItemId int32 //道具id + ItemName string //道具名称 + Count int64 //个数 + CreateTs int64 //记录时间 + Remark string //备注 + TypeId int32 // 变化类型 + GameId int32 // 游戏id,游戏中获得时有值 + GameFreeId int32 // 场次id,游戏中获得时有值 + Cost []*Item // 消耗的道具 + Id string // 撤销的id,兑换失败 + RoomConfigId int32 // 房间配置id } func NewItemLog() *ItemLog { @@ -36,18 +37,19 @@ func NewItemLog() *ItemLog { } type ItemParam struct { - Platform string // 平台 - SnId int32 // 玩家id - LogType int32 // 记录类型 0.获取 1.消耗 - ItemId int32 // 道具id - ItemName string // 道具名称 - Count int64 // 个数 - Remark string // 备注 - TypeId int32 // 变化类型 - GameId int64 // 游戏id,游戏中获得时有值 - GameFreeId int64 // 场次id,游戏中获得时有值 - Cost []*Item // 消耗的道具 - LogId string // 撤销的id,兑换失败 + Platform string // 平台 + SnId int32 // 玩家id + LogType int32 // 记录类型 0.获取 1.消耗 + ItemId int32 // 道具id + ItemName string // 道具名称 + Count int64 // 个数 + Remark string // 备注 + TypeId int32 // 变化类型 + GameId int64 // 游戏id,游戏中获得时有值 + GameFreeId int64 // 场次id,游戏中获得时有值 + Cost []*Item // 消耗的道具 + LogId string // 撤销的id,兑换失败 + RoomConfigId int32 // 房间配置id } func NewItemLogEx(param ItemParam) *ItemLog { @@ -65,6 +67,7 @@ func NewItemLogEx(param ItemParam) *ItemLog { itemLog.GameFreeId = int32(param.GameFreeId) itemLog.Cost = param.Cost itemLog.Id = param.LogId + itemLog.RoomConfigId = param.RoomConfigId return itemLog } diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index e770f5f..20c0f48 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -155,8 +155,9 @@ type ItemParam struct { } type AddItemParam struct { - Cost []*model.Item // 获得道具时消耗的道具数量 - LogId string + Cost []*model.Item // 获得道具时消耗的道具数量 + LogId string + RoomConfigId int32 } func (this *BagMgr) AddItemsV2(args *model.AddItemParam) (*BagInfo, bag.OpResultCode, bool) { @@ -176,8 +177,9 @@ func (this *BagMgr) AddItemsV2(args *model.AddItemParam) (*BagInfo, bag.OpResult }) } return this.AddItems(p, items, args.Add, args.GainWay, args.Operator, args.Remark, args.GameId, args.GameFreeId, args.NoLog, AddItemParam{ - Cost: costs, - LogId: args.LogId, + Cost: costs, + LogId: args.LogId, + RoomConfigId: args.RoomConfigId, }) } @@ -194,9 +196,11 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int gameId, gameFreeId int64, noLog bool, params ...AddItemParam) (*BagInfo, bag.OpResultCode, bool) { var cost []*model.Item var id string + var roomConfigId int32 if len(params) > 0 { cost = params[0].Cost id = params[0].LogId + roomConfigId = params[0].RoomConfigId } var items []*Item @@ -325,18 +329,19 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int num = -v.ItemNum } log := model.NewItemLogEx(model.ItemParam{ - Platform: p.Platform, - SnId: p.SnId, - LogType: int32(logType), - ItemId: v.ItemId, - ItemName: item.Name, - Count: num, - Remark: remark, - TypeId: gainWay, - GameId: gameId, - GameFreeId: gameFreeId, - Cost: cost, - LogId: id, + Platform: p.Platform, + SnId: p.SnId, + LogType: int32(logType), + ItemId: v.ItemId, + ItemName: item.Name, + Count: num, + Remark: remark, + TypeId: gainWay, + GameId: gameId, + GameFreeId: gameFreeId, + Cost: cost, + LogId: id, + RoomConfigId: roomConfigId, }) if log != nil { LogChannelSingleton.WriteLog(log) diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index bfe8748..130ab55 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -123,13 +123,14 @@ func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *weba func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { return spd.costEnough(s.RoomCostType, s.playerNum, s.RoomConfig, p, func(items []*model.Item) { BagMgrSingleton.AddItemsV2(&model.AddItemParam{ - P: p.PlayerData, - Change: items, - GainWay: common.GainWayRoomCost, - Operator: "system", - Remark: "竞技馆进房费用", - GameId: int64(s.gameId), - GameFreeId: int64(s.dbGameFree.GetId()), + P: p.PlayerData, + Change: items, + GainWay: common.GainWayRoomCost, + Operator: "system", + Remark: "竞技馆进房费用", + GameId: int64(s.gameId), + GameFreeId: int64(s.dbGameFree.GetId()), + RoomConfigId: s.RoomConfig.GetId(), }) }) } From 94a4737609f1aa907518eda4303a3e2ff864ab63 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 27 Aug 2024 17:36:08 +0800 Subject: [PATCH 42/63] =?UTF-8?q?=E6=AF=94=E8=B5=9B=E5=9C=BA=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E6=8E=92=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/tournament.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/worldsrv/tournament.go b/worldsrv/tournament.go index 8519cf2..2bc7ec4 100644 --- a/worldsrv/tournament.go +++ b/worldsrv/tournament.go @@ -966,6 +966,25 @@ func (this *Tournament) GetRank(sortId int64, snid int32) int32 { } if round <= 1 { + d := tm.TmPlayer[snid] + if d != nil { + return int32(d.seq) + } + if useRobot { + n := 0 + for _, v := range tm.TmPlayer { + n = v.seq - 1 + break + } + for k, v := range tm.robotGrades[0] { + if v.copySnid == snid { + if k < n { + return int32(k) + } + return int32(k + 2) + } + } + } return 0 } else { if useRobot { From bfdf500eecbe4561c4cce73b387408f0aca4cca2 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 28 Aug 2024 16:08:55 +0800 Subject: [PATCH 43/63] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_game.go | 4 +- gamesrv/action/action_server.go | 76 +- gamesrv/avengers/scenedata_avengers.go | 32 +- gamesrv/avengers/scenepolicy_avengers.go | 44 +- gamesrv/base/divisionsystem.go | 2 +- gamesrv/base/player.go | 4 +- gamesrv/base/playermgr.go | 6 +- gamesrv/base/replay_recorder.go | 11 +- gamesrv/base/scene.go | 423 +- gamesrv/base/scene_mgr.go | 49 +- gamesrv/caishen/scenedata_caishen.go | 32 +- gamesrv/caishen/scenepolicy_caishen.go | 46 +- gamesrv/chess/scene.go | 2 +- gamesrv/chess/scenepolicy.go | 14 +- .../easterisland/scenedata_easterisland.go | 32 +- .../easterisland/scenepolicy_easterisland.go | 38 +- gamesrv/fishing/action_fish.go | 6 +- gamesrv/fishing/playerdata_fishing.go | 2 +- gamesrv/fishing/scenedata_fishing.go | 8 +- gamesrv/fruits/playerdata_fruits.go | 4 +- gamesrv/fruits/scenedata_fruits.go | 20 +- gamesrv/fruits/scenepolicy_fruits.go | 30 +- gamesrv/iceage/scenedata_iceage.go | 26 +- gamesrv/iceage/scenepolicy_iceage.go | 6 +- gamesrv/richblessed/scenedata_richblessed.go | 22 +- .../richblessed/scenepolicy_richblessed.go | 40 +- gamesrv/smallrocket/scene.go | 8 +- gamesrv/tamquoc/scenedata_tamquoc.go | 34 +- gamesrv/tamquoc/scenepolicy_tamquoc.go | 36 +- gamesrv/thirteen/scene.go | 10 +- gamesrv/thirteen/scenepolicy.go | 6 +- gamesrv/tienlen/scenedata_tienlen.go | 10 +- gamesrv/tienlen/scenepolicy_tienlen.go | 40 +- protocol/server/server.pb.go | 3809 +++++++++-------- protocol/server/server.proto | 60 +- worldsrv/action_game.go | 51 +- worldsrv/action_server.go | 6 +- worldsrv/action_tournament.go | 2 +- worldsrv/gamesess.go | 70 +- worldsrv/matchscenemgr.go | 21 +- worldsrv/scene.go | 143 +- worldsrv/scenemgr.go | 43 +- worldsrv/scenepolicydata.go | 11 +- 43 files changed, 2702 insertions(+), 2637 deletions(-) diff --git a/gamesrv/action/action_game.go b/gamesrv/action/action_game.go index 9f76f66..4245e12 100644 --- a/gamesrv/action/action_game.go +++ b/gamesrv/action/action_game.go @@ -83,7 +83,7 @@ func (this *CSLeaveRoomHandler) Process(s *netlib.Session, packetid int, data in logger.Logger.Warnf("CSLeaveRoomHandler[%v][%v] scene.gaming==true", scene.SceneId, p.SnId) pack := &gamehall.SCLeaveRoom{ OpRetCode: gamehall.OpResultCode_Game_OPRC_YourAreGamingCannotLeave_Game, - RoomId: proto.Int(scene.SceneId), + RoomId: scene.SceneId, } proto.SetDefaults(pack) p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_LEAVEROOM), pack) @@ -100,7 +100,7 @@ func (this *CSLeaveRoomHandler) Process(s *netlib.Session, packetid int, data in Reason: proto.Int(0), OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, Mode: msg.Mode, - RoomId: proto.Int(scene.SceneId), + RoomId: scene.SceneId, } proto.SetDefaults(pack) p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_LEAVEROOM), pack) diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 22b52b3..a0bb222 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -73,64 +73,22 @@ func HandleWGPlayerLeave(session *netlib.Session, packetId int, data interface{} // return nil //} -func init() { - //创建场景 - netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_CREATESCENE), netlib.PacketFactoryWrapper(func() interface{} { - return &server.WGCreateScene{} - })) - netlib.RegisterHandler(int(server.SSPacketID_PACKET_WG_CREATESCENE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { - logger.Logger.Trace("receive WGCreateScene:", pack) - if msg, ok := pack.(*server.WGCreateScene); ok { - sceneId := int(msg.GetSceneId()) - gameMode := int(msg.GetGameMode()) - sceneMode := int(msg.GetSceneMode()) - gameId := int(msg.GetGameId()) - hallId := msg.GetHallId() - groupId := msg.GetGroupId() - dbGameFree := msg.GetDBGameFree() - bEnterAfterStart := msg.GetEnterAfterStart() - totalOfGames := msg.GetTotalOfGames() - baseScore := msg.GetBaseScore() - playerNum := int(msg.GetPlayerNum()) - scene := base.SceneMgrSington.CreateScene(s, sceneId, gameMode, sceneMode, gameId, msg.GetPlatform(), msg.GetParams(), - msg.GetAgentor(), msg.GetCreator(), msg.GetReplayCode(), hallId, groupId, totalOfGames, dbGameFree, - bEnterAfterStart, baseScore, playerNum, msg.GetChessRank()) - if scene != nil { - if scene.IsMatchScene() { - if len(scene.Params) > 0 { - scene.MatchId = scene.Params[0] - } - if len(scene.Params) > 1 { - scene.MatchFinals = scene.Params[1] == 1 - } - if len(scene.Params) > 2 { - scene.MatchRound = scene.Params[2] - } - if len(scene.Params) > 3 { - scene.MatchCurPlayerNum = scene.Params[3] - } - if len(scene.Params) > 4 { - scene.MatchNextNeed = scene.Params[4] - } - if len(scene.Params) > 5 { - scene.MatchType = scene.Params[5] - } - } - for _, v := range msg.GetItems() { - scene.Items = append(scene.Items, &base.ItemInfo{ - Id: v.GetId(), - Num: v.GetNum(), - }) - } - scene.ClubId = msg.GetClub() - scene.RoomId = msg.GetClubRoomId() - scene.RoomPos = msg.GetClubRoomPos() - scene.PumpCoin = msg.GetClubRate() - scene.RealCtrl = msg.RealCtrl - } - } +func CreateSceneHandler(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Tracef("receive CreateScene %v", data) + msg, ok := data.(*server.WGCreateScene) + if !ok { return nil - })) + } + base.SceneMgrSington.CreateScene(&base.CreateSceneParam{ + Session: session, + WGCreateScene: msg, + }) + return nil +} + +func init() { + // 创建房间 + netlib.Register(int(server.SSPacketID_PACKET_WG_CREATESCENE), &server.WGCreateScene{}, CreateSceneHandler) //删除场景 // 立刻删除,不管游戏是否结束 @@ -280,7 +238,7 @@ func init() { } if scene.Testing { - p.Coin = int64(scene.DbGameFree.GetTestTakeCoin()) + p.Coin = int64(scene.GetDBGameFree().GetTestTakeCoin()) } base.PlayerMgrSington.ManagePlayer(p) scene.PlayerEnter(p, isload) @@ -397,7 +355,7 @@ func init() { //p.coin = msg.GetTakeCoin() //p.takeCoin = msg.GetTakeCoin() if scene.Testing { - p.Coin = int64(scene.DbGameFree.GetTestTakeCoin()) + p.Coin = int64(scene.GetDBGameFree().GetTestTakeCoin()) } p.LastSyncCoin = p.Coin scene.AudienceSit(p) diff --git a/gamesrv/avengers/scenedata_avengers.go b/gamesrv/avengers/scenedata_avengers.go index 82d8328..c7bd1fe 100644 --- a/gamesrv/avengers/scenedata_avengers.go +++ b/gamesrv/avengers/scenedata_avengers.go @@ -57,14 +57,14 @@ func (this *AvengersSceneData) SceneDestroy(force bool) { } func (this *AvengersSceneData) init() bool { - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return false } - params := this.DbGameFree.GetJackpot() + params := this.GetDBGameFree().GetJackpot() this.jackpot = &base.SlotJackpotPool{} if this.jackpot.Small <= 0 { this.jackpot.Small = 0 - this.jackpot.VirtualJK = int64(params[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + this.jackpot.VirtualJK = int64(params[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } str := base.SlotsPoolMgr.GetPool(this.GetGameFreeId(), this.Platform) if str != "" { @@ -100,7 +100,7 @@ type AvengersSpinResult struct { } func (this *AvengersSceneData) CalcLinePrize(cards []int, betLines []int64, betValue int64) (spinRes AvengersSpinResult) { - taxRate := this.DbGameFree.GetTaxRate() + taxRate := this.GetDBGameFree().GetTaxRate() calcTaxScore := func(score int64, taxScore *int64) int64 { newScore := int64(float64(score) * float64(10000-taxRate) / 10000.0) if taxScore != nil { @@ -188,7 +188,7 @@ func (this *AvengersSceneData) BroadcastJackpot(sync bool) { this.lastJackpotValue = this.jackpot.VirtualJK pack := &gamehall.SCHundredSceneGetGameJackpot{} jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(this.DbGameFree.Id), + GameFreeId: proto.Int32(this.GetDBGameFree().Id), JackPotFund: proto.Int64(this.jackpot.VirtualJK), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) @@ -215,7 +215,7 @@ func (this *AvengersSceneData) PopCoinPool(winCoin int64, IsNovice bool) { } } func (this *AvengersSceneData) RecordBurstLog(name string, wincoin, totalbet int64) { - log := model.NewBurstJackpotLog(this.Platform, this.DbGameFree.GameId, this.GetGameFreeId(), name, wincoin, totalbet) + log := model.NewBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId, this.GetGameFreeId(), name, wincoin, totalbet) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { return model.InsertBurstJackpotLogs(log) }), nil, "InsertBurstJackpotLogs").Start() @@ -223,7 +223,7 @@ func (this *AvengersSceneData) RecordBurstLog(name string, wincoin, totalbet int func (this *AvengersSceneData) BurstHistory(player *AvengersPlayerData) { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.GetBurstJackpotLog(this.Platform, this.DbGameFree.GameId) + return model.GetBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId) }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { var logsp []*avengers.AvengersBurstHistoryInfo if data != nil { @@ -251,7 +251,7 @@ func (this *AvengersSceneData) GetLastBurstJackPot() time.Time { } func (this *AvengersSceneData) SetLastBurstJackPot() { var randT = rand.Intn(25200-7200+1) + 7200 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(25200-7200+1) + 7200 case 2: @@ -267,7 +267,7 @@ func (this *AvengersSceneData) SetLastBurstJackPot() { func (this *AvengersSceneData) AIAddJackPot() { if time.Now().Sub(this.lastJackPot) > 0 { var randT = rand.Intn(3) + 1 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(3) + 1 case 2: @@ -280,20 +280,20 @@ func (this *AvengersSceneData) AIAddJackPot() { randT = rand.Intn(3) + 1 } this.lastJackPot = time.Now().Add(time.Second * time.Duration(randT)) - val := int64(math.Floor(float64(this.DbGameFree.GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) + val := int64(math.Floor(float64(this.GetDBGameFree().GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) this.jackpot.VirtualJK += val } } func (this *AvengersSceneData) AIBurstJackPot() { if time.Now().Sub(this.GetLastBurstJackPot()) > 0 { this.SetLastBurstJackPot() - jackpotParams := this.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := this.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) //奖池初始值 //AI机器人爆奖 val := this.jackpot.VirtualJK this.jackpot.VirtualJK = jackpotInit - bet := int64(this.DbGameFree.GetBaseScore()) * int64(rule.LINENUM) + bet := int64(this.GetDBGameFree().GetBaseScore()) * int64(rule.LINENUM) this.RecordBurstLog(this.RandNickName(), val, bet) } } @@ -314,11 +314,11 @@ func (this *AvengersSceneData) KickPlayerByTime() { } //for _, p := range this.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // this.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(this.DbGameFree.GetPlayNumLimit()) { + // this.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(this.GetDBGameFree().GetPlayNumLimit()) { // this.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} diff --git a/gamesrv/avengers/scenepolicy_avengers.go b/gamesrv/avengers/scenepolicy_avengers.go index 68e2d47..eccf5c8 100644 --- a/gamesrv/avengers/scenepolicy_avengers.go +++ b/gamesrv/avengers/scenepolicy_avengers.go @@ -94,8 +94,8 @@ func (this *ScenePolicyAvengers) OnPlayerEnter(s *base.Scene, p *base.Player) { logger.Logger.Trace("(this *ScenePolicyAvengers) OnPlayerEnter, SceneId=", s.SceneId, " player=", p.SnId) if sceneEx, ok := s.ExtraData.(*AvengersSceneData); ok { playerEx := &AvengersPlayerData{Player: p} - playerEx.init(s) // 玩家当前信息初始化 - playerEx.score = sceneEx.DbGameFree.GetBaseScore() // 底注 + playerEx.init(s) // 玩家当前信息初始化 + playerEx.score = sceneEx.GetDBGameFree().GetBaseScore() // 底注 sceneEx.players[p.SnId] = playerEx p.ExtraData = playerEx AvengersSendRoomInfo(s, p, sceneEx, playerEx, nil) @@ -229,14 +229,14 @@ func (this *ScenePolicyAvengers) GetJackPotVal(s *base.Scene) int64 { func AvengersSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *AvengersSceneData, playerEx *AvengersPlayerData, data *avengers.GameBilledData) { logger.Logger.Trace("-------------------发送房间消息 ", s.RoomId, p.SnId) pack := &avengers.SCAvengersRoomInfo{ - RoomId: proto.Int(s.SceneId), + RoomId: s.SceneId, Creator: proto.Int32(s.Creator), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.GameMode), + GameId: s.GameId, + RoomMode: s.GameMode, Params: common.CopySliceInt64ToInt32(s.Params), State: proto.Int(s.SceneState.GetState()), Jackpot: proto.Int64(sceneEx.jackpot.VirtualJK), - GameFreeId: proto.Int32(s.DbGameFree.Id), + GameFreeId: proto.Int32(s.GetDBGameFree().Id), BilledData: data, } if playerEx != nil { @@ -252,7 +252,7 @@ func AvengersSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *AvengersSceneD pack.Players = append(pack.Players, pd) pack.BetLines = playerEx.betLines pack.FreeTimes = proto.Int32(playerEx.freeTimes) - pack.Chip = proto.Int32(s.DbGameFree.BaseScore) + pack.Chip = proto.Int32(s.GetDBGameFree().BaseScore) pack.SpinID = proto.Int64(playerEx.spinID) if playerEx.totalPriceBonus > 0 { switch playerEx.bonusStage { @@ -367,8 +367,8 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o return false } //先做底注校验 - if sceneEx.DbGameFree.GetBaseScore() != int32(params[0]) { - logger.Logger.Warnf("avengers snid[%v] opcode[%v] params[%v] BaseScore[%v]", p.SnId, opcode, params, sceneEx.DbGameFree.GetBaseScore()) + if sceneEx.GetDBGameFree().GetBaseScore() != int32(params[0]) { + logger.Logger.Warnf("avengers snid[%v] opcode[%v] params[%v] BaseScore[%v]", p.SnId, opcode, params, sceneEx.GetDBGameFree().GetBaseScore()) this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, avengers.OpResultCode_OPRC_Error, params) return false } @@ -405,7 +405,7 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o if playerEx.freeTimes <= 0 && totalBetValue > playerEx.Coin { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, avengers.OpResultCode_OPRC_CoinNotEnough, params) return false - } else if playerEx.freeTimes <= 0 && int64(sceneEx.DbGameFree.GetBetLimit()) > playerEx.Coin { //押注限制 + } else if playerEx.freeTimes <= 0 && int64(sceneEx.GetDBGameFree().GetBetLimit()) > playerEx.Coin { //押注限制 this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, avengers.OpResultCode_OPRC_CoinNotEnough, params) return false } @@ -419,7 +419,7 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o //获取当前水池的上下文环境 sceneEx.CpCtx = base.CoinPoolMgr.GetCoinPoolCtx(sceneEx.Platform, sceneEx.GetGameFreeId(), sceneEx.GroupId) //税收比例 - taxRate := sceneEx.DbGameFree.GetTaxRate() + taxRate := sceneEx.GetDBGameFree().GetTaxRate() if taxRate < 0 || taxRate > 10000 { logger.Logger.Warnf("AvengersErrorTaxRate [%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, taxRate) taxRate = 500 @@ -448,8 +448,8 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 // 奖池参数 - jackpotParams := sceneEx.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(sceneEx.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := sceneEx.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.AVENGERS_JACKPOT_InitJackpot]) * int64(sceneEx.GetDBGameFree().GetBaseScore()) //奖池初始值 var jackpotFundAdd, prizeFundAdd int64 //奖池/水池增量 if playerEx.freeTimes <= 0 { //正常模式才能记录用户的押注变化,免费模式不能改变押注 @@ -469,7 +469,7 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o ////统计参与游戏次数 //if !sceneEx.Testing && !playerEx.IsRob { // pack := &server.GWSceneEnd{ - // GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + // GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), // Players: []*server.PlayerCtx{&server.PlayerCtx{SnId: proto.Int32(playerEx.SnId), Coin: proto.Int64(playerEx.Coin)}}, // } // proto.SetDefaults(pack) @@ -668,7 +668,7 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o case AvengersPlayerHistory: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { spinid := strconv.Itoa(int(playerEx.SnId)) - gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.DbGameFree.GetGameClass(), s.GameId) //复仇者联盟存储个人操作记录不分场次,因为选场界面也需要拉去个人操作记录 + gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.GetDBGameFree().GetGameClass(), int(s.GameId)) //复仇者联盟存储个人操作记录不分场次,因为选场界面也需要拉去个人操作记录 pack := &avengers.SCAvengersPlayerHistory{} for _, v := range gpl.Data { if v.GameDetailedLogId == "" { @@ -806,7 +806,7 @@ func (this *SceneStateAvengersStart) BenchTest(s *base.Scene, p *base.Player) { file.WriteString("玩家id,当前水位,之前余额,之后余额,投入,产出,税收,小游戏,爆奖,中线倍数,中线数,剩余免费次数\r\n") oldCoin := p.Coin - p.Coin = 5000 * int64(s.DbGameFree.GetBaseScore()) + p.Coin = 5000 * int64(s.GetDBGameFree().GetBaseScore()) if playerEx, ok := p.ExtraData.(*AvengersPlayerData); ok { for i := 0; i < BENCH_CNT; i++ { startCoin := p.Coin @@ -817,7 +817,7 @@ func (this *SceneStateAvengersStart) BenchTest(s *base.Scene, p *base.Player) { inCoin := int64(playerEx.RollGameType.BaseResult.TotalBet) outCoin := playerEx.RollGameType.BaseResult.ChangeCoin + inCoin taxCoin := playerEx.RollGameType.BaseResult.Tax - lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.DbGameFree.GetBaseScore()) * float64(10000.0-s.DbGameFree.GetTaxRate()) / 10000.0 + lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.GetDBGameFree().GetBaseScore()) * float64(10000.0-s.GetDBGameFree().GetTaxRate()) / 10000.0 jackpotScore := outCoin - playerEx.RollGameType.BaseResult.ChangeCoin - int64(lineScore+0.00001) str := fmt.Sprintf("%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v\r\n", p.SnId, poolCoin, startCoin, p.Coin, inCoin, outCoin, taxCoin, @@ -860,7 +860,7 @@ func (this *SceneStateAvengersStart) WinTargetBenchTest(s *base.Scene, p *base.P } file.WriteString("玩家id,当前水位,之前余额,之后余额,投入,产出,税收,小游戏,爆奖,中线倍数,中线数,剩余免费次数\r\n") oldCoin := p.Coin - switch s.DbGameFree.GetSceneType() { + switch s.GetDBGameFree().GetSceneType() { case 1: p.Coin = 100000 case 2: @@ -883,7 +883,7 @@ func (this *SceneStateAvengersStart) WinTargetBenchTest(s *base.Scene, p *base.P inCoin := int64(playerEx.RollGameType.BaseResult.TotalBet) outCoin := playerEx.RollGameType.BaseResult.ChangeCoin + inCoin taxCoin := playerEx.RollGameType.BaseResult.Tax - lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.DbGameFree.GetBaseScore()) * float64(10000.0-s.DbGameFree.GetTaxRate()) / 10000.0 + lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.GetDBGameFree().GetBaseScore()) * float64(10000.0-s.GetDBGameFree().GetTaxRate()) / 10000.0 jackpotScore := outCoin - playerEx.RollGameType.BaseResult.WinSmallGame - int64(lineScore+0.00001) str := fmt.Sprintf("%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v\r\n", p.SnId, poolCoin, startCoin, p.Coin, inCoin, outCoin, taxCoin, @@ -915,7 +915,7 @@ func AvengersCheckAndSaveLog(sceneEx *AvengersSceneData, playerEx *AvengersPlaye //log2 playerEx.RollGameType.BaseResult.ChangeCoin = changeCoin - playerEx.RollGameType.BaseResult.BasicBet = sceneEx.DbGameFree.GetBaseScore() + playerEx.RollGameType.BaseResult.BasicBet = sceneEx.GetDBGameFree().GetBaseScore() playerEx.RollGameType.BaseResult.RoomId = int32(sceneEx.SceneId) playerEx.RollGameType.BaseResult.AfterCoin = playerEx.Coin playerEx.RollGameType.BaseResult.BeforeCoin = startCoin @@ -974,8 +974,8 @@ func AvengersCheckAndSaveLog(sceneEx *AvengersSceneData, playerEx *AvengersPlaye GameCoinTs: proto.Int64(playerEx.GameCoinTs), } gwPlayerBet := &server.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), - GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + SceneId: sceneEx.SceneId, + GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) sceneEx.SyncPlayerDatas(&base.PlayerDataParam{ diff --git a/gamesrv/base/divisionsystem.go b/gamesrv/base/divisionsystem.go index b016caf..f63a62c 100644 --- a/gamesrv/base/divisionsystem.go +++ b/gamesrv/base/divisionsystem.go @@ -2,5 +2,5 @@ package base // 提供税收和流水,根据代理需求后台进行分账 func ProfitDistribution(p *Player, tax, taxex, validFlow int64) { - //LogChannelSingleton.WriteMQData(model.GenerateTaxDivide(p.SnId, p.Platform, p.Channel, p.BeUnderAgentCode, p.PackageID, tax, taxex, validFlow, p.scene.GameId, p.scene.GameMode, p.scene.DbGameFree.GetId(), p.PromoterTree)) + //LogChannelSingleton.WriteMQData(model.GenerateTaxDivide(p.SnId, p.Platform, p.Channel, p.BeUnderAgentCode, p.PackageID, tax, taxex, validFlow, p.scene.GameId, p.scene.GameMode, p.scene.GetDBGameFree().GetId(), p.PromoterTree)) } diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index f45f35f..721aeef 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -246,7 +246,7 @@ func (this *Player) SyncFlagToWorld() { } pack := &server.GWPlayerFlag{ SnId: proto.Int32(this.SnId), - RoomId: proto.Int(this.scene.SceneId), + RoomId: this.scene.SceneId, Flag: proto.Int(this.flag), } proto.SetDefaults(pack) @@ -621,7 +621,7 @@ func (this *Player) ReportGameEvent(tax, taxex, changeCoin, validbet, validFlow, gamingTime := int32(time.Now().Sub(this.scene.GameNowTime).Seconds()) LogChannelSingleton.WriteMQData(model.GenerateGameEvent(model.CreatePlayerGameRecEvent(this.SnId, tax, taxex, changeCoin, validbet, validFlow, in, out, - int32(this.scene.GameId), this.scene.DbGameFree.GetId(), int32(this.scene.GameMode), + int32(this.scene.GameId), this.scene.GetGameFreeId(), int32(this.scene.GameMode), this.scene.GetRecordId(), this.Channel, this.BeUnderAgentCode, this.Platform, this.City, this.DeviceOS, this.CreateTime, gamingTime, gameFirstTime, gameFreeFirstTime, gameTimes, gameFreeTimes, this.LastLoginTime, this.TelephonePromoter, this.DeviceId))) diff --git a/gamesrv/base/playermgr.go b/gamesrv/base/playermgr.go index 88144ae..3db0744 100644 --- a/gamesrv/base/playermgr.go +++ b/gamesrv/base/playermgr.go @@ -55,9 +55,9 @@ func (this *PlayerMgr) AddPlayer(id int64, data []byte, ws, gs *netlib.Session) logger.Logger.Warnf("(this *PlayerMgr) AddPlayer found id=%v player exist snid=%v", id, oldPlayer.SnId) testFlag = true if oldPlayer.scene != nil { - logger.Logger.Warnf("(this *PlayerMgr) AddPlayer found snid=%v in sceneid=%v", id, oldPlayer.SnId, oldPlayer.scene.SceneId) - if SceneMgrSington.GetScene(oldPlayer.scene.SceneId) != nil { - logger.Logger.Warnf("(this *PlayerMgr) AddPlayer found snid=%v in sceneid=%v SceneMgrSington.GetScene(oldPlayer.scene.sceneId) != nil", id, oldPlayer.SnId, oldPlayer.scene.SceneId) + logger.Logger.Warnf("(this *PlayerMgr) AddPlayer found id=%v snid=%v in sceneid=%v", id, oldPlayer.SnId, oldPlayer.scene.SceneId) + if SceneMgrSington.GetScene(int(oldPlayer.scene.SceneId)) != nil { + logger.Logger.Warnf("(this *PlayerMgr) AddPlayer found id=%v snid=%v in sceneid=%v SceneMgrSington.GetScene(oldPlayer.scene.sceneId) != nil", id, oldPlayer.SnId, oldPlayer.scene.SceneId) } } this.DelPlayer(id) diff --git a/gamesrv/base/replay_recorder.go b/gamesrv/base/replay_recorder.go index e4157d3..45c9a37 100644 --- a/gamesrv/base/replay_recorder.go +++ b/gamesrv/base/replay_recorder.go @@ -13,11 +13,6 @@ import ( "mongo.games.com/goserver/core/netlib" ) -const ( - ReplayServerType int = 8 - ReplayServerId = 801 -) - var _replayIgnorePacketIds = map[int]bool{} type ReplayRecorder struct { @@ -97,13 +92,13 @@ func (this *ReplayRecorder) Fini(s *Scene) { // todo dev //Rec: this.rs, LogId: proto.String(this.Logid), - GameId: proto.Int32(s.DbGameFree.GetGameId()), - RoomMode: proto.Int32(s.DbGameFree.GetGameMode()), + GameId: int32(s.GetGameId()), + RoomMode: int32(s.GetGameMode()), NumOfGames: proto.Int(s.NumOfGames), Platform: proto.String(s.Platform), DatasVer: proto.Int32(s.rrVer), GameFreeid: proto.Int32(s.GetGameFreeId()), - RoomId: proto.Int(s.SceneId), + RoomId: s.SceneId, } if s.ClubId != 0 { pack.ClubId = proto.Int32(s.ClubId) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index bd8eeee..2d7ec35 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -11,7 +11,6 @@ import ( "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" - "mongo.games.com/goserver/core/timer" "mongo.games.com/goserver/core/utils" srvlibproto "mongo.games.com/goserver/srvlib/protocol" @@ -37,163 +36,96 @@ type CanRebindSnId interface { RebindPlayerSnId(oldSnId, newSnId int32) } -type ItemInfo struct { - Id int32 - Num int64 -} - +// todo 结构优化 type Scene struct { - ws *netlib.Session // 大厅服 - Rand *rand.Rand // 随机数生成器 - ExtraData interface{} // 房间数据 - matchData interface{} // 比赛房数据 - aiMgr AIMgr // - WithLocalAI bool // - SceneId int // 房间id - GameId int // 游戏模式id - GameMode int // 弃用了,都是0 - SceneMode int // 房间模式,如:公共房间 common.SceneMode_Public - SceneType int // 场次,新手场,中级场... - Platform string // 平台id - Params []int64 - Creator int32 - agentor int32 - hallId int32 - replayCode string + *server.WGCreateScene + ws *netlib.Session // 大厅服 + Rand *rand.Rand // 随机数生成器 + ExtraData interface{} // 房间数据 + aiMgr AIMgr // + WithLocalAI bool // disbandGen int //第几次解散申请 disbandParam []int64 //解散参数 disbandPos int32 //发起解散的玩家位置 disbandTs int64 //解散发起时间戳 - playerNum int //游戏人数 realPlayerNum int //真实玩家人数 robotNum int //机器人数量 robotLimit int //最大限制机器人数量 robotNumLastInvite int //上次邀请机器人时的数量 - TotalOfGames int //游戏总局数 NumOfGames int //局数 Players map[int32]*Player //参与者 audiences map[int32]*Player //观众 sp ScenePolicy //场景游戏策略 - //mp MatchPolicy //场景比赛策略 - rr *ReplayRecorder //回放记录器 - rrVer int32 //录像的协议版本号 - DbGameFree *server.DB_GameFree //自由场数据 - SceneState SceneState //场景状态 - hDisband timer.TimerHandle //解散handle - StateStartTime time.Time //状态开始时间 - stateEndTime time.Time //状态结束时间 - GameStartTime time.Time //游戏开始计时时间 - GameNowTime time.Time //当局游戏开始时间 - nextInviteTime time.Time //下次邀请机器人时间 - inviteInterval int64 //邀请间隔 - pause bool - Gaming bool - destroyed bool - completed bool - Testing bool //是否为测试场 - graceDestroy bool //等待销毁 - replayAddId int32 - KeyGameId string //游戏类型唯一ID - KeyGamefreeId string //游戏场次唯一id - KeyGameDif string - GroupId int32 //分组id - bEnterAfterStart bool //是否允许中途加入 - ClubId int32 - RoomId string //俱乐部那个包间 - RoomPos int32 //房间桌号 - PumpCoin int32 //抽水比例,同一个俱乐部下面的抽水比例是一定的,百分比 - DealyTime int64 //结算延时时间 - CpCtx model.CoinPoolCtx //水池环境 - CpControlled bool //被水池控制了 - timerRandomRobot int64 - nogDismiss int //检查机器人离场时的局数(同一局只检查一次) - //playerStatement map[int32]*webapi.PlayerStatement //玩家流水记录 - SystemCoinOut int64 //本局游戏机器人营收 机器人赢:正值 机器人输:负值 - ChessRank []int32 - Items []*ItemInfo - - BaseScore int32 //tienlen游戏底分 - MatchId int64 //标记本次比赛的id,并不是后台id - MatchFinals bool //比赛场决赛 - MatchRound int64 - MatchCurPlayerNum int64 - MatchNextNeed int64 - MatchType int64 // 0.普通场 1.锦标赛 2.冠军赛 3.vip专属 - RealCtrl bool - CycleID string + rr *ReplayRecorder //回放记录器 + rrVer int32 //录像的协议版本号 + SceneState SceneState //场景状态 + StateStartTime time.Time //状态开始时间 + stateEndTime time.Time //状态结束时间 + GameStartTime time.Time //游戏开始计时时间 + GameNowTime time.Time //当局游戏开始时间 + nextInviteTime time.Time //下次邀请机器人时间 + inviteInterval int64 //邀请间隔 + pause bool + Gaming bool + destroyed bool + completed bool + Testing bool //是否为测试场 + graceDestroy bool //等待销毁 + replayAddId int32 + KeyGameId string //游戏类型唯一ID + KeyGamefreeId string //游戏场次唯一id + KeyGameDif string + GroupId int32 //分组id + bEnterAfterStart bool //是否允许中途加入 + ClubId int32 + RoomId string //俱乐部那个包间 + RoomPos int32 //房间桌号 + PumpCoin int32 //抽水比例,同一个俱乐部下面的抽水比例是一定的,百分比 + DealyTime int64 //结算延时时间 + CpCtx model.CoinPoolCtx //水池环境 + CpControlled bool //被水池控制了 + timerRandomRobot int64 + nogDismiss int //检查机器人离场时的局数(同一局只检查一次) + SystemCoinOut int64 //本局游戏机器人营收 机器人赢:正值 机器人输:负值 + ChessRank []int32 + RealCtrl bool + CycleID string } -func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, params []int64, - agentor, creator int32, replayCode string, hallId, groupId, totalOfGames int32, dbGameFree *server.DB_GameFree, - bEnterAfterStart bool, baseScore int32, playerNum int, cherank []int32) *Scene { +func NewScene(args *CreateSceneParam) *Scene { + gameId := int(args.GetGameId()) + gameMode := int(args.GetGameMode()) sp := GetScenePolicy(gameId, gameMode) if sp == nil { logger.Logger.Errorf("Game id %v not register in ScenePolicyPool.", gameId) return nil } + tNow := time.Now() s := &Scene{ - ws: ws, - SceneId: sceneId, - GameId: gameId, - GameMode: gameMode, - SceneMode: sceneMode, - SceneType: int(dbGameFree.GetSceneType()), - Params: params, - Creator: creator, - replayCode: replayCode, + WGCreateScene: args.WGCreateScene, + ws: args.Session, Players: make(map[int32]*Player), audiences: make(map[int32]*Player), sp: sp, - hDisband: timer.TimerHandle(0), GameStartTime: tNow, - hallId: hallId, - Platform: platform, - DbGameFree: dbGameFree, inviteInterval: model.GameParamData.RobotInviteInitInterval, - GroupId: groupId, - bEnterAfterStart: bEnterAfterStart, - TotalOfGames: int(totalOfGames), - BaseScore: baseScore, - playerNum: playerNum, - ChessRank: cherank, + bEnterAfterStart: args.GetEnterAfterStart(), + ChessRank: args.GetChessRank(), + KeyGameId: strconv.Itoa(int(args.GetGameId())), + KeyGamefreeId: strconv.Itoa(int(args.GetDBGameFree().GetId())), + KeyGameDif: args.GetDBGameFree().GetGameDif(), } s.CycleID, _ = model.AutoIncGameLogId() - if s != nil && s.init() { - logger.Logger.Trace("NewScene init success.") - if !s.Testing { - s.rrVer = ReplayRecorderVer[gameId] - s.RecordReplayStart() - } - return s - } else { - logger.Logger.Trace("NewScene init failed.") - return nil - } + s.init() + return s } -//func (this *Scene) BindAIMgr(aimgr AIMgr) { -// this.aiMgr = aimgr -//} - -// 根据gamedifid,转为gameid,然后返回所有的相同gameid的数据 -func (this *Scene) GetTotalTodayDaliyGameData(keyGameId string, pd *Player) *model.PlayerGameStatics { - todayData := model.NewPlayerGameStatics() - - if pd.TodayGameData == nil { - return todayData +func (this *Scene) GetSceneType() int32 { + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetSceneType() } - - if pd.TodayGameData.CtrlData == nil { - return todayData - } - - if info, ok := pd.TodayGameData.CtrlData[keyGameId]; ok { - todayData.TotalIn += info.TotalIn - todayData.TotalOut += info.TotalOut - } - - return todayData + return 0 } func (this *Scene) RebindPlayerSnId(oldSnId, newSnId int32) { @@ -220,10 +152,6 @@ func (this *Scene) init() bool { this.Rand = rand.New(rand.NewSource(sceneRandSeed)) this.nextInviteTime = tNow.Add(time.Second * time.Duration(this.Rand.Int63n(model.GameParamData.RobotInviteInitInterval))) this.RandRobotCnt() - - this.KeyGameId = strconv.Itoa(int(this.DbGameFree.GetGameId())) - this.KeyGamefreeId = strconv.Itoa(int(this.DbGameFree.GetId())) - this.KeyGameDif = this.DbGameFree.GetGameDif() return true } @@ -236,22 +164,13 @@ func (this *Scene) GetParam(idx int) int64 { } func (this *Scene) GetBetMap() []int64 { - return this.DbGameFree.GetOtherIntParams() -} - -func (this *Scene) IsDisbanding() bool { - return this.hDisband != timer.TimerHandle(0) + return this.GetDBGameFree().GetOtherIntParams() } func (this *Scene) GetGameFreeId() int32 { - return this.DbGameFree.Id -} -func (this *Scene) GetDBGameFree() *server.DB_GameFree { - return this.DbGameFree -} -func (this *Scene) GetPlatform() string { - return this.Platform + return this.GetDBGameFree().GetId() } + func (this *Scene) GetKeyGameId() string { return this.KeyGameId } @@ -259,10 +178,10 @@ func (this *Scene) SetKeyGameId(keyGameId string) { this.KeyGameId = keyGameId } func (this *Scene) GetSceneId() int { - return this.SceneId + return int(this.SceneId) } func (this *Scene) SetSceneId(sceneId int) { - this.SceneId = sceneId + this.SceneId = int32(sceneId) } func (this *Scene) GetGroupId() int32 { return this.GroupId @@ -283,22 +202,22 @@ func (this *Scene) SetSceneState(state SceneState) { this.SceneState = state } func (this *Scene) GetGameId() int { - return this.GameId + return int(this.GameId) } func (this *Scene) SetGameId(gameId int) { - this.GameId = gameId + this.GameId = int32(gameId) } func (this *Scene) GetPlayerNum() int { - return this.playerNum + return int(this.WGCreateScene.GetPlayerNum()) } func (this *Scene) SetPlayerNum(playerNum int) { - this.playerNum = playerNum + this.PlayerNum = int32(playerNum) } func (this *Scene) GetGameMode() int { - return this.GameMode + return int(this.GameMode) } func (this *Scene) SetGameMode(gameMode int) { - this.GameMode = gameMode + this.GameMode = int32(gameMode) } func (this *Scene) GetGaming() bool { return this.Gaming @@ -319,17 +238,15 @@ func (this *Scene) SetCreator(creator int32) { this.Creator = creator } func (this *Scene) GetSceneMode() int { - return this.SceneMode + return int(this.SceneMode) } func (this *Scene) SetSceneMode(sceneMode int) { - this.SceneMode = sceneMode + this.SceneMode = int32(sceneMode) } func (this *Scene) GetParams() []int64 { return this.Params } -func (this *Scene) SetParams(params []int64) { - this.Params = params -} + func (this *Scene) GetStateStartTime() time.Time { return this.StateStartTime } @@ -453,9 +370,9 @@ func (this *Scene) PlayerEnter(p *Player, isLoaded bool) { p.scene = this pack := &gamehall.SCEnterRoom{ - GameId: proto.Int(this.GameId), - ModeType: proto.Int(this.GameMode), - RoomId: proto.Int(this.SceneId), + GameId: this.GameId, + ModeType: this.GameMode, + RoomId: this.SceneId, OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, Params: []int32{}, ClubId: proto.Int32(this.ClubId), @@ -465,7 +382,7 @@ func (this *Scene) PlayerEnter(p *Player, isLoaded bool) { if p.IsRob { this.robotNum++ - logger.Logger.Tracef("(this *Scene) PlayerEnter(%v) robot(%v) robotlimit(%v)", this.DbGameFree.GetName()+this.DbGameFree.GetTitle(), this.robotNum, this.robotLimit) + logger.Logger.Tracef("(this *Scene) PlayerEnter(%v) robot(%v) robotlimit(%v)", this.GetDBGameFree().GetName()+this.GetDBGameFree().GetTitle(), this.robotNum, this.robotLimit) } else { p.Trusteeship = 0 p.ValidCacheBetTotal = 0 @@ -482,7 +399,7 @@ func (this *Scene) PlayerEnter(p *Player, isLoaded bool) { utils.RunPanicless(func() { this.sp.OnPlayerEnter(this, p) }) if p.WBLevel < 0 { - WarningBlackPlayer(p.SnId, this.DbGameFree.Id) + WarningBlackPlayer(p.SnId, this.GetDBGameFree().Id) } this.ResetNextInviteTime() @@ -501,7 +418,7 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { pack := &gamehall.SCLeaveRoom{ //OpRetCode: p.opCode, //protocol.OpResultCode_OPRC_Hundred_YouHadBetCannotLeave, OpRetCode: gamehall.OpResultCode_Game(p.OpCode), - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, } if pack.GetOpRetCode() == gamehall.OpResultCode_Game_OPRC_Sucess_Game { //不能这么做,机器人有特殊判定 @@ -523,7 +440,7 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { //send world离开房间 pack := &server.GWPlayerLeave{ - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, PlayerId: proto.Int32(p.SnId), Reason: proto.Int(reason), ServiceFee: proto.Int64(p.serviceFee), @@ -533,7 +450,7 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { LostTimes: proto.Int(p.lostTimes), TotalConvertibleFlow: proto.Int64(p.TotalConvertibleFlow), ValidCacheBetTotal: proto.Int64(p.ValidCacheBetTotal), - MatchId: this.MatchId, + MatchId: this.GetMatch().GetMatchSortId(), CurIsWin: proto.Int64(p.CurIsWin), // 负数:输 0:平局 正数:赢 } matchRobotGrades := p.MatchRobotGrades @@ -551,7 +468,7 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { } pack.GameCoinTs = proto.Int64(p.GameCoinTs) if !p.IsLocal { - data, err := p.MarshalData(this.GameId) + data, err := p.MarshalData(int(this.GameId)) if err == nil { pack.PlayerData = data } @@ -581,7 +498,7 @@ func (this *Scene) PlayerLeave(p *Player, reason int, isBill bool) { } this.robotNum = num } - logger.Logger.Tracef("(this *Scene) PlayerLeave(%v) robot(%v) robotlimit(%v)", this.DbGameFree.GetName()+this.DbGameFree.GetTitle(), this.robotNum, this.robotLimit) + logger.Logger.Tracef("(this *Scene) PlayerLeave(%v) robot(%v) robotlimit(%v)", this.GetDBGameFree().GetName()+this.GetDBGameFree().GetTitle(), this.robotNum, this.robotLimit) } else { this.realPlayerNum-- this.RandRobotCnt() @@ -596,9 +513,9 @@ func (this *Scene) AudienceEnter(p *Player, isload bool) { p.scene = this p.MarkFlag(PlayerState_Audience) pack := &gamehall.SCEnterRoom{ - GameId: proto.Int(this.GameId), - ModeType: proto.Int(this.GameMode), - RoomId: proto.Int(this.SceneId), + GameId: this.GameId, + ModeType: this.GameMode, + RoomId: this.SceneId, OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, } proto.SetDefaults(pack) @@ -618,7 +535,7 @@ func (this *Scene) AudienceLeave(p *Player, reason int) { if !this.CanChangeCoinScene(p) { pack := &gamehall.SCLeaveRoom{ OpRetCode: gamehall.OpResultCode_Game(p.OpCode), //protocol.OpResultCode_OPRC_Hundred_YouHadBetCannotLeave, - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, } proto.SetDefaults(pack) p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_LEAVEROOM), pack) @@ -630,7 +547,7 @@ func (this *Scene) AudienceLeave(p *Player, reason int) { delete(this.audiences, p.SnId) //send world离开房间 pack := &server.GWPlayerLeave{ - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, PlayerId: proto.Int32(p.SnId), Reason: proto.Int(reason), TotalConvertibleFlow: proto.Int64(p.TotalConvertibleFlow), @@ -738,11 +655,11 @@ func (this *Scene) PlayerRehold(snid int32, sid int64, gs *netlib.Session) { func (this *Scene) PlayerReturn(p *Player, isLoaded bool) { logger.Logger.Trace("(this *Scene) PlayerReturn") pack := &gamehall.SCReturnRoom{ - RoomId: proto.Int(this.SceneId), - GameId: proto.Int(this.GameId), - ModeType: proto.Int(this.GameMode), + RoomId: this.SceneId, + GameId: this.GameId, + ModeType: this.GameMode, Params: common.CopySliceInt64ToInt32(this.Params), - HallId: proto.Int32(this.hallId), + HallId: this.GetDBGameFree().GetId(), IsLoaded: proto.Bool(isLoaded), OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, ClubId: proto.Int32(this.ClubId), @@ -964,7 +881,7 @@ func (this *Scene) Destroy(force bool) { } isCompleted := this.sp.IsCompleted(this) || this.completed - SceneMgrSington.DestroyScene(this.SceneId) + SceneMgrSington.DestroyScene(int(this.SceneId)) pack := &server.GWDestroyScene{ SceneId: int64(this.SceneId), IsCompleted: isCompleted, @@ -998,7 +915,7 @@ func (this *Scene) IsCustom() bool { } func (this *Scene) IsFull() bool { - return len(this.Players) >= this.playerNum + return len(this.Players) >= this.GetPlayerNum() } // 大厅场 @@ -1017,15 +934,15 @@ func (this *Scene) IsHundredScene() bool { } func (this *Scene) GetCoinSceneLowerThanKick() int64 { - if this.DbGameFree != nil { - return this.DbGameFree.GetLowerThanKick() + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetLowerThanKick() } return 0 } func (this *Scene) GetCoinSceneMaxCoinLimit() int64 { - if this.DbGameFree != nil { - return this.DbGameFree.GetMaxCoinLimit() + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetMaxCoinLimit() } return 0 } @@ -1044,7 +961,7 @@ func (this *Scene) CoinInLimitLocal(coin int64) bool { // NotCoinInLimitType 金额超出入场限额,返回踢出类型 func (this *Scene) NotCoinInLimitType(coin int64) int { - if common.IsLocalGame(this.GameId) { + if common.IsLocalGame(int(this.GameId)) { minCoin := this.GetLimitCoin() if minCoin != 0 && coin < minCoin { return common.PlayerLeaveReason_Bekickout @@ -1071,7 +988,7 @@ func (this *Scene) NotCoinInLimitType(coin int64) int { // CoinInLimit 单入场限额检查 func (this *Scene) CoinInLimit(coin int64) bool { - if common.IsLocalGame(this.GameId) { + if common.IsLocalGame(int(this.GameId)) { return this.CoinInLimitLocal(coin) } @@ -1094,7 +1011,7 @@ func (this *Scene) GetLimitCoin() int64 { limitCoin := int64(0) tmpIds := []int32{} for _, data := range srvdata.PBDB_CreateroomMgr.Datas.GetArr() { - if int(data.GameId) == this.GameId && int(data.GameSite) == this.SceneType { + if data.GameId == this.GameId && data.GameSite == this.GetDBGameFree().GetSceneType() { betRange := data.GetBetRange() if len(betRange) == 0 { continue @@ -1143,8 +1060,8 @@ func (this *Scene) CoinOverMaxLimit(coin int64, p *Player) bool { } } } else { - if this.DbGameFree != nil { - limit := this.DbGameFree.GetRobotLimitCoin() + if this.GetDBGameFree() != nil { + limit := this.GetDBGameFree().GetRobotLimitCoin() if len(limit) >= 2 { comp := common.RandInt(int(limit[0]), int(limit[1])) if coin > int64(comp) { @@ -1168,32 +1085,32 @@ func (this *Scene) CorrectBillCoin(coin, limit1, limit2 int64) int64 { } func (this *Scene) GetCoinSceneServiceFee() int32 { - if this.DbGameFree != nil { - return this.DbGameFree.GetServiceFee() + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetServiceFee() } return 0 } func (this *Scene) GetCoinSceneTypeId() int32 { - if this.DbGameFree != nil { - return this.DbGameFree.Id + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().Id } return 0 } func (this *Scene) GetCoinSceneName() string { - if this.DbGameFree != nil { - return this.DbGameFree.GetName() + this.DbGameFree.GetTitle() + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetName() + this.GetDBGameFree().GetTitle() } return "" } func (this *Scene) GetHundredSceneName() string { - if this.IsHundredScene() && this.DbGameFree != nil { - if this.DbGameFree.GetName() == this.DbGameFree.GetTitle() { - return this.DbGameFree.GetTitle() + if this.IsHundredScene() && this.GetDBGameFree() != nil { + if this.GetDBGameFree().GetName() == this.GetDBGameFree().GetTitle() { + return this.GetDBGameFree().GetTitle() } else { - return this.DbGameFree.GetName() + this.DbGameFree.GetTitle() + return this.GetDBGameFree().GetName() + this.GetDBGameFree().GetTitle() } } return "" @@ -1272,10 +1189,10 @@ func (this *Scene) SyncSceneState(state int) { func (this *Scene) NotifySceneRoundStart(round int) { pack := &server.GWSceneStart{ - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, CurrRound: proto.Int(round), Start: proto.Bool(true), - MaxRound: proto.Int(this.TotalOfGames), + MaxRound: this.TotalOfGames, } proto.SetDefaults(pack) this.SendToWorld(int(server.SSPacketID_PACKET_GW_SCENESTART), pack) @@ -1283,10 +1200,10 @@ func (this *Scene) NotifySceneRoundStart(round int) { func (this *Scene) NotifySceneRoundPause() { pack := &server.GWSceneStart{ - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, Start: proto.Bool(false), CurrRound: proto.Int(this.NumOfGames), - MaxRound: proto.Int(this.TotalOfGames), + MaxRound: this.TotalOfGames, } proto.SetDefaults(pack) this.SendToWorld(int(server.SSPacketID_PACKET_GW_SCENESTART), pack) @@ -1295,7 +1212,7 @@ func (this *Scene) NotifySceneRoundPause() { func (this *Scene) SyncGameState(sec, bl int) { if this.SceneState != nil { pack := &server.GWGameState{ - SceneId: proto.Int(this.SceneId), + SceneId: this.SceneId, State: proto.Int(this.SceneState.GetState()), Ts: proto.Int64(time.Now().Unix()), Sec: proto.Int(sec), @@ -1309,8 +1226,8 @@ func (this *Scene) SyncGameState(sec, bl int) { // SyncScenePlayer 游戏开始的时候同步防伙牌数据 func (this *Scene) SyncScenePlayer() { pack := &server.GWScenePlayerLog{ - GameId: proto.Int(this.GameId), - GameFreeId: proto.Int32(this.DbGameFree.GetId()), + GameId: this.GameId, + GameFreeId: proto.Int32(this.GetDBGameFree().GetId()), } for _, value := range this.Players { if value.IsRob || !value.IsGameing() { @@ -1323,7 +1240,7 @@ func (this *Scene) SyncScenePlayer() { func (this *Scene) RecordReplayStart() { if !this.IsHundredScene() && !this.IsMatchScene() { - logger.Logger.Trace("RecordReplayStart-----", this.replayCode, this.NumOfGames, this.replayAddId) + logger.Logger.Trace("RecordReplayStart-----", this.GetReplayCode(), this.NumOfGames, this.replayAddId) id := fmt.Sprintf("%d%d%v%d", this.GameId, this.SceneId, this.GameNowTime.Format(ReplayIdTf), this.replayAddId) this.rr = NewReplayRecorder(id) } @@ -1331,7 +1248,7 @@ func (this *Scene) RecordReplayStart() { func (this *Scene) RecordReplayOver() { if !this.Testing && !this.IsHundredScene() && !this.IsMatchScene() { - logger.Logger.Trace("RecordReplayOver-----", this.replayCode, this.NumOfGames, this.replayAddId) + logger.Logger.Trace("RecordReplayOver-----", this.GetReplayCode(), this.NumOfGames, this.replayAddId) this.replayAddId++ this.rr.Fini(this) @@ -1370,7 +1287,7 @@ func (this *Scene) TryDismissRob(params ...int) { this.nogDismiss = this.NumOfGames //如果是满桌并且是禁止匹配真人,那么保持满桌几局 - if this.DbGameFree.GetMatchTrueMan() == common.MatchTrueMan_Forbid && this.IsFull() && rand.Intn(4) == 1 { + if this.GetDBGameFree().GetMatchTrueMan() == common.MatchTrueMan_Forbid && this.IsFull() && rand.Intn(4) == 1 { hasLeave = true } @@ -1386,7 +1303,7 @@ func (this *Scene) TryDismissRob(params ...int) { } } - if !hasLeave && this.DbGameFree.GetMatchTrueMan() != common.MatchTrueMan_Forbid && len(params) > 0 && + if !hasLeave && this.GetDBGameFree().GetMatchTrueMan() != common.MatchTrueMan_Forbid && len(params) > 0 && params[0] == 1 && this.IsFull() && common.RandInt(10000) < 4000 { for _, r := range this.Players { if r.IsRob { @@ -1430,7 +1347,7 @@ func (this *Scene) TryDismissRob(params ...int) { func (this *Scene) CreateGameRecPacket() *server.GWGameRec { return &server.GWGameRec{ - RoomId: proto.Int(this.SceneId), + RoomId: this.SceneId, NumOfGames: proto.Int(this.NumOfGames), GameTime: proto.Int(int(time.Now().Sub(this.GameStartTime) / time.Second)), } @@ -1507,7 +1424,7 @@ func (this *Scene) CoinPoolCanOut() bool { if setting != nil { return int32(noRobotPlayerCount) >= setting.GetMinOutPlayerNum() } - return int32(noRobotPlayerCount) >= this.dbGameFree.GetMinOutPlayerNum() + return int32(noRobotPlayerCount) >= this.GetDBGameFree().GetMinOutPlayerNum() */ } @@ -1531,8 +1448,8 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga if this != nil { if !this.Testing { //测试场屏蔽掉 trend20Lately := gameDetailedParam.Trend20Lately - baseScore := this.DbGameFree.GetBaseScore() - if common.IsLocalGame(this.GameId) { + baseScore := this.GetDBGameFree().GetBaseScore() + if common.IsLocalGame(int(this.GameId)) { baseScore = this.BaseScore } if this.IsCoinScene() { @@ -1541,13 +1458,13 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga if _, ok := mapPlatform[p.Platform]; !ok { mapPlatform[p.Platform] = true log := model.NewGameDetailedLogEx(logid, int32(this.GameId), int32(this.SceneId), - this.DbGameFree.GetGameMode(), this.DbGameFree.Id, int32(len(this.Players)), + this.GetDBGameFree().GetGameMode(), this.GetDBGameFree().Id, int32(len(this.Players)), int32(time.Now().Unix()-this.GameNowTime.Unix()), baseScore, - gamedetailednote, p.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[this.GameId], trend20Lately, + gamedetailednote, p.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[int(this.GameId)], trend20Lately, gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool) if log != nil { if this.IsMatchScene() { - log.MatchId = this.MatchId + log.MatchId = this.GetMatch().GetMatchSortId() } if this.IsCustom() { log.CycleId = this.CycleID @@ -1558,13 +1475,13 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga } } else { log := model.NewGameDetailedLogEx(logid, int32(this.GameId), int32(this.SceneId), - this.DbGameFree.GetGameMode(), this.DbGameFree.Id, int32(len(this.Players)), + this.GetDBGameFree().GetGameMode(), this.GetDBGameFree().Id, int32(len(this.Players)), int32(time.Now().Unix()-this.GameNowTime.Unix()), baseScore, - gamedetailednote, this.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[this.GameId], trend20Lately, + gamedetailednote, this.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[int(this.GameId)], trend20Lately, gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool) if log != nil { if this.IsMatchScene() { - log.MatchId = this.MatchId + log.MatchId = this.GetMatch().GetMatchSortId() } if this.IsCustom() { log.CycleId = this.CycleID @@ -1628,7 +1545,7 @@ func (this *Scene) SaveFriendRecord(snid int32, isWin int32, billCoin int64, bas if this.SceneMode == common.SceneMode_Private { return } - log := model.NewFriendRecordLogEx(this.Platform, snid, isWin, int32(this.GameId), baseScore, billCoin, this.MatchType) + log := model.NewFriendRecordLogEx(this.Platform, snid, isWin, this.GameId, baseScore, billCoin, int64(this.GetMatch().GetMatchType())) if log != nil { LogChannelSingleton.WriteLog(log) } @@ -1642,12 +1559,12 @@ func (this *Scene) SaveGamePlayerListLog(snid int32, param *SaveGamePlayerListLo playerEx := this.GetPlayer(snid) //有些结算的时候,玩家已经退场,不要用是否在游戏,0709,修改为扣税后数值 if playerEx != nil && !param.IsLeave && !playerEx.IsRob && (param.IsFree || param.TotalIn != 0 || param.TotalOut != 0) { - totalFlow := param.ValidFlow * int64(this.DbGameFree.GetBetWaterRate()) / 100 + totalFlow := param.ValidFlow * int64(this.GetDBGameFree().GetBetWaterRate()) / 100 playerEx.TotalConvertibleFlow += totalFlow playerEx.TotalFlow += totalFlow playerEx.ValidCacheBetTotal += param.ValidBet //报表统计 - //playerEx.SaveReportForm(int(this.DbGameFree.GetGameClass()), this.SceneMode, this.KeyGameId, + //playerEx.SaveReportForm(int(this.GetDBGameFree().GetGameClass()), this.SceneMode, this.KeyGameId, // param.WinAmountNoAnyTax, totalFlow, param.ValidBet) //分配利润 ProfitDistribution(playerEx, param.TaxCoin, param.ClubPumpCoin, totalFlow) @@ -1663,8 +1580,8 @@ func (this *Scene) SaveGamePlayerListLog(snid int32, param *SaveGamePlayerListLo this.GameId == common.GameId_TamQuoc { //复仇者联盟强制为0,所有场次操作记录放一起 roomType = 0 } - baseScore := this.DbGameFree.GetBaseScore() - if common.IsLocalGame(this.GameId) { + baseScore := this.GetDBGameFree().GetBaseScore() + if common.IsLocalGame(int(this.GameId)) { baseScore = this.BaseScore } @@ -1674,10 +1591,10 @@ func (this *Scene) SaveGamePlayerListLog(snid int32, param *SaveGamePlayerListLo } log := model.NewGamePlayerListLogEx(snid, param.LogId, param.Platform, param.Channel, param.Promoter, param.PackageTag, - int32(this.GameId), baseScore, int32(this.SceneId), this.DbGameFree.GetGameMode(), + this.GameId, baseScore, this.SceneId, int32(this.GetGameMode()), this.GetGameFreeId(), param.TotalIn, param.TotalOut, this.ClubId, this.RoomId, param.TaxCoin, param.ClubPumpCoin, roomType, - param.BetAmount, param.WinAmountNoAnyTax, this.KeyGameId, Name, this.DbGameFree.GetGameClass(), - param.IsFirstGame, this.MatchId, this.MatchType, param.IsFree, param.WinSmallGame, param.WinTotal) + param.BetAmount, param.WinAmountNoAnyTax, this.KeyGameId, Name, this.GetDBGameFree().GetGameClass(), + param.IsFirstGame, this.GetMatch().GetMatchSortId(), int64(this.GetMatch().GetMatchType()), param.IsFree, param.WinSmallGame, param.WinTotal) if log != nil { LogChannelSingleton.WriteLog(log) } @@ -1708,9 +1625,9 @@ func (this *Scene) RobotIsLimit() bool { return true } // 房间需要给真人留一个空位 - //if this.DbGameFree.GetMatchTrueMan() == common.MatchTrueMan_Priority && this.playerNum-this.realPlayerNum-1 <= this.robotNum { + //if this.GetDBGameFree().GetMatchTrueMan() == common.MatchTrueMan_Priority && this.playerNum-this.realPlayerNum-1 <= this.robotNum { // 没有真人的房间需要给真人留一个空位 - if this.DbGameFree.GetMatchTrueMan() == common.MatchTrueMan_Priority && this.playerNum-1 <= this.robotNum { + if this.GetDBGameFree().GetMatchTrueMan() == common.MatchTrueMan_Priority && this.GetPlayerNum()-1 <= this.robotNum { return true } } else if this.IsHundredScene() { @@ -1723,11 +1640,11 @@ func (this *Scene) RobotIsLimit() bool { } func (this *Scene) RandRobotCnt() { - if this.DbGameFree != nil { - if this.DbGameFree.GetMatchMode() == 1 { + if this.GetDBGameFree() != nil { + if this.GetDBGameFree().GetMatchMode() == 1 { return } - numrng := this.DbGameFree.GetRobotNumRng() + numrng := this.GetDBGameFree().GetRobotNumRng() if len(numrng) >= 2 { if numrng[1] == numrng[0] { this.robotLimit = int(numrng[0]) @@ -1748,7 +1665,7 @@ func (this *Scene) GetRobotTime() int64 { } func (this *Scene) IsPreCreateScene() bool { - return this.DbGameFree.GetCreateRoomNum() > 0 + return this.GetDBGameFree().GetCreateRoomNum() > 0 } func (this *Scene) TryInviteRobot() { @@ -1756,7 +1673,7 @@ func (this *Scene) TryInviteRobot() { return } // 游戏配置错误 - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return } // 私有房间不邀请机器人,比赛场部邀请机器人 @@ -1764,11 +1681,11 @@ func (this *Scene) TryInviteRobot() { return } // 队列匹配不邀请机器人 - if this.DbGameFree.GetMatchMode() == 1 { + if this.GetDBGameFree().GetMatchMode() == 1 { return } // 不使用机器人 - if this.DbGameFree.GetBot() == 0 { //机器人不进的场 + if this.GetDBGameFree().GetBot() == 0 { //机器人不进的场 return } @@ -1782,7 +1699,7 @@ func (this *Scene) TryInviteRobot() { return } - switch this.DbGameFree.GetGameType() { + switch this.GetDBGameFree().GetGameType() { case common.GameType_Fishing: if this.robotNum >= this.robotLimit { return @@ -1818,8 +1735,8 @@ func (this *Scene) TryInviteRobot() { } hadCnt := len(this.Players) robCnt = this.robotLimit - this.robotNum - if robCnt > this.playerNum-hadCnt { - robCnt = this.playerNum - hadCnt + if robCnt > this.GetPlayerNum()-hadCnt { + robCnt = this.GetPlayerNum() - hadCnt } } else if this.IsHundredScene() { robCnt = this.robotLimit - this.robotNum @@ -1830,7 +1747,7 @@ func (this *Scene) TryInviteRobot() { return } hadCnt := len(this.Players) - robCnt = this.playerNum - hadCnt + robCnt = this.GetPlayerNum() - hadCnt if this.realPlayerNum == 0 { //一个真人都没有,不让机器人坐满房间 robCnt-- } @@ -1838,7 +1755,7 @@ func (this *Scene) TryInviteRobot() { } if robCnt > 0 { var num int32 - if this.DbGameFree.GameId == common.GameId_ChesstitiansCambodianRobot { + if this.GetDBGameFree().GameId == common.GameId_ChesstitiansCambodianRobot { num = int32(robCnt) } else { num = this.Rand.Int31n(int32(robCnt + 1)) @@ -1847,11 +1764,11 @@ func (this *Scene) TryInviteRobot() { if this.IsCoinScene() /* && this.gaming*/ { //如果牌局正在进行中,一个一个进 num = 1 } - //logger.Logger.Tracef("(this *Scene)(groupid:%v sceneid:%v) TryInviteRobot(%v) current robot(%v+%v) robotlimit(%v)", this.groupId, this.sceneId, this.dbGameFree.GetName()+this.dbGameFree.GetTitle(), this.robotNum, num, this.robotLimit) + //logger.Logger.Tracef("(this *Scene)(groupid:%v sceneid:%v) TryInviteRobot(%v) current robot(%v+%v) robotlimit(%v)", this.groupId, this.sceneId, this.GetDBGameFree().GetName()+this.GetDBGameFree().GetTitle(), this.robotNum, num, this.robotLimit) //同步下房间里的参数' - NpcServerAgentSingleton.SyncDBGameFree(this.SceneId, this.GetDBGameFree()) + NpcServerAgentSingleton.SyncDBGameFree(int(this.SceneId), this.GetDBGameFree()) //然后再邀请 - NpcServerAgentSingleton.Invite(this.SceneId, int(num), this.DbGameFree.Id) + NpcServerAgentSingleton.Invite(int(this.SceneId), int(num), this.GetDBGameFree().Id) } } } @@ -1883,10 +1800,10 @@ func (this *Scene) IsAllRealInGame() bool { // 是否开启机器人对战游戏 func (this *Scene) IsRobFightGame() bool { - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return false } - if this.DbGameFree.GetAi()[0] == 1 && model.GameParamData.IsRobFightTest == true { + if this.GetDBGameFree().GetAi()[0] == 1 && model.GameParamData.IsRobFightTest == true { return true } return false @@ -1915,7 +1832,7 @@ func (this *Scene) RobotLeaveHundred() { //钱多 leave = true reason = common.PlayerLeaveReason_Normal - } else if p.Coin < int64(this.DbGameFree.GetBetLimit()) { + } else if p.Coin < int64(this.GetDBGameFree().GetBetLimit()) { //少于下注限额 leave = true reason = common.PlayerLeaveReason_Normal @@ -1975,7 +1892,7 @@ func (this *Scene) GetRecordId() string { func (this *Scene) RandTakeCoin(p *Player) (takeCoin, leaveCoin, gameTimes int64) { if p.IsRob && p.IsLocal { - dbGameFree := this.DbGameFree + dbGameFree := this.GetDBGameFree() takerng := dbGameFree.GetRobotTakeCoin() if len(takerng) >= 2 && takerng[1] > takerng[0] { if takerng[0] < dbGameFree.GetLimitCoin() { @@ -2014,8 +1931,8 @@ func (this *Scene) TryBillExGameDrop(p *Player) { this.DropCollectBox(p) - baseScore := this.DbGameFree.BaseScore - if common.IsLocalGame(this.GameId) { + baseScore := this.GetDBGameFree().BaseScore + if common.IsLocalGame(int(this.GameId)) { baseScore = this.BaseScore } if baseScore == 0 { @@ -2023,7 +1940,7 @@ func (this *Scene) TryBillExGameDrop(p *Player) { } // 场次掉落开关 - if this.DbGameFree.IsDrop != 1 { + if this.GetDBGameFree().IsDrop != 1 { return } @@ -2288,7 +2205,7 @@ func (this *Scene) Statistics(param *StaticParam) { return } - _, isNovice := p.NoviceOdds(this.GameId) + _, isNovice := p.NoviceOdds(int(this.GameId)) isControl := this.IsControl(param.HasRobotGaming) // 需要调控的房间 var wbLevel = p.WBLevel // 原来的黑白名单等级; 注意SyncPlayerDatas会修改WBLevel @@ -2373,8 +2290,8 @@ func (this *Scene) Statistics(param *StaticParam) { } // 新手输赢统计 - if !model.GameParamData.CloseNovice && !common.InSliceInt(model.GameParamData.CloseNoviceGame, this.GameId) && isControl && wbLevel == 0 && isNovice { - keyNoviceGameId := common.GetKeyNoviceGameId(this.GameId) + if !model.GameParamData.CloseNovice && !common.InSliceInt(model.GameParamData.CloseNoviceGame, int(this.GameId)) && isControl && wbLevel == 0 && isNovice { + keyNoviceGameId := common.GetKeyNoviceGameId(int(this.GameId)) var gs *model.PlayerGameStatics if data, ok := p.GDatas[keyNoviceGameId]; ok { statics = append(statics, &data.Statics) @@ -2474,7 +2391,7 @@ func (this *Scene) Statistics(param *StaticParam) { } p.WinCoin += totalOut p.TaxCoin += param.GainTax - if isPlayerPool && srvdata.GameFreeMgr.IsPlayerPool(this.GameId) { + if isPlayerPool && srvdata.GameFreeMgr.IsPlayerPool(int(this.GameId)) { p.TotalOut += totalOut p.PlayerTax += param.GainTax } @@ -2483,7 +2400,7 @@ func (this *Scene) Statistics(param *StaticParam) { p.FailTimes++ } p.FailCoin += totalIn - if isPlayerPool && srvdata.GameFreeMgr.IsPlayerPool(this.GameId) { + if isPlayerPool && srvdata.GameFreeMgr.IsPlayerPool(int(this.GameId)) { p.TotalIn += totalIn } } else { diff --git a/gamesrv/base/scene_mgr.go b/gamesrv/base/scene_mgr.go index 1fef20c..af18138 100644 --- a/gamesrv/base/scene_mgr.go +++ b/gamesrv/base/scene_mgr.go @@ -32,38 +32,47 @@ func (this *SceneMgr) makeKey(gameid, gamemode int) int { return int(gameid*10000 + gamemode) } -func (this *SceneMgr) CreateScene(s *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, - params []int64, agentor, creator int32, replayCode string, hallId, groupId, totalOfGames int32, - dbGameFree *server.DB_GameFree, bEnterAfterStart bool, baseScore int32, playerNum int, chessRank []int32) *Scene { - scene := NewScene(s, sceneId, gameMode, sceneMode, gameId, platform, params, agentor, creator, replayCode, - hallId, groupId, totalOfGames, dbGameFree, bEnterAfterStart, baseScore, playerNum, chessRank) +type CreateSceneParam struct { + Session *netlib.Session + *server.WGCreateScene +} + +func (this *SceneMgr) CreateScene(args *CreateSceneParam) *Scene { + scene := NewScene(args) if scene == nil { logger.Logger.Error("(this *SceneMgr) CreateScene, scene == nil") return nil } - this.scenes[scene.SceneId] = scene + + platform := args.GetPlatform() + gameId := args.GetGameId() + gameMode := args.GetGameMode() + gameFreeId := args.GetDBGameFree().GetId() + // 平台标记 + this.scenes[int(scene.SceneId)] = scene if _, ok := this.PlatformScene[platform]; !ok { this.PlatformScene[platform] = true } - // - key := this.makeKey(gameId, gameMode) + // 游戏id索引 + key := this.makeKey(int(gameId), int(gameMode)) if ss, exist := this.scenesByGame[key]; exist { - ss[scene.SceneId] = scene + ss[int(scene.SceneId)] = scene } else { ss = make(map[int]*Scene) - ss[scene.SceneId] = scene + ss[int(scene.SceneId)] = scene this.scenesByGame[key] = ss } - // - if ss, exist := this.scenesByGameFree[dbGameFree.GetId()]; exist { - ss[scene.SceneId] = scene + // 场次id索引 + if ss, exist := this.scenesByGameFree[gameFreeId]; exist { + ss[int(scene.SceneId)] = scene } else { ss = make(map[int]*Scene) - ss[scene.SceneId] = scene - this.scenesByGameFree[dbGameFree.GetId()] = ss + ss[int(scene.SceneId)] = scene + this.scenesByGameFree[gameFreeId] = ss } scene.OnStart() - logger.Logger.Infof("(this *SceneMgr) CreateScene,New scene,id:[%d] replaycode:[%v]", scene.SceneId, replayCode) + logger.Logger.Infof("(this *SceneMgr) CreateScene,New scene,id:[%d] replaycode:[%v]", scene.SceneId, args.GetReplayCode()) + return scene } @@ -71,13 +80,13 @@ func (this *SceneMgr) DestroyScene(sceneId int) { if scene, exist := this.scenes[sceneId]; exist { scene.OnStop() // - key := this.makeKey(scene.GameId, scene.GameMode) + key := this.makeKey(int(scene.GameId), int(scene.GameMode)) if ss, exist := this.scenesByGame[key]; exist { - delete(ss, scene.SceneId) + delete(ss, int(scene.SceneId)) } // if ss, exist := this.scenesByGameFree[scene.GetGameFreeId()]; exist { - delete(ss, scene.SceneId) + delete(ss, int(scene.SceneId)) } delete(this.scenes, sceneId) logger.Logger.Infof("(this *SceneMgr) DestroyScene, sceneid = %v", sceneId) @@ -169,7 +178,7 @@ func (this *SceneMgr) JackPotSync(platform string, gameIds ...int32) { val := s.sp.GetJackPotVal(s) if val > 0 { jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(s.DbGameFree.Id), + GameFreeId: proto.Int32(s.GetGameFreeId()), JackPotFund: proto.Int64(val), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) diff --git a/gamesrv/caishen/scenedata_caishen.go b/gamesrv/caishen/scenedata_caishen.go index 677e4a7..fc58b33 100644 --- a/gamesrv/caishen/scenedata_caishen.go +++ b/gamesrv/caishen/scenedata_caishen.go @@ -59,14 +59,14 @@ func (this *CaiShenSceneData) SceneDestroy(force bool) { } func (this *CaiShenSceneData) init() bool { - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return false } - params := this.DbGameFree.GetJackpot() + params := this.GetDBGameFree().GetJackpot() this.jackpot = &base.SlotJackpotPool{} if this.jackpot.Small <= 0 { this.jackpot.Small = 0 - this.jackpot.VirtualJK = int64(params[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + this.jackpot.VirtualJK = int64(params[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } str := base.XSlotsPoolMgr.GetPool(this.GetGameFreeId(), this.Platform) if str != "" { @@ -102,7 +102,7 @@ type CaiShenSpinResult struct { } func (this *CaiShenSceneData) CalcLinePrize(cards []int, betLines []int64, betValue int64) (spinRes CaiShenSpinResult) { - taxRate := this.DbGameFree.GetTaxRate() + taxRate := this.GetDBGameFree().GetTaxRate() calcTaxScore := func(score int64, taxScore *int64) int64 { newScore := int64(float64(score) * float64(10000-taxRate) / 10000.0) if taxScore != nil { @@ -188,7 +188,7 @@ func (this *CaiShenSceneData) BroadcastJackpot(sync bool) { this.lastJackpotValue = this.jackpot.VirtualJK pack := &gamehall.SCHundredSceneGetGameJackpot{} jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(this.DbGameFree.Id), + GameFreeId: proto.Int32(this.GetDBGameFree().Id), JackPotFund: proto.Int64(this.jackpot.VirtualJK), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) @@ -215,7 +215,7 @@ func (this *CaiShenSceneData) PopCoinPool(winCoin int64, IsNovice bool) { } } func (this *CaiShenSceneData) RecordBurstLog(name string, wincoin, totalbet int64) { - log := model.NewBurstJackpotLog(this.Platform, this.DbGameFree.GameId, this.GetGameFreeId(), name, wincoin, totalbet) + log := model.NewBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId, this.GetGameFreeId(), name, wincoin, totalbet) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { return model.InsertBurstJackpotLogs(log) }), nil, "InsertBurstJackpotLogs").Start() @@ -223,7 +223,7 @@ func (this *CaiShenSceneData) RecordBurstLog(name string, wincoin, totalbet int6 func (this *CaiShenSceneData) BurstHistory(player *CaiShenPlayerData) { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.GetBurstJackpotLog(this.Platform, this.DbGameFree.GameId) + return model.GetBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId) }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { var logsp []*caishen.CaiShenBurstHistoryInfo if data != nil { @@ -251,7 +251,7 @@ func (this *CaiShenSceneData) GetLastBurstJackPot() time.Time { } func (this *CaiShenSceneData) SetLastBurstJackPot() { var randT = rand.Intn(25200-7200+1) + 7200 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(25200-7200+1) + 7200 case 2: @@ -267,7 +267,7 @@ func (this *CaiShenSceneData) SetLastBurstJackPot() { func (this *CaiShenSceneData) AIAddJackPot() { if time.Now().Sub(this.lastJackPot) > 0 { var randT = rand.Intn(3) + 1 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(3) + 1 case 2: @@ -280,20 +280,20 @@ func (this *CaiShenSceneData) AIAddJackPot() { randT = rand.Intn(3) + 1 } this.lastJackPot = time.Now().Add(time.Second * time.Duration(randT)) - val := int64(math.Floor(float64(this.DbGameFree.GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) + val := int64(math.Floor(float64(this.GetDBGameFree().GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) this.jackpot.VirtualJK += val } } func (this *CaiShenSceneData) AIBurstJackPot() { if time.Now().Sub(this.GetLastBurstJackPot()) > 0 { this.SetLastBurstJackPot() - jackpotParams := this.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := this.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) //奖池初始值 //AI机器人爆奖 val := this.jackpot.VirtualJK this.jackpot.VirtualJK = jackpotInit - bet := int64(this.DbGameFree.GetBaseScore()) * int64(rule.LINENUM) + bet := int64(this.GetDBGameFree().GetBaseScore()) * int64(rule.LINENUM) this.RecordBurstLog(this.RandNickName(), val, int64(bet)) } } @@ -314,11 +314,11 @@ func (this *CaiShenSceneData) KickPlayerByTime() { } //for _, p := range this.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // this.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(this.DbGameFree.GetPlayNumLimit()) { + // this.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(this.GetDBGameFree().GetPlayNumLimit()) { // this.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} diff --git a/gamesrv/caishen/scenepolicy_caishen.go b/gamesrv/caishen/scenepolicy_caishen.go index 0f9b0f0..5c7a8c3 100644 --- a/gamesrv/caishen/scenepolicy_caishen.go +++ b/gamesrv/caishen/scenepolicy_caishen.go @@ -94,8 +94,8 @@ func (this *ScenePolicyCaiShen) OnPlayerEnter(s *base.Scene, p *base.Player) { logger.Logger.Trace("(this *ScenePolicyCaiShen) OnPlayerEnter, SceneId=", s.SceneId, " player=", p.SnId) if sceneEx, ok := s.ExtraData.(*CaiShenSceneData); ok { playerEx := &CaiShenPlayerData{Player: p} - playerEx.init(s) // 玩家当前信息初始化 - playerEx.score = sceneEx.DbGameFree.GetBaseScore() // 底注 + playerEx.init(s) // 玩家当前信息初始化 + playerEx.score = sceneEx.GetDBGameFree().GetBaseScore() // 底注 sceneEx.players[p.SnId] = playerEx p.ExtraData = playerEx CaiShenSendRoomInfo(s, p, sceneEx, playerEx, nil) @@ -230,14 +230,14 @@ func (this *ScenePolicyCaiShen) GetJackPotVal(s *base.Scene) int64 { func CaiShenSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *CaiShenSceneData, playerEx *CaiShenPlayerData, data *caishen.GameBilledData) { logger.Logger.Trace("-------------------发送房间消息 ", s.RoomId, p.SnId) pack := &caishen.SCCaiShenRoomInfo{ - RoomId: proto.Int(s.SceneId), + RoomId: s.SceneId, Creator: proto.Int32(s.Creator), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.GameMode), + GameId: s.GameId, + RoomMode: s.GameMode, Params: common.CopySliceInt64ToInt32(s.Params), State: proto.Int(s.SceneState.GetState()), Jackpot: proto.Int64(sceneEx.jackpot.VirtualJK), - GameFreeId: proto.Int32(s.DbGameFree.Id), + GameFreeId: proto.Int32(s.GetDBGameFree().Id), BilledData: data, } @@ -257,7 +257,7 @@ func CaiShenSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *CaiShenSceneDat //} pack.BetLines = playerEx.betLines pack.FreeTimes = proto.Int32(playerEx.freeTimes) - pack.Chip = proto.Int32(s.DbGameFree.BaseScore) + pack.Chip = proto.Int32(s.GetDBGameFree().BaseScore) pack.SpinID = proto.Int64(playerEx.spinID) if playerEx.totalPriceBonus > 0 { switch playerEx.bonusStage { @@ -373,7 +373,7 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op return false } //先做底注校验 - if sceneEx.DbGameFree.GetBaseScore() != int32(params[0]) { + if sceneEx.GetDBGameFree().GetBaseScore() != int32(params[0]) { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, caishen.OpResultCode_OPRC_Error, params) return false } @@ -407,7 +407,7 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op if playerEx.freeTimes <= 0 && totalBetValue > playerEx.Coin { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, caishen.OpResultCode_OPRC_CoinNotEnough, params) return false - } else if playerEx.freeTimes <= 0 && int64(sceneEx.DbGameFree.GetBetLimit()) > playerEx.Coin { //押注限制 + } else if playerEx.freeTimes <= 0 && int64(sceneEx.GetDBGameFree().GetBetLimit()) > playerEx.Coin { //押注限制 this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, caishen.OpResultCode_OPRC_CoinNotEnough, params) return false } @@ -422,7 +422,7 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op sceneEx.CpCtx = base.CoinPoolMgr.GetCoinPoolCtx(sceneEx.Platform, sceneEx.GetGameFreeId(), sceneEx.GroupId) //税收比例 - taxRate := sceneEx.DbGameFree.GetTaxRate() + taxRate := sceneEx.GetDBGameFree().GetTaxRate() if taxRate < 0 || taxRate > 10000 { logger.Logger.Tracef("CaiShenErrorTaxRate [%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, taxRate) taxRate = 500 @@ -445,8 +445,8 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 // 奖池参数 - var jackpotParam = sceneEx.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParam[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(sceneEx.DbGameFree.GetBaseScore()) //奖池初始值 + var jackpotParam = sceneEx.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParam[rule.CAISHEN_JACKPOT_InitJackpot]) * int64(sceneEx.GetDBGameFree().GetBaseScore()) //奖池初始值 var jackpotFundAdd, prizeFundAdd int64 if playerEx.freeTimes <= 0 { //正常模式才能记录用户的押注变化,免费模式不能改变押注 @@ -466,7 +466,7 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op ////统计参与游戏次数 //if !sceneEx.Testing && !playerEx.IsRob { // pack := &server.GWSceneEnd{ - // GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + // GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), // Players: []*server.PlayerCtx{&server.PlayerCtx{SnId: proto.Int32(playerEx.SnId), Coin: proto.Int64(playerEx.Coin)}}, // } // proto.SetDefaults(pack) @@ -656,7 +656,7 @@ func (this *SceneStateCaiShenStart) OnPlayerOp(s *base.Scene, p *base.Player, op case CaiShenPlayerHistory: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { spinid := strconv.FormatInt(int64(playerEx.SnId), 10) - gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.DbGameFree.GetGameClass(), s.GameId) + gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.GetDBGameFree().GetGameClass(), int(s.GameId)) pack := &caishen.SCCaiShenPlayerHistory{} for _, v := range gpl.Data { //if v.GameDetailedLogId == "" { @@ -847,7 +847,7 @@ func (this *SceneStateCaiShenStart) WinTargetBenchTest(s *base.Scene, p *base.Pl } file.WriteString("玩家id,当前水位,之前余额,之后余额,投入,产出,税收,小游戏,中线倍数,中线数,剩余免费次数\r\n") oldCoin := p.Coin - switch s.DbGameFree.GetSceneType() { + switch s.GetDBGameFree().GetSceneType() { case 1: p.Coin = 100000 case 2: @@ -905,7 +905,7 @@ func (this *SceneStateCaiShenStart) MultiplayerBenchTest(s *base.Scene) { }) caiShenBenchTestTimes++ - fileName := fmt.Sprintf("caishen-total-%v-%d.csv", s.DbGameFree.GetSceneType(), caiShenBenchTestTimes) + fileName := fmt.Sprintf("caishen-total-%v-%d.csv", s.GetDBGameFree().GetSceneType(), caiShenBenchTestTimes) file, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModePerm) defer file.Close() if err != nil { @@ -918,7 +918,7 @@ func (this *SceneStateCaiShenStart) MultiplayerBenchTest(s *base.Scene) { playersFile := make(map[int32]*os.File) oldCoins := make(map[int32]int64) - hasCoin := 1000 * int64(s.DbGameFree.GetBaseScore()) + hasCoin := 1000 * int64(s.GetDBGameFree().GetBaseScore()) robots := make(map[int32]bool) testPlayers := make(map[int32]*base.Player) for _, p := range s.Players { @@ -926,7 +926,7 @@ func (this *SceneStateCaiShenStart) MultiplayerBenchTest(s *base.Scene) { p.IsRob = false robots[p.SnId] = true } - fileName := fmt.Sprintf("caishen-player%v-%v-%d.csv", p.SnId, s.DbGameFree.GetSceneType(), caiShenBenchTestTimes) + fileName := fmt.Sprintf("caishen-player%v-%v-%d.csv", p.SnId, s.GetDBGameFree().GetSceneType(), caiShenBenchTestTimes) file, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModePerm) if err != nil { file, err = os.Create(fileName) @@ -955,7 +955,7 @@ func (this *SceneStateCaiShenStart) MultiplayerBenchTest(s *base.Scene) { } }() - totalBet := int64(s.DbGameFree.GetBaseScore()) * int64(len(rule.AllBetLines)) + totalBet := int64(s.GetDBGameFree().GetBaseScore()) * int64(len(rule.AllBetLines)) for i := 0; i < BENCH_CNT; i++ { for snid, p := range testPlayers { if playerEx, ok := p.ExtraData.(*CaiShenPlayerData); ok { @@ -970,7 +970,7 @@ func (this *SceneStateCaiShenStart) MultiplayerBenchTest(s *base.Scene) { inCoin := int64(playerEx.RollGameType.BaseResult.TotalBet) outCoin := playerEx.RollGameType.BaseResult.ChangeCoin + inCoin taxCoin := playerEx.RollGameType.BaseResult.Tax - lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.DbGameFree.GetBaseScore()) * float64(10000.0-s.DbGameFree.GetTaxRate()) / 10000.0 + lineScore := float64(playerEx.RollGameType.BaseResult.WinRate*s.GetDBGameFree().GetBaseScore()) * float64(10000.0-s.GetDBGameFree().GetTaxRate()) / 10000.0 jackpotScore := outCoin - playerEx.RollGameType.BaseResult.WinSmallGame - int64(lineScore+0.00001) str := fmt.Sprintf("%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v,%v\r\n", p.SnId, poolCoin, StartCoin, p.Coin, inCoin, outCoin, taxCoin, @@ -1004,7 +1004,7 @@ func CaiShenCheckAndSaveLog(sceneEx *CaiShenSceneData, playerEx *CaiShenPlayerDa //log2 playerEx.RollGameType.BaseResult.ChangeCoin = changeCoin - playerEx.RollGameType.BaseResult.BasicBet = sceneEx.DbGameFree.GetBaseScore() + playerEx.RollGameType.BaseResult.BasicBet = sceneEx.GetDBGameFree().GetBaseScore() playerEx.RollGameType.BaseResult.RoomId = int32(sceneEx.SceneId) playerEx.RollGameType.BaseResult.AfterCoin = playerEx.Coin playerEx.RollGameType.BaseResult.BeforeCoin = startCoin @@ -1063,8 +1063,8 @@ func CaiShenCheckAndSaveLog(sceneEx *CaiShenSceneData, playerEx *CaiShenPlayerDa GameCoinTs: proto.Int64(playerEx.GameCoinTs), } gwPlayerBet := &server.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), - GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + SceneId: sceneEx.SceneId, + GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) sceneEx.SyncPlayerDatas(&base.PlayerDataParam{ diff --git a/gamesrv/chess/scene.go b/gamesrv/chess/scene.go index f65d018..ad40fdf 100644 --- a/gamesrv/chess/scene.go +++ b/gamesrv/chess/scene.go @@ -53,7 +53,7 @@ func getChessVariant(gameId int) int { } func NewSceneEx(s *base.Scene) *SceneEx { - variant := getChessVariant(s.GameId) + variant := getChessVariant(int(s.GameId)) chess := rule.NewChess(variant) chess.Init() sceneEx := &SceneEx{ diff --git a/gamesrv/chess/scenepolicy.go b/gamesrv/chess/scenepolicy.go index a4fbb4f..b5fe410 100644 --- a/gamesrv/chess/scenepolicy.go +++ b/gamesrv/chess/scenepolicy.go @@ -485,7 +485,7 @@ func CreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *SceneEx, playe State: proto.Int32(int32(s.GetSceneState().GetState())), TimeOut: proto.Int(s.GetSceneState().GetTimeout(s)), NumOfGames: proto.Int(sceneEx.NumOfGames), - TotalOfGames: proto.Int(sceneEx.TotalOfGames), + TotalOfGames: sceneEx.TotalOfGames, CurOpIdx: proto.Int(-1), MasterSnid: proto.Int32(sceneEx.masterSnId), AudienceNum: proto.Int(s.GetAudiencesNum()), @@ -528,7 +528,7 @@ func CreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *SceneEx, playe } pack.MatchFinals = 0 - if s.MatchFinals { + if s.GetMatch().GetIsFinals() { pack.MatchFinals = 1 if s.NumOfGames >= 2 { pack.MatchFinals = 2 @@ -852,7 +852,7 @@ func (this *SceneStateWaitStart) OnTick(s *base.Scene) { if sceneEx, ok := s.GetExtraData().(*SceneEx); ok { if sceneEx.IsMatchScene() { delayT := time.Second * 2 - if sceneEx.MatchRound != 1 { //第一轮延迟2s,其他延迟3s 配合客户端播放动画 + if sceneEx.GetMatch().GetCurrRound() != 1 { //第一轮延迟2s,其他延迟3s 配合客户端播放动画 delayT = time.Second * 4 } if time.Now().Sub(sceneEx.StateStartTime) > delayT { @@ -1215,14 +1215,14 @@ func (this *SceneStateBilled) OnEnter(s *base.Scene) { pack := &chesstitians.SCChesstitiansGameBilled{} chessType := model.ChesstitiansType{ - GameId: sceneEx.GameId, + GameId: int(sceneEx.GameId), RoomId: int32(sceneEx.GetSceneId()), - RoomType: int32(sceneEx.Scene.SceneType), + RoomType: sceneEx.Scene.GetDBGameFree().GetSceneType(), NumOfGames: int32(sceneEx.Scene.NumOfGames), BankId: sceneEx.masterSnId, PlayerCount: rule.MaxNumOfPlayer, BaseScore: s.BaseScore, - TaxRate: s.DbGameFree.GetTaxRate(), + TaxRate: s.GetDBGameFree().GetTaxRate(), RoomMode: s.GetSceneMode(), } @@ -1462,7 +1462,7 @@ func (this *SceneStateBilled) OnLeave(s *base.Scene) { return } - if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.MatchFinals || (s.MatchFinals && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 + if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.GetMatch().GetIsFinals() || (s.GetMatch().GetIsFinals() && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 sceneEx.SceneDestroy(true) } s.TryRelease() diff --git a/gamesrv/easterisland/scenedata_easterisland.go b/gamesrv/easterisland/scenedata_easterisland.go index 654f5ed..25bfb39 100644 --- a/gamesrv/easterisland/scenedata_easterisland.go +++ b/gamesrv/easterisland/scenedata_easterisland.go @@ -53,14 +53,14 @@ func (this *EasterIslandSceneData) OnPlayerLeave(p *base.Player, reason int) { } func (this *EasterIslandSceneData) init() bool { - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return false } - params := this.DbGameFree.GetJackpot() + params := this.GetDBGameFree().GetJackpot() this.jackpot = &base.SlotJackpotPool{} if this.jackpot.Small <= 0 { this.jackpot.Small = 0 - this.jackpot.VirtualJK = int64(params[rule.EL_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + this.jackpot.VirtualJK = int64(params[rule.EL_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } str := base.SlotsPoolMgr.GetPool(this.GetGameFreeId(), this.Platform) if str != "" { @@ -101,7 +101,7 @@ type EasterIslandSpinResult struct { } func (this *EasterIslandSceneData) CalcLinePrize(cards []int, betLines []int64, betValue int64) (spinRes EasterIslandSpinResult) { - taxRate := this.DbGameFree.GetTaxRate() + taxRate := this.GetDBGameFree().GetTaxRate() calcTaxScore := func(score int64, taxScore *int64) int64 { newScore := int64(float64(score) * float64(10000-taxRate) / 10000.0) if taxScore != nil { @@ -192,7 +192,7 @@ func (this *EasterIslandSceneData) BroadcastJackpot(sync bool) { this.lastJackpotValue = this.jackpot.VirtualJK pack := &gamehall.SCHundredSceneGetGameJackpot{} jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(this.DbGameFree.Id), + GameFreeId: proto.Int32(this.GetDBGameFree().Id), JackPotFund: proto.Int64(this.jackpot.VirtualJK), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) @@ -218,7 +218,7 @@ func (this *EasterIslandSceneData) PopCoinPool(winCoin int64, IsNovice bool) { } } func (this *EasterIslandSceneData) RecordBurstLog(name string, wincoin, totalbet int64) { - log := model.NewBurstJackpotLog(this.Platform, this.DbGameFree.GameId, this.GetGameFreeId(), name, wincoin, totalbet) + log := model.NewBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId, this.GetGameFreeId(), name, wincoin, totalbet) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { return model.InsertBurstJackpotLogs(log) }), nil, "InsertBurstJackpotLogs").Start() @@ -226,7 +226,7 @@ func (this *EasterIslandSceneData) RecordBurstLog(name string, wincoin, totalbet func (this *EasterIslandSceneData) BurstHistory(player *EasterIslandPlayerData) { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.GetBurstJackpotLog(this.Platform, this.DbGameFree.GameId) + return model.GetBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId) }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { var logsp []*easterisland.EasterIslandBurstHistoryInfo if data != nil { @@ -254,7 +254,7 @@ func (this *EasterIslandSceneData) GetLastBurstJackPot() time.Time { } func (this *EasterIslandSceneData) SetLastBurstJackPot() { var randT = rand.Intn(25200-7200+1) + 7200 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(25200-7200+1) + 7200 case 2: @@ -269,7 +269,7 @@ func (this *EasterIslandSceneData) SetLastBurstJackPot() { func (this *EasterIslandSceneData) AIAddJackPot() { if time.Now().Sub(this.lastJackPot) > 0 { var randT = rand.Intn(3) + 1 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(3) + 1 case 2: @@ -282,20 +282,20 @@ func (this *EasterIslandSceneData) AIAddJackPot() { randT = rand.Intn(3) + 1 } this.lastJackPot = time.Now().Add(time.Second * time.Duration(randT)) - val := int64(math.Floor(float64(this.DbGameFree.GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) + val := int64(math.Floor(float64(this.GetDBGameFree().GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) this.jackpot.VirtualJK += val } } func (this *EasterIslandSceneData) AIBurstJackPot() { if time.Now().Sub(this.GetLastBurstJackPot()) > 0 { this.SetLastBurstJackPot() - jackpotParams := this.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.EL_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := this.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.EL_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) //奖池初始值 //AI机器人爆奖 val := this.jackpot.VirtualJK this.jackpot.VirtualJK = jackpotInit - bet := int64(this.DbGameFree.GetBaseScore()) * int64(rule.LINENUM) + bet := int64(this.GetDBGameFree().GetBaseScore()) * int64(rule.LINENUM) this.RecordBurstLog(this.RandNickName(), val, bet) } } @@ -316,11 +316,11 @@ func (this *EasterIslandSceneData) KickPlayerByTime() { } //for _, p := range this.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // this.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(this.DbGameFree.GetPlayNumLimit()) { + // this.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(this.GetDBGameFree().GetPlayNumLimit()) { // this.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} diff --git a/gamesrv/easterisland/scenepolicy_easterisland.go b/gamesrv/easterisland/scenepolicy_easterisland.go index 67f98f8..5c211b7 100644 --- a/gamesrv/easterisland/scenepolicy_easterisland.go +++ b/gamesrv/easterisland/scenepolicy_easterisland.go @@ -94,8 +94,8 @@ func (this *ScenePolicyEasterIsland) OnPlayerEnter(s *base.Scene, p *base.Player logger.Logger.Trace("(this *ScenePolicyEasterIsland) OnPlayerEnter, sceneId=", s.SceneId, " player=", p.SnId) if sceneEx, ok := s.ExtraData.(*EasterIslandSceneData); ok { playerEx := &EasterIslandPlayerData{Player: p} - playerEx.init(s) // 玩家当前信息初始化 - playerEx.score = sceneEx.DbGameFree.GetBaseScore() // 底注 + playerEx.init(s) // 玩家当前信息初始化 + playerEx.score = sceneEx.GetDBGameFree().GetBaseScore() // 底注 sceneEx.players[p.SnId] = playerEx p.ExtraData = playerEx EasterIslandSendRoomInfo(s, p, sceneEx, playerEx, nil) @@ -230,14 +230,14 @@ func (this *ScenePolicyEasterIsland) GetJackPotVal(s *base.Scene) int64 { func EasterIslandSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *EasterIslandSceneData, playerEx *EasterIslandPlayerData, data *easterisland.GameBilledData) { logger.Logger.Trace("-------------------发送房间消息 ", s.RoomId, p.SnId) pack := &easterisland.SCEasterIslandRoomInfo{ - RoomId: proto.Int(s.SceneId), + RoomId: s.SceneId, Creator: proto.Int32(s.Creator), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.GameMode), + GameId: s.GameId, + RoomMode: s.GameMode, Params: common.CopySliceInt64ToInt32(s.Params), State: proto.Int(s.SceneState.GetState()), Jackpot: proto.Int64(sceneEx.jackpot.VirtualJK), - GameFreeId: proto.Int32(s.DbGameFree.Id), + GameFreeId: proto.Int32(s.GetDBGameFree().Id), BilledData: data, } if playerEx != nil { @@ -256,7 +256,7 @@ func EasterIslandSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *EasterIsla //} pack.BetLines = playerEx.betLines pack.FreeTimes = proto.Int32(playerEx.freeTimes) - pack.Chip = proto.Int32(s.DbGameFree.BaseScore) + pack.Chip = proto.Int32(s.GetDBGameFree().BaseScore) pack.SpinID = proto.Int64(playerEx.spinID) if playerEx.totalPriceBonus > 0 { switch playerEx.bonusStage { @@ -367,7 +367,7 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe return false } //先做底注校验 - if sceneEx.DbGameFree.GetBaseScore() != int32(params[0]) { + if sceneEx.GetDBGameFree().GetBaseScore() != int32(params[0]) { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, easterisland.OpResultCode_OPRC_Error, params) return false } @@ -401,7 +401,7 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe if playerEx.freeTimes <= 0 && totalBetValue > playerEx.Coin { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, easterisland.OpResultCode_OPRC_CoinNotEnough, params) return false - } else if playerEx.freeTimes <= 0 && int64(sceneEx.DbGameFree.GetBetLimit()) > playerEx.Coin { //押注限制 + } else if playerEx.freeTimes <= 0 && int64(sceneEx.GetDBGameFree().GetBetLimit()) > playerEx.Coin { //押注限制 this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, easterisland.OpResultCode_OPRC_CoinNotEnough, params) return false } @@ -413,7 +413,7 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe //获取当前水池的上下文环境 sceneEx.CpCtx = base.CoinPoolMgr.GetCoinPoolCtx(sceneEx.Platform, sceneEx.GetGameFreeId(), sceneEx.GroupId) - taxRate := sceneEx.DbGameFree.GetTaxRate() + taxRate := sceneEx.GetDBGameFree().GetTaxRate() if taxRate < 0 || taxRate > 10000 { logger.Logger.Warnf("EasterIslandErrorTaxRate [%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, taxRate) taxRate = 500 @@ -430,9 +430,9 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe } else { gamePoolCoin = base.CoinPoolMgr.GetCoin(sceneEx.GetGameFreeId(), sceneEx.Platform, sceneEx.GroupId) // 当前水池金额 } - prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 - jackpotParams := sceneEx.DbGameFree.GetJackpot() // 奖池参数 - var jackpotInit = int64(jackpotParams[rule.EL_JACKPOT_InitJackpot]) * int64(sceneEx.DbGameFree.GetBaseScore()) //奖池初始值 + prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 + jackpotParams := sceneEx.GetDBGameFree().GetJackpot() // 奖池参数 + var jackpotInit = int64(jackpotParams[rule.EL_JACKPOT_InitJackpot]) * int64(sceneEx.GetDBGameFree().GetBaseScore()) //奖池初始值 var jackpotFundAdd, prizeFundAdd int64 if playerEx.freeTimes <= 0 { //正常模式才能记录用户的押注变化,免费模式不能改变押注 @@ -449,7 +449,7 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe ////统计参与游戏次数 //if !sceneEx.Testing && !playerEx.IsRob { // pack := &server.GWSceneEnd{ - // GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + // GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), // Players: []*server.PlayerCtx{&server.PlayerCtx{SnId: proto.Int32(playerEx.SnId), Coin: proto.Int64(playerEx.Coin)}}, // } // proto.SetDefaults(pack) @@ -629,7 +629,7 @@ func (this *SceneStateEasterIslandStart) OnPlayerOp(s *base.Scene, p *base.Playe case EasterIslandPlayerHistory: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { spinid := strconv.FormatInt(int64(playerEx.SnId), 10) - gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.DbGameFree.GetGameClass(), s.GameId) + gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.GetDBGameFree().GetGameClass(), int(s.GameId)) pack := &easterisland.SCEasterIslandPlayerHistory{} for _, v := range gpl.Data { //if v.GameDetailedLogId == "" { @@ -819,7 +819,7 @@ func (this *SceneStateEasterIslandStart) WinTargetBenchTest(s *base.Scene, p *ba } file.WriteString("玩家id,当前水位,之前余额,之后余额,投入,产出,税收,小游戏,中线倍数,中线数,剩余免费次数\r\n") oldCoin := p.Coin - switch s.DbGameFree.GetSceneType() { + switch s.GetDBGameFree().GetSceneType() { case 1: p.Coin = 100000 case 2: @@ -873,7 +873,7 @@ func EasterIslandCheckAndSaveLog(sceneEx *EasterIslandSceneData, playerEx *Easte //log2 playerEx.RollGameType.BaseResult.ChangeCoin = changeCoin - playerEx.RollGameType.BaseResult.BasicBet = sceneEx.DbGameFree.GetBaseScore() + playerEx.RollGameType.BaseResult.BasicBet = sceneEx.GetDBGameFree().GetBaseScore() playerEx.RollGameType.BaseResult.RoomId = int32(sceneEx.SceneId) playerEx.RollGameType.BaseResult.AfterCoin = playerEx.Coin playerEx.RollGameType.BaseResult.BeforeCoin = startCoin @@ -932,8 +932,8 @@ func EasterIslandCheckAndSaveLog(sceneEx *EasterIslandSceneData, playerEx *Easte GameCoinTs: proto.Int64(playerEx.GameCoinTs), } gwPlayerBet := &server.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), - GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + SceneId: sceneEx.SceneId, + GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) sceneEx.SyncPlayerDatas(&base.PlayerDataParam{ diff --git a/gamesrv/fishing/action_fish.go b/gamesrv/fishing/action_fish.go index 051c7c8..c59f6b1 100644 --- a/gamesrv/fishing/action_fish.go +++ b/gamesrv/fishing/action_fish.go @@ -406,7 +406,7 @@ func (this *CSFishSkillUseReqHandler) Process(s *netlib.Session, packetid int, d status := false for _, s := range strSlice { num, _ := strconv.Atoi(s) - if num == player.GetScene().SceneType { + if int32(num) == player.GetScene().GetSceneType() { status = true } } @@ -414,7 +414,7 @@ func (this *CSFishSkillUseReqHandler) Process(s *netlib.Session, packetid int, d pack.Result = 1 pack.Status = fishing_proto.SCFishSkillUseResp_ROOM_DISALLOW player.SendToClient(int(fishing_proto.FIPacketID_FISHING_SC_SKILLUSERESP), pack) - fishlogger.Trace("当前房间不允许使用此技能 skillId = %v,sceneType = %v", skillId, player.GetScene().SceneType) + fishlogger.Trace("当前房间不允许使用此技能 skillId = %v,sceneType = %v", skillId, player.GetScene().GetSceneType()) return nil } //判断当前技能在不在CD中 @@ -516,7 +516,7 @@ func (this *CSSkillListReqHandler) Process(s *netlib.Session, packetid int, data pack := &fishing_proto.SCSkillListResp{} for _, skill := range srvdata.PBDB_FishSkillMgr.Datas.Arr { //获取房间类型 - sceneType := player.GetScene().SceneType + sceneType := player.GetScene().GetSceneType() str := skill.Hidden num, err := strconv.Atoi(str) status := true diff --git a/gamesrv/fishing/playerdata_fishing.go b/gamesrv/fishing/playerdata_fishing.go index 66d9e9b..cad0291 100644 --- a/gamesrv/fishing/playerdata_fishing.go +++ b/gamesrv/fishing/playerdata_fishing.go @@ -300,7 +300,7 @@ func (this *FishingPlayerData) SaveDetailedLog(s *base.Scene) { GameCoinTs: proto.Int64(this.GameCoinTs), } gwPlayerData := &server_proto.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), + SceneId: sceneEx.SceneId, GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerData.Datas = append(gwPlayerData.Datas, playerBet) diff --git a/gamesrv/fishing/scenedata_fishing.go b/gamesrv/fishing/scenedata_fishing.go index e8b4bc8..a0afbab 100644 --- a/gamesrv/fishing/scenedata_fishing.go +++ b/gamesrv/fishing/scenedata_fishing.go @@ -108,7 +108,7 @@ func (this *FishingSceneData) init() bool { this.SetPlayerNum(4) this.gameId = this.GetGameId() this.platform = this.GetPlatform() - this.sceneType = int(this.DbGameFree.GetSceneType()) + this.sceneType = int(this.GetDBGameFree().GetSceneType()) this.keyGameId = this.GetKeyGameId() this.testing = this.GetTesting() this.gamefreeId = this.GetGameFreeId() @@ -904,7 +904,7 @@ func (this *FishingSceneData) fishSettlements(fishs []*Fish, player *FishingPlay } //BOSS鱼死亡 更新BOSS池和个人池 if value.IsBoss == fishing.Boss { - bossPond := base.GetCoinPoolMgr().GetBossPond(this.DbGameFree.SceneType) + bossPond := base.GetCoinPoolMgr().GetBossPond(this.GetDBGameFree().SceneType) this.isBossDie(player, int64(dropCoin), bossPond) } @@ -1507,7 +1507,7 @@ func (this *FishingSceneData) AddBossPond(player *FishingPlayerData, fishtype in // 减掉个人池数值 if score > 0 { player.MoneyPond -= score - base.GetCoinPoolMgr().AddBossPond(this.DbGameFree.SceneType, score) + base.GetCoinPoolMgr().AddBossPond(this.GetDBGameFree().SceneType, score) } } @@ -1521,7 +1521,7 @@ func (this *FishingSceneData) isBossDie(player *FishingPlayerData, score int64, minNum = bossPond } player.MoneyPond += minNum - base.GetCoinPoolMgr().AddBossPond(this.DbGameFree.SceneType, -minNum) + base.GetCoinPoolMgr().AddBossPond(this.GetDBGameFree().SceneType, -minNum) fishlogger.Infof("玩家:%v,Boss奖池剩余金币数量:%v\n", player.SnId, bossPond) } diff --git a/gamesrv/fruits/playerdata_fruits.go b/gamesrv/fruits/playerdata_fruits.go index 0a1d098..6601c36 100644 --- a/gamesrv/fruits/playerdata_fruits.go +++ b/gamesrv/fruits/playerdata_fruits.go @@ -101,7 +101,7 @@ func (p *FruitsPlayerData) Clear() { p.weightPos = 0 } func (p *FruitsPlayerData) TestCode(eleLineAppearRate [][]int32, sceneEx *FruitsSceneData) bool { - //if sceneEx.DbGameFree.GetId() == 3060004 { + //if sceneEx.GetDBGameFree().GetId() == 3060004 { // p.result.CreateLine(eleLineAppearRate, p.gameState == fruits.FreeGame) // if p.testIdx == 1 { // //test mary @@ -186,7 +186,7 @@ func (p *FruitsPlayerData) CreateResult(eleLineAppearRate [][]int32, sceneEx *Fr case 5: winjackpot = int64(math.Ceil(float64(JackPotVal) * 0.4 / float64(fruits.NowByte))) } - if winjackpot < int64(sceneEx.DbGameFree.GetJackpotMin())*fruits.NowByte { + if winjackpot < int64(sceneEx.GetDBGameFree().GetJackpotMin())*fruits.NowByte { isNeed = false break } diff --git a/gamesrv/fruits/scenedata_fruits.go b/gamesrv/fruits/scenedata_fruits.go index d21bf4e..94f20de 100644 --- a/gamesrv/fruits/scenedata_fruits.go +++ b/gamesrv/fruits/scenedata_fruits.go @@ -40,7 +40,7 @@ func NewFruitsSceneData(s *base.Scene) *FruitsSceneData { func (s *FruitsSceneData) Init() { s.LoadJackPotData() //for _, data := range srvdata.PBDB_SlotRateWeightMgr.Datas.Arr { - // if data.Id == s.DbGameFree.Id { + // if data.Id == s.GetDBGameFree().Id { // //s.levelRate = append(s.levelRate, data.EleWeight1) // //s.slotRateWeightTotal = append(s.slotRateWeightTotal, data.EleWeight1, data.EleWeight2, data.EleWeight3, data.EleWeight4, data.EleWeight5) // } @@ -59,12 +59,12 @@ func (s *FruitsSceneData) SceneDestroy(force bool) { } func (s *FruitsSceneData) AddPrizeCoin(playerEx *FruitsPlayerData) { val := playerEx.betCoin - tax := int64(math.Ceil(float64(val) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + tax := int64(math.Ceil(float64(val) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //playerEx.taxCoin = tax //playerEx.AddServiceFee(tax) val -= tax - addPrizeCoin := int64(math.Floor(float64(val*fruits.NowByte*int64(s.DbGameFree.GetJackpotRatio())) / 1000)) //扩大10000倍 + addPrizeCoin := int64(math.Floor(float64(val*fruits.NowByte*int64(s.GetDBGameFree().GetJackpotRatio())) / 1000)) //扩大10000倍 s.jackpot.AddToSmall(playerEx.IsRob, addPrizeCoin) logger.Logger.Tracef("奖池增加...AddPrizeCoin... %f", float64(addPrizeCoin)/float64(fruits.NowByte)) base.SlotsPoolMgr.SetPool(s.GetGameFreeId(), s.Platform, s.jackpot) @@ -95,7 +95,7 @@ func (s *FruitsSceneData) OnPlayerLeave(p *base.Player, reason int) { if playerEx.winCoin != 0 { //SysProfitCoinMgr.Add(s.sysProfitCoinKey, 0, playerEx.winCoin) p.Statics(s.KeyGameId, s.KeyGamefreeId, playerEx.winCoin, false) - //tax := int64(math.Ceil(float64(playerEx.winCoin) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + //tax := int64(math.Ceil(float64(playerEx.winCoin) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //playerEx.taxCoin = tax //playerEx.winCoin -= tax //p.AddServiceFee(tax) @@ -140,7 +140,7 @@ func (s *FruitsSceneData) Win(p *FruitsPlayerData) { p.noWinTimes = 0 //SysProfitCoinMgr.Add(s.sysProfitCoinKey, 0, p.winCoin) p.Statics(s.KeyGameId, s.KeyGamefreeId, p.winCoin, false) - //tax := int64(math.Ceil(float64(p.winCoin) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + //tax := int64(math.Ceil(float64(p.winCoin) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //p.taxCoin = tax //p.winCoin -= tax //p.AddServiceFee(tax) @@ -210,7 +210,7 @@ func (s *FruitsSceneData) LoadJackPotData() { base.SlotsPoolMgr.SetPool(s.GetGameFreeId(), s.Platform, s.jackpot) } else { s.jackpot = &base.SlotJackpotPool{} - jp := s.DbGameFree.GetJackpot() + jp := s.GetDBGameFree().GetJackpot() if len(jp) > 0 { s.jackpot.Small += int64(jp[0] * 10000) } @@ -244,7 +244,7 @@ func (s *FruitsSceneData) SaveLog(p *FruitsPlayerData, isOffline int) { } } FruitsType := model.FruitsType{ - RoomId: s.SceneId, + RoomId: int(s.SceneId), BasicScore: int32(p.oneBetCoin), PlayerSnId: p.SnId, BeforeCoin: p.startCoin, @@ -372,7 +372,7 @@ func (s *FruitsSceneData) SendPlayerBet(p *FruitsPlayerData) { Tax: proto.Int64(p.taxCoin), } gwPlayerBet := &server.GWPlayerData{ - GameFreeId: proto.Int32(s.DbGameFree.GetId()), + GameFreeId: proto.Int32(s.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) s.SyncPlayerDatas(&base.PlayerDataParam{ @@ -604,8 +604,8 @@ func (s *FruitsSceneData) GetEleWeight(needpos int32) (norms, frees, marys [][]i curCoin := base.CoinPoolMgr.GetCoin(s.GetGameFreeId(), s.Platform, s.GroupId) curCoin = int64(math.Floor(float64(curCoin) / float64(fruits.NowByte))) - for i := len(s.DbGameFree.BalanceLine) - 1; i >= 0; i-- { - balance := s.DbGameFree.BalanceLine[i] + for i := len(s.GetDBGameFree().BalanceLine) - 1; i >= 0; i-- { + balance := s.GetDBGameFree().BalanceLine[i] if curCoin >= int64(balance) { key = int32(i) break diff --git a/gamesrv/fruits/scenepolicy_fruits.go b/gamesrv/fruits/scenepolicy_fruits.go index 292247b..f728625 100644 --- a/gamesrv/fruits/scenepolicy_fruits.go +++ b/gamesrv/fruits/scenepolicy_fruits.go @@ -148,16 +148,16 @@ func FruitsSendRoomInfo(s *base.Scene, sceneEx *FruitsSceneData, playerEx *Fruit func FruitsCreateRoomInfoPacket(s *base.Scene, sceneEx *FruitsSceneData, playerEx *FruitsPlayerData) interface{} { //房间信息 pack := &protocol.SCFruitsRoomInfo{ - RoomId: proto.Int(s.SceneId), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.SceneMode), - SceneType: proto.Int(s.SceneType), + RoomId: s.SceneId, + GameId: s.GameId, + RoomMode: s.SceneMode, + SceneType: s.GetSceneType(), Params: common.CopySliceInt64ToInt32(s.Params), NumOfGames: proto.Int(sceneEx.NumOfGames), State: proto.Int(s.SceneState.GetState()), - ParamsEx: s.DbGameFree.OtherIntParams, - GameFreeId: proto.Int32(s.DbGameFree.Id), - //BetLimit: s.DbGameFree.BetLimit, + ParamsEx: s.GetDBGameFree().OtherIntParams, + GameFreeId: proto.Int32(s.GetDBGameFree().Id), + //BetLimit: s.GetDBGameFree().BetLimit, } //自己的信息 @@ -299,11 +299,11 @@ func (this *SceneBaseStateFruits) OnTick(s *base.Scene) { if sceneEx, ok := s.ExtraData.(*FruitsSceneData); ok { //for _, p := range sceneEx.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(sceneEx.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(sceneEx.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // sceneEx.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(sceneEx.DbGameFree.GetPlayNumLimit()) { + // sceneEx.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(sceneEx.GetDBGameFree().GetPlayNumLimit()) { // s.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} @@ -397,7 +397,7 @@ func (this *SceneStateStartFruits) OnPlayerOp(s *base.Scene, p *base.Player, opc //只有开始算操作 p.LastOPTimer = time.Now() idx := int(params[0]) - if len(sceneEx.DbGameFree.GetOtherIntParams()) <= idx { + if len(sceneEx.GetDBGameFree().GetOtherIntParams()) <= idx { pack := &protocol.SCFruitsOp{ OpCode: proto.Int(opcode), OpRetCode: proto.Int(3), @@ -419,12 +419,12 @@ func (this *SceneStateStartFruits) OnPlayerOp(s *base.Scene, p *base.Player, opc if playerEx.gameState == fruits.Normal { playerEx.freeTotal = 0 playerEx.betIdx = idx - playerEx.betCoin = int64(sceneEx.DbGameFree.GetOtherIntParams()[idx]) + playerEx.betCoin = int64(sceneEx.GetDBGameFree().GetOtherIntParams()[idx]) playerEx.oneBetCoin = playerEx.betCoin / 9 //playerEx.isReportGameEvent = true playerEx.noWinTimes++ - if playerEx.Coin < int64(s.DbGameFree.GetBetLimit()) { + if playerEx.Coin < int64(s.GetDBGameFree().GetBetLimit()) { //押注限制(低于该值不能押注) pack := &protocol.SCFruitsOp{ OpCode: proto.Int(opcode), @@ -486,9 +486,9 @@ func (this *SceneStateStartFruits) OnPlayerOp(s *base.Scene, p *base.Player, opc case fruits.FruitsPlayerOpSwitch: if len(params) > 0 && playerEx.freeTimes == 0 && playerEx.maryFreeTimes == 0 { idx := int(params[0]) - if len(sceneEx.DbGameFree.GetOtherIntParams()) > idx { + if len(sceneEx.GetDBGameFree().GetOtherIntParams()) > idx { playerEx.betIdx = idx - playerEx.betCoin = int64(sceneEx.DbGameFree.GetOtherIntParams()[idx]) + playerEx.betCoin = int64(sceneEx.GetDBGameFree().GetOtherIntParams()[idx]) playerEx.oneBetCoin = playerEx.betCoin / 9 } } diff --git a/gamesrv/iceage/scenedata_iceage.go b/gamesrv/iceage/scenedata_iceage.go index afdd05b..2ff4e9e 100644 --- a/gamesrv/iceage/scenedata_iceage.go +++ b/gamesrv/iceage/scenedata_iceage.go @@ -67,7 +67,7 @@ func (this *IceAgeSceneData) init() bool { this.jackpot = &base.SlotJackpotPool{} if this.jackpot.Small <= 0 { this.jackpot.Small = 0 - this.jackpot.VirtualJK = int64(params[rule.ICEAGE_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + this.jackpot.VirtualJK = int64(params[rule.ICEAGE_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } str := base.SlotsPoolMgr.GetPool(this.GetGameFreeId(), this.GetPlatform()) @@ -238,7 +238,7 @@ func (this *IceAgeSceneData) BroadcastJackpot(sync bool) { this.lastJackpotValue = this.jackpot.VirtualJK pack := &gamehall.SCHundredSceneGetGameJackpot{} jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(this.DbGameFree.Id), + GameFreeId: proto.Int32(this.GetDBGameFree().Id), JackPotFund: proto.Int64(this.jackpot.VirtualJK), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) @@ -264,7 +264,7 @@ func (this *IceAgeSceneData) PopCoinPool(winCoin int64, IsNovice bool) { } } func (this *IceAgeSceneData) RecordBurstLog(name string, wincoin, totalbet int64) { - log := model.NewBurstJackpotLog(this.Platform, this.DbGameFree.GameId, this.GetGameFreeId(), name, wincoin, totalbet) + log := model.NewBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId, this.GetGameFreeId(), name, wincoin, totalbet) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { return model.InsertBurstJackpotLogs(log) }), nil, "InsertBurstJackpotLogs").Start() @@ -272,7 +272,7 @@ func (this *IceAgeSceneData) RecordBurstLog(name string, wincoin, totalbet int64 func (this *IceAgeSceneData) BurstHistory(player *IceAgePlayerData) { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.GetBurstJackpotLog(this.Platform, this.DbGameFree.GameId) + return model.GetBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId) }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { var logsp []*iceage.IceAgeBurstHistoryInfo if data != nil { @@ -300,7 +300,7 @@ func (this *IceAgeSceneData) GetLastBurstJackPot() time.Time { } func (this *IceAgeSceneData) SetLastBurstJackPot() { var randT = rand.Intn(25200-7200+1) + 7200 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(25200-7200+1) + 7200 case 2: @@ -313,7 +313,7 @@ func (this *IceAgeSceneData) SetLastBurstJackPot() { func (this *IceAgeSceneData) AIAddJackPot() { if time.Now().Sub(this.lastJackPot) > 0 { var randT = rand.Intn(3) + 1 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(3) + 1 case 2: @@ -324,20 +324,20 @@ func (this *IceAgeSceneData) AIAddJackPot() { randT = rand.Intn(3) + 1 } this.lastJackPot = time.Now().Add(time.Second * time.Duration(randT)) - val := int64(math.Floor(float64(this.DbGameFree.GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) + val := int64(math.Floor(float64(this.GetDBGameFree().GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) this.jackpot.VirtualJK += val } } func (this *IceAgeSceneData) AIBurstJackPot() { if time.Now().Sub(this.GetLastBurstJackPot()) > 0 { this.SetLastBurstJackPot() - jackpotParams := this.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.ICEAGE_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := this.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.ICEAGE_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) //奖池初始值 //AI机器人爆奖 val := this.jackpot.VirtualJK this.jackpot.VirtualJK = jackpotInit - bet := int64(this.DbGameFree.GetBaseScore()) * int64(rule.LINENUM) + bet := int64(this.GetDBGameFree().GetBaseScore()) * int64(rule.LINENUM) this.RecordBurstLog(this.RandNickName(), val, bet) } } @@ -358,11 +358,11 @@ func (this *IceAgeSceneData) KickPlayerByTime() { } //for _, p := range this.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // this.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(this.DbGameFree.GetPlayNumLimit()) { + // this.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(this.GetDBGameFree().GetPlayNumLimit()) { // this.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} diff --git a/gamesrv/iceage/scenepolicy_iceage.go b/gamesrv/iceage/scenepolicy_iceage.go index 0ff231d..5313337 100644 --- a/gamesrv/iceage/scenepolicy_iceage.go +++ b/gamesrv/iceage/scenepolicy_iceage.go @@ -253,7 +253,7 @@ func IceAgeSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *IceAgeSceneData, pack.Players = append(pack.Players, pd) pack.BetLines = playerEx.betLines pack.FreeTimes = proto.Int32(playerEx.freeTimes) - pack.Chip = proto.Int32(s.DbGameFree.BaseScore) + pack.Chip = proto.Int32(s.GetDBGameFree().BaseScore) pack.TotalPriceBonus = proto.Int64(playerEx.totalPriceBonus) pack.SpinID = proto.Int64(playerEx.spinID) } @@ -681,7 +681,7 @@ func (this *SceneStateIceAgeStart) OnPlayerOp(s *base.Scene, p *base.Player, opc case IceAgePlayerHistory: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { spinid := strconv.FormatInt(int64(playerEx.SnId), 10) - gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.DbGameFree.GetGameClass(), s.GetGameId()) + gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.GetDBGameFree().GetGameClass(), s.GetGameId()) pack := &iceage.SCIceAgePlayerHistory{} for _, v := range gpl.Data { //if v.GameDetailedLogId == "" { @@ -982,7 +982,7 @@ func IceAgeCheckAndSaveLog(sceneEx *IceAgeSceneData, playerEx *IceAgePlayerData) GameCoinTs: proto.Int64(playerEx.GameCoinTs), } gwPlayerBet := &server.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), + SceneId: sceneEx.SceneId, GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) diff --git a/gamesrv/richblessed/scenedata_richblessed.go b/gamesrv/richblessed/scenedata_richblessed.go index fa4110f..9d31d45 100644 --- a/gamesrv/richblessed/scenedata_richblessed.go +++ b/gamesrv/richblessed/scenedata_richblessed.go @@ -58,13 +58,13 @@ func (s *RichBlessedSceneData) SceneDestroy(force bool) { } func (s *RichBlessedSceneData) AddPrizeCoin(playerEx *RichBlessedPlayerData) { val := playerEx.betCoin - tax := int64(math.Ceil(float64(val) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + tax := int64(math.Ceil(float64(val) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //playerEx.taxCoin = tax //playerEx.AddServiceFee(tax) val -= tax - addPrizeCoin := val * richblessed.NowByte * int64(s.DbGameFree.GetJackpotRatio()) //扩大10000倍 - jk1 := int64(math.Floor(float64(addPrizeCoin) / 1000 / 4)) //千分之奖池比例 分四份 + addPrizeCoin := val * richblessed.NowByte * int64(s.GetDBGameFree().GetJackpotRatio()) //扩大10000倍 + jk1 := int64(math.Floor(float64(addPrizeCoin) / 1000 / 4)) //千分之奖池比例 分四份 s.jackpot.AddToGrand(playerEx.IsRob, jk1) s.jackpot.AddToBig(playerEx.IsRob, jk1) s.jackpot.AddToMiddle(playerEx.IsRob, jk1) @@ -177,7 +177,7 @@ func (s *RichBlessedSceneData) Win(p *RichBlessedPlayerData) { p.noWinTimes = 0 //SysProfitCoinMgr.Add(s.sysProfitCoinKey, 0, p.winCoin) p.Statics(s.KeyGameId, s.KeyGamefreeId, p.winCoin, false) - //tax := int64(math.Ceil(float64(p.winCoin) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + //tax := int64(math.Ceil(float64(p.winCoin) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //p.taxCoin = tax //p.winCoin -= tax //p.AddServiceFee(tax) @@ -198,7 +198,7 @@ func (s *RichBlessedSceneData) JACKPOTWin(p *RichBlessedPlayerData) { p.noWinTimes = 0 //SysProfitCoinMgr.Add(s.sysProfitCoinKey, 0, p.JackwinCoin) p.Statics(s.KeyGameId, s.KeyGamefreeId, p.JackwinCoin, false) - //tax := int64(math.Ceil(float64(p.JackwinCoin) * float64(s.DbGameFree.GetTaxRate()) / 10000)) + //tax := int64(math.Ceil(float64(p.JackwinCoin) * float64(s.GetDBGameFree().GetTaxRate()) / 10000)) //p.taxCoin = tax //p.JackwinCoin -= tax //p.AddServiceFee(tax) @@ -271,7 +271,7 @@ func (s *RichBlessedSceneData) LoadJackPotData() { base.SlotsPoolMgr.SetPool(s.GetGameFreeId(), s.Platform, s.jackpot) } else { s.jackpot = &base.SlotJackpotPool{} - jp := s.DbGameFree.GetJackpot() + jp := s.GetDBGameFree().GetJackpot() if len(jp) > 0 { s.jackpot.Small += int64(jp[0] * 10000) } @@ -300,7 +300,7 @@ func (s *RichBlessedSceneData) SaveLog(p *RichBlessedPlayerData, isOffline int) } RichBlessed := model.RichBlessedType{ - RoomId: s.SceneId, + RoomId: int(s.SceneId), BasicScore: int32(p.oneBetCoin), PlayerSnId: p.SnId, BeforeCoin: p.startCoin, @@ -388,8 +388,8 @@ func (s *RichBlessedSceneData) GetEleWeight(needpos int32) (norms, frees [][]int curCoin := base.CoinPoolMgr.GetCoin(s.GetGameFreeId(), s.Platform, s.GroupId) curCoin = int64(math.Floor(float64(curCoin) / float64(richblessed.NowByte))) - for i := len(s.DbGameFree.BalanceLine) - 1; i >= 0; i-- { - balance := s.DbGameFree.BalanceLine[i] + for i := len(s.GetDBGameFree().BalanceLine) - 1; i >= 0; i-- { + balance := s.GetDBGameFree().BalanceLine[i] if curCoin >= int64(balance) { key = int32(i) break @@ -426,7 +426,7 @@ func (s *RichBlessedSceneData) GetEleWeight(needpos int32) (norms, frees [][]int } func (s *RichBlessedSceneData) CreateResult(eleLineAppearRate [][]int32, playerEx *RichBlessedPlayerData) { - //if s.DbGameFree.GetId() == 3070004 { + //if s.GetDBGameFree().GetId() == 3070004 { // playerEx.TestCode(eleLineAppearRate) //} else { playerEx.result.CreateLine(eleLineAppearRate) @@ -448,7 +448,7 @@ func (s *RichBlessedSceneData) SendPlayerBet(p *RichBlessedPlayerData) { GameCoinTs: p.GameCoinTs, } gwPlayerBet := &server.GWPlayerData{ - GameFreeId: proto.Int32(s.DbGameFree.GetId()), + GameFreeId: proto.Int32(s.GetDBGameFree().GetId()), SceneId: int32(s.SceneId), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) diff --git a/gamesrv/richblessed/scenepolicy_richblessed.go b/gamesrv/richblessed/scenepolicy_richblessed.go index 73ff76a..c914417 100644 --- a/gamesrv/richblessed/scenepolicy_richblessed.go +++ b/gamesrv/richblessed/scenepolicy_richblessed.go @@ -71,7 +71,7 @@ func (this *ScenePolicyRichBlessed) OnPlayerEnter(s *base.Scene, p *base.Player) if s == nil || p == nil { return } - logger.Logger.Trace("(this *ScenePolicyRichBlessed) OnPlayerEnter, sceneId=", s.GetSceneId(), " player=", p.Name, "bet:", s.DbGameFree.GetOtherIntParams()) + logger.Logger.Trace("(this *ScenePolicyRichBlessed) OnPlayerEnter, sceneId=", s.GetSceneId(), " player=", p.Name, "bet:", s.GetDBGameFree().GetOtherIntParams()) if sceneEx, ok := s.GetExtraData().(*RichBlessedSceneData); ok { playerEx := &RichBlessedPlayerData{Player: p} playerEx.init() @@ -148,15 +148,15 @@ func RichBlessedSendRoomInfo(s *base.Scene, sceneEx *RichBlessedSceneData, playe func RichBlessedCreateRoomInfoPacket(s *base.Scene, sceneEx *RichBlessedSceneData, playerEx *RichBlessedPlayerData) interface{} { //房间信息 pack := &protocol.SCRBRoomInfo{ - RoomId: proto.Int(s.SceneId), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.SceneMode), - SceneType: proto.Int(s.SceneType), + RoomId: s.SceneId, + GameId: s.GameId, + RoomMode: s.SceneMode, + SceneType: s.GetSceneType(), Params: common.CopySliceInt64ToInt32(s.Params), NumOfGames: proto.Int(sceneEx.NumOfGames), State: proto.Int(s.SceneState.GetState()), - ParamsEx: common.Int64ToInt32(s.DbGameFree.OtherIntParams), //s.GetParamsEx(), - //BetLimit: s.DbGameFree.BetLimit, + ParamsEx: common.Int64ToInt32(s.GetDBGameFree().OtherIntParams), //s.GetParamsEx(), + //BetLimit: s.GetDBGameFree().BetLimit, NowGameState: proto.Int(playerEx.gameState), BetIdx: proto.Int(playerEx.betIdx), @@ -172,11 +172,11 @@ func RichBlessedCreateRoomInfoPacket(s *base.Scene, sceneEx *RichBlessedSceneDat WinFreeTimes: proto.Int32(int32(playerEx.nowFreeTimes)), JackpotEle: proto.Int32(playerEx.result.JackpotEle), WinJackpot: proto.Int64(playerEx.JackwinCoin), - GameFreeId: proto.Int32(s.DbGameFree.Id), + GameFreeId: proto.Int32(s.GetDBGameFree().Id), } - if playerEx.oneBetCoin == 0 && len(s.DbGameFree.GetOtherIntParams()) != 0 { // 初始化客户端jack显示 - oneBetCoin := int64(s.DbGameFree.GetOtherIntParams()[0] / richblessed.LineNum) + if playerEx.oneBetCoin == 0 && len(s.GetDBGameFree().GetOtherIntParams()) != 0 { // 初始化客户端jack显示 + oneBetCoin := int64(s.GetDBGameFree().GetOtherIntParams()[0] / richblessed.LineNum) pack.SmallJackpot = oneBetCoin * richblessed.JkEleNumRate[richblessed.BlueGirl] pack.MiddleJackpot = oneBetCoin * richblessed.JkEleNumRate[richblessed.BlueBoy] pack.BigJackpot = oneBetCoin * richblessed.JkEleNumRate[richblessed.GoldGirl] @@ -302,11 +302,11 @@ func (this *SceneBaseStateRichBlessed) OnTick(s *base.Scene) { if sceneEx, ok := s.ExtraData.(*RichBlessedSceneData); ok { //for _, p := range sceneEx.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(sceneEx.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(sceneEx.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // sceneEx.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(sceneEx.DbGameFree.GetPlayNumLimit()) { + // sceneEx.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(sceneEx.GetDBGameFree().GetPlayNumLimit()) { // s.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} @@ -401,7 +401,7 @@ func (this *SceneStateStartRichBlessed) OnPlayerOp(s *base.Scene, p *base.Player //只有开始算操作 p.LastOPTimer = time.Now() idx := int(params[0]) - if len(sceneEx.DbGameFree.GetOtherIntParams()) <= idx { + if len(sceneEx.GetDBGameFree().GetOtherIntParams()) <= idx { pack := &protocol.SCRichBlessedOp{ OpCode: proto.Int(opcode), OpRetCode: proto.Int(3), @@ -423,13 +423,13 @@ func (this *SceneStateStartRichBlessed) OnPlayerOp(s *base.Scene, p *base.Player if playerEx.gameState == richblessed.Normal { logger.Logger.Tracef("(this *SceneStateStartRichBlessed) OnPlayerOp, 下注 %v %v %v", playerEx.betCoin, playerEx.maxbetCoin, playerEx.oneBetCoin) playerEx.betIdx = idx - playerEx.betCoin = int64(sceneEx.DbGameFree.GetOtherIntParams()[idx]) - maxidx := len(sceneEx.DbGameFree.GetOtherIntParams()) - 1 - playerEx.maxbetCoin = int64(sceneEx.DbGameFree.GetOtherIntParams()[maxidx]) + playerEx.betCoin = int64(sceneEx.GetDBGameFree().GetOtherIntParams()[idx]) + maxidx := len(sceneEx.GetDBGameFree().GetOtherIntParams()) - 1 + playerEx.maxbetCoin = int64(sceneEx.GetDBGameFree().GetOtherIntParams()[maxidx]) playerEx.oneBetCoin = playerEx.betCoin / richblessed.LineNum // 单注 playerEx.noWinTimes++ - if playerEx.Coin < int64(s.DbGameFree.GetBetLimit()) { + if playerEx.Coin < int64(s.GetDBGameFree().GetBetLimit()) { //押注限制(低于该值不能押注) pack := &protocol.SCRichBlessedOp{ OpCode: proto.Int(opcode), @@ -495,9 +495,9 @@ func (this *SceneStateStartRichBlessed) OnPlayerOp(s *base.Scene, p *base.Player case richblessed.RichBlessedPlayerOpSwitch: if len(params) > 0 && playerEx.freeTimes == 0 { idx := int(params[0]) - if len(sceneEx.DbGameFree.GetOtherIntParams()) > idx { + if len(sceneEx.GetDBGameFree().GetOtherIntParams()) > idx { playerEx.betIdx = idx - playerEx.betCoin = int64(sceneEx.DbGameFree.GetOtherIntParams()[idx]) + playerEx.betCoin = int64(sceneEx.GetDBGameFree().GetOtherIntParams()[idx]) playerEx.oneBetCoin = playerEx.betCoin / richblessed.LineNum pack := &protocol.SCRichBlessedOp{ OpCode: proto.Int(opcode), diff --git a/gamesrv/smallrocket/scene.go b/gamesrv/smallrocket/scene.go index b95f183..d7fec18 100644 --- a/gamesrv/smallrocket/scene.go +++ b/gamesrv/smallrocket/scene.go @@ -271,15 +271,15 @@ func (this *SceneEx) init() bool { } func (this *SceneEx) GetBaseScore() int32 { //游戏底分 - if this.DbGameFree != nil { - return this.DbGameFree.GetBaseScore() + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetBaseScore() } return 1 } func (this *SceneEx) GetBetMaxCoin() int32 { //游戏底分 - if this.DbGameFree != nil { - return this.DbGameFree.GetBaseScore() * 10000 + if this.GetDBGameFree() != nil { + return this.GetDBGameFree().GetBaseScore() * 10000 } return 1 * 10000 } diff --git a/gamesrv/tamquoc/scenedata_tamquoc.go b/gamesrv/tamquoc/scenedata_tamquoc.go index bf35be4..69891c1 100644 --- a/gamesrv/tamquoc/scenedata_tamquoc.go +++ b/gamesrv/tamquoc/scenedata_tamquoc.go @@ -52,14 +52,14 @@ func (this *TamQuocSceneData) SceneDestroy(force bool) { } func (this *TamQuocSceneData) init() bool { - if this.DbGameFree == nil { + if this.GetDBGameFree() == nil { return false } - params := this.DbGameFree.GetJackpot() + params := this.GetDBGameFree().GetJackpot() this.jackpot = &base.SlotJackpotPool{} if this.jackpot.Small <= 0 { this.jackpot.Small = 0 - this.jackpot.VirtualJK = int64(params[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + this.jackpot.VirtualJK = int64(params[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } str := base.SlotsPoolMgr.GetPool(this.GetGameFreeId(), this.Platform) if str != "" { @@ -95,7 +95,7 @@ type TamQuocSpinResult struct { } func (this *TamQuocSceneData) CalcLinePrize(cards []int, betLines []int64, betValue int64) (spinRes TamQuocSpinResult) { - taxRate := this.DbGameFree.GetTaxRate() + taxRate := this.GetDBGameFree().GetTaxRate() calcTaxScore := func(score int64, taxScore *int64) int64 { newScore := int64(float64(score) * float64(10000-taxRate) / 10000.0) if taxScore != nil { @@ -114,7 +114,7 @@ func (this *TamQuocSceneData) CalcLinePrize(cards []int, betLines []int64, betVa if spinRes.TotalPrizeJackpot == 0 { // 第一个爆奖 获取当前奖池所有 prizeJackpot = this.jackpot.VirtualJK } else { // 之后的爆奖 奖励为奖池初值 - prizeJackpot = int64(this.DbGameFree.GetJackpot()[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) + prizeJackpot = int64(this.GetDBGameFree().GetJackpot()[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) } prizeJackpot = calcTaxScore(prizeJackpot, &spinRes.TotalTaxScore) spinRes.TotalPrizeJackpot += prizeJackpot @@ -177,7 +177,7 @@ func (this *TamQuocSceneData) BroadcastJackpot(sync bool) { this.lastJackpotValue = this.jackpot.VirtualJK pack := &gamehall.SCHundredSceneGetGameJackpot{} jpfi := &gamehall.GameJackpotFundInfo{ - GameFreeId: proto.Int32(this.DbGameFree.Id), + GameFreeId: proto.Int32(this.GetDBGameFree().Id), JackPotFund: proto.Int64(this.jackpot.VirtualJK), } pack.GameJackpotFund = append(pack.GameJackpotFund, jpfi) @@ -204,7 +204,7 @@ func (this *TamQuocSceneData) PopCoinPool(winCoin int64, IsNovice bool) { } } func (this *TamQuocSceneData) RecordBurstLog(name string, wincoin, totalbet int64) { - log := model.NewBurstJackpotLog(this.Platform, this.DbGameFree.GameId, this.GetGameFreeId(), name, wincoin, totalbet) + log := model.NewBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId, this.GetGameFreeId(), name, wincoin, totalbet) task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { return model.InsertBurstJackpotLogs(log) }), nil, "InsertBurstJackpotLogs").Start() @@ -212,7 +212,7 @@ func (this *TamQuocSceneData) RecordBurstLog(name string, wincoin, totalbet int6 func (this *TamQuocSceneData) BurstHistory(player *TamQuocPlayerData) { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.GetBurstJackpotLog(this.Platform, this.DbGameFree.GameId) + return model.GetBurstJackpotLog(this.Platform, this.GetDBGameFree().GameId) }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { var logsp []*tamquoc.TamQuocBurstHistoryInfo if data != nil { @@ -240,7 +240,7 @@ func (this *TamQuocSceneData) GetLastBurstJackPot() time.Time { } func (this *TamQuocSceneData) SetLastBurstJackPot() { var randT = rand.Intn(25200-7200+1) + 7200 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(25200-7200+1) + 7200 case 2: @@ -254,7 +254,7 @@ func (this *TamQuocSceneData) SetLastBurstJackPot() { func (this *TamQuocSceneData) AIAddJackPot() { if time.Now().Sub(this.lastJackPot) > 0 { var randT = rand.Intn(3) + 1 - switch this.DbGameFree.SceneType { + switch this.GetDBGameFree().SceneType { case 1: randT = rand.Intn(3) + 1 case 2: @@ -265,20 +265,20 @@ func (this *TamQuocSceneData) AIAddJackPot() { randT = rand.Intn(3) + 1 } this.lastJackPot = time.Now().Add(time.Second * time.Duration(randT)) - val := int64(math.Floor(float64(this.DbGameFree.GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) + val := int64(math.Floor(float64(this.GetDBGameFree().GetBaseScore()) * float64(rule.LINENUM) * float64(500) / 10000)) this.jackpot.VirtualJK += val } } func (this *TamQuocSceneData) AIBurstJackPot() { if time.Now().Sub(this.GetLastBurstJackPot()) > 0 { this.SetLastBurstJackPot() - jackpotParams := this.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParams[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.DbGameFree.GetBaseScore()) //奖池初始值 + jackpotParams := this.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParams[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(this.GetDBGameFree().GetBaseScore()) //奖池初始值 //AI机器人爆奖 val := this.jackpot.VirtualJK this.jackpot.VirtualJK = jackpotInit - bet := int64(this.DbGameFree.GetBaseScore()) * int64(rule.LINENUM) + bet := int64(this.GetDBGameFree().GetBaseScore()) * int64(rule.LINENUM) this.RecordBurstLog(this.RandNickName(), val, int64(bet)) } } @@ -299,11 +299,11 @@ func (this *TamQuocSceneData) KickPlayerByTime() { } //for _, p := range this.players { // //游戏次数达到目标值 - // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.DbGameFree.GetId())) + // todayGamefreeIDSceneData, _ := p.GetDaliyGameData(int(this.GetDBGameFree().GetId())) // if !p.IsRob && // todayGamefreeIDSceneData != nil && - // this.DbGameFree.GetPlayNumLimit() != 0 && - // todayGamefreeIDSceneData.GameTimes >= int64(this.DbGameFree.GetPlayNumLimit()) { + // this.GetDBGameFree().GetPlayNumLimit() != 0 && + // todayGamefreeIDSceneData.GameTimes >= int64(this.GetDBGameFree().GetPlayNumLimit()) { // this.PlayerLeave(p.Player, common.PlayerLeaveReason_GameTimes, true) // } //} diff --git a/gamesrv/tamquoc/scenepolicy_tamquoc.go b/gamesrv/tamquoc/scenepolicy_tamquoc.go index f2cd36b..9d1aac5 100644 --- a/gamesrv/tamquoc/scenepolicy_tamquoc.go +++ b/gamesrv/tamquoc/scenepolicy_tamquoc.go @@ -90,8 +90,8 @@ func (this *ScenePolicyTamQuoc) OnPlayerEnter(s *base.Scene, p *base.Player) { logger.Logger.Trace("(this *ScenePolicyTamQuoc) OnPlayerEnter, sceneId=", s.SceneId, " player=", p.SnId) if sceneEx, ok := s.ExtraData.(*TamQuocSceneData); ok { playerEx := &TamQuocPlayerData{Player: p} - playerEx.init(s) // 玩家当前信息初始化 - playerEx.score = sceneEx.DbGameFree.GetBaseScore() // 底注 + playerEx.init(s) // 玩家当前信息初始化 + playerEx.score = sceneEx.GetDBGameFree().GetBaseScore() // 底注 sceneEx.players[p.SnId] = playerEx p.ExtraData = playerEx TamQuocSendRoomInfo(s, p, sceneEx, playerEx, nil) @@ -226,10 +226,10 @@ func (this *ScenePolicyTamQuoc) GetJackPotVal(s *base.Scene) int64 { func TamQuocSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *TamQuocSceneData, playerEx *TamQuocPlayerData, data *tamquoc.GameBilledData) { logger.Logger.Trace("-------------------发送房间消息 ", s.RoomId, p.SnId) pack := &tamquoc.SCTamQuocRoomInfo{ - RoomId: proto.Int(s.SceneId), + RoomId: s.SceneId, Creator: proto.Int32(s.Creator), - GameId: proto.Int(s.GameId), - RoomMode: proto.Int(s.GameMode), + GameId: s.GameId, + RoomMode: s.GameMode, Params: common.CopySliceInt64ToInt32(s.Params), State: proto.Int(s.SceneState.GetState()), Jackpot: proto.Int64(sceneEx.jackpot.VirtualJK), @@ -252,7 +252,7 @@ func TamQuocSendRoomInfo(s *base.Scene, p *base.Player, sceneEx *TamQuocSceneDat //} pack.BetLines = playerEx.betLines pack.FreeTimes = proto.Int32(playerEx.freeTimes) - pack.Chip = proto.Int32(s.DbGameFree.BaseScore) + pack.Chip = proto.Int32(s.GetDBGameFree().BaseScore) pack.SpinID = proto.Int64(playerEx.spinID) if playerEx.totalPriceBonus > 0 && playerEx.bonusGameStartTime.Add(TamQuocBonusGamePickTime).Before(time.Now()) { playerEx.totalPriceBonus = 0 @@ -339,7 +339,7 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op return false } //先做底注校验 - if sceneEx.DbGameFree.GetBaseScore() != int32(params[0]) { + if sceneEx.GetDBGameFree().GetBaseScore() != int32(params[0]) { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, tamquoc.OpResultCode_OPRC_Error, params) return false } @@ -373,7 +373,7 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op if playerEx.freeTimes <= 0 && totalBetValue > playerEx.Coin { this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, tamquoc.OpResultCode_OPRC_CoinNotEnough, params) return false - } else if playerEx.freeTimes <= 0 && int64(sceneEx.DbGameFree.GetBetLimit()) > playerEx.Coin { //押注限制 + } else if playerEx.freeTimes <= 0 && int64(sceneEx.GetDBGameFree().GetBetLimit()) > playerEx.Coin { //押注限制 this.OnPlayerSToCOp(s, p, playerEx.Pos, opcode, tamquoc.OpResultCode_OPRC_CoinNotEnough, params) return false } @@ -388,7 +388,7 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op sceneEx.CpCtx = base.CoinPoolMgr.GetCoinPoolCtx(sceneEx.Platform, sceneEx.GetGameFreeId(), sceneEx.GroupId) //税收比例 - taxRate := sceneEx.DbGameFree.GetTaxRate() + taxRate := sceneEx.GetDBGameFree().GetTaxRate() if taxRate < 0 || taxRate > 10000 { logger.Logger.Tracef("TamQuocErrorTaxRate [%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, taxRate) taxRate = 500 @@ -410,8 +410,8 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 // 奖池参数 - var jackpotParam = sceneEx.DbGameFree.GetJackpot() - var jackpotInit = int64(jackpotParam[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(sceneEx.DbGameFree.GetBaseScore()) //奖池初始值 + var jackpotParam = sceneEx.GetDBGameFree().GetJackpot() + var jackpotInit = int64(jackpotParam[rule.TAMQUOC_JACKPOT_InitJackpot]) * int64(sceneEx.GetDBGameFree().GetBaseScore()) //奖池初始值 var jackpotFundAdd, prizeFundAdd int64 if playerEx.freeTimes <= 0 { //正常模式才能记录用户的押注变化,免费模式不能改变押注 @@ -431,7 +431,7 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op //统计参与游戏次数 //if !sceneEx.Testing && !playerEx.IsRob { // pack := &server.GWSceneEnd{ - // GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + // GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), // Players: []*server.PlayerCtx{&server.PlayerCtx{SnId: proto.Int32(playerEx.SnId), Coin: proto.Int64(playerEx.Coin)}}, // } // proto.SetDefaults(pack) @@ -454,11 +454,11 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op var slotDataIsOk bool for i := 0; i < 3; i++ { slotData = rule.GenerateSlotsData_v2(symbolType) - //if sceneEx.DbGameFree.GetSceneType() == 1 { + //if sceneEx.GetDBGameFree().GetSceneType() == 1 { // slotData = []int{1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7} //} spinRes = sceneEx.CalcLinePrize(slotData, playerEx.betLines, params[0]) - //if sceneEx.DbGameFree.GetSceneType() == 1 { + //if sceneEx.GetDBGameFree().GetSceneType() == 1 { // slotDataIsOk = true // break //} @@ -641,7 +641,7 @@ func (this *SceneStateTamQuocStart) OnPlayerOp(s *base.Scene, p *base.Player, op case TamQuocPlayerHistory: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { spinid := strconv.FormatInt(int64(playerEx.SnId), 10) - gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.DbGameFree.GetGameClass(), s.GameId) + gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 80, 0, 0, 0, s.GetDBGameFree().GetGameClass(), int(s.GameId)) pack := &tamquoc.SCTamQuocPlayerHistory{} for _, v := range gpl.Data { //if v.GameDetailedLogId == "" { @@ -759,7 +759,7 @@ func TamQuocCheckAndSaveLog(sceneEx *TamQuocSceneData, playerEx *TamQuocPlayerDa //log2 playerEx.RollGameType.BaseResult.ChangeCoin = changeCoin - playerEx.RollGameType.BaseResult.BasicBet = sceneEx.DbGameFree.GetBaseScore() + playerEx.RollGameType.BaseResult.BasicBet = sceneEx.GetDBGameFree().GetBaseScore() playerEx.RollGameType.BaseResult.RoomId = int32(sceneEx.SceneId) playerEx.RollGameType.BaseResult.AfterCoin = playerEx.Coin playerEx.RollGameType.BaseResult.BeforeCoin = startCoin @@ -818,8 +818,8 @@ func TamQuocCheckAndSaveLog(sceneEx *TamQuocSceneData, playerEx *TamQuocPlayerDa GameCoinTs: proto.Int64(playerEx.GameCoinTs), } gwPlayerBet := &server.GWPlayerData{ - SceneId: proto.Int(sceneEx.SceneId), - GameFreeId: proto.Int32(sceneEx.DbGameFree.GetId()), + SceneId: sceneEx.SceneId, + GameFreeId: proto.Int32(sceneEx.GetDBGameFree().GetId()), } gwPlayerBet.Datas = append(gwPlayerBet.Datas, playerBet) sceneEx.SyncPlayerDatas(&base.PlayerDataParam{ diff --git a/gamesrv/thirteen/scene.go b/gamesrv/thirteen/scene.go index 1236c1e..af3c1b7 100644 --- a/gamesrv/thirteen/scene.go +++ b/gamesrv/thirteen/scene.go @@ -368,15 +368,15 @@ func (this *SceneEx) ThirteenWaterCreateRoomInfoPacket(s *base.Scene, p *base.Pl } func (this *SceneEx) GetBaseScore() int64 { //游戏底分 - if this.DbGameFree.FreeMode == 1 { + if this.GetDBGameFree().FreeMode == 1 { baseScore := this.GetParam(rule.ParamBaseScore) if baseScore > 0 { return baseScore } } - if this.DbGameFree != nil { - return int64(this.DbGameFree.GetBaseScore()) + if this.GetDBGameFree() != nil { + return int64(this.GetDBGameFree().GetBaseScore()) } return 1 } @@ -1268,7 +1268,7 @@ func (this *SceneEx) CountBilled() { } if playerEx.gainCoin > 0 { gainCoin := playerEx.gainCoin - playerEx.gainCoin = playerEx.gainCoin * int64(10000-this.DbGameFree.GetTaxRate()) / 10000 + playerEx.gainCoin = playerEx.gainCoin * int64(10000-this.GetDBGameFree().GetTaxRate()) / 10000 playerEx.taxCoin = gainCoin - playerEx.gainCoin } logger.Logger.Tracef("玩家分数 %v, coin:%v tax:%v win:%v", playerEx.SnId, playerEx.gainCoin, playerEx.taxCoin, playerEx.winAllPlayers) @@ -1334,7 +1334,7 @@ func (this *SceneEx) SendHandCardOdds() { if seat.IsRob { robotPlayers = append(robotPlayers, seat) } else { - seat.odds = this.GetPlayerOdds(seat.Player, this.GameId, this.robotNum > 0) + seat.odds = this.GetPlayerOdds(seat.Player, int(this.GameId), this.robotNum > 0) seat.playerPool = int(this.PlayerPoolOdds(seat.Player)) if seat.odds > 0 { realPlayersGood = append(realPlayersGood, seat) diff --git a/gamesrv/thirteen/scenepolicy.go b/gamesrv/thirteen/scenepolicy.go index e9ab157..a577c4f 100644 --- a/gamesrv/thirteen/scenepolicy.go +++ b/gamesrv/thirteen/scenepolicy.go @@ -1258,9 +1258,9 @@ func (this *StateBilled) OnEnter(s *base.Scene) { if sceneEx.gamePlayerNum-sceneEx.robotNum > 0 { /////////////////////////////////////统计牌局详细记录 thirteenWaterType := model.ThirteenWaterType{ - RoomId: int32(sceneEx.SceneId), + RoomId: sceneEx.SceneId, RoomRounds: int32(sceneEx.NumOfGames), - RoomType: int32(sceneEx.SceneType), + RoomType: sceneEx.GetSceneType(), BaseScore: int32(sceneEx.GetBaseScore()), NowRound: int32(sceneEx.NumOfGames), ClubRate: sceneEx.Scene.PumpCoin, @@ -1462,7 +1462,7 @@ func (this *StateBilled) OnLeave(s *base.Scene) { s.TryDismissRob() } - if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.MatchFinals || (s.MatchFinals && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 + if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.GetMatch().GetIsFinals() || (s.GetMatch().GetIsFinals() && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 sceneEx.SceneDestroy(true) } s.TryRelease() diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index 22634d4..6b8c890 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -386,7 +386,7 @@ func (this *TienLenSceneData) BroadcastOpPos() { for _, seat := range this.seats { if seat != nil && seat.IsGameing() { if !seat.IsRob { - seat.odds = this.GetPlayerOdds(seat.Player, this.GameId, this.robotGamingNum > 0) + seat.odds = this.GetPlayerOdds(seat.Player, int(this.GameId), this.robotGamingNum > 0) if seat.odds < 0 { B -= seat.odds } @@ -538,7 +538,7 @@ func (this *TienLenSceneData) IsTienLenToEnd() bool { return common.IsTienLenToEnd(this.GetGameId()) } func (this *TienLenSceneData) GetFreeGameSceneType() int32 { - return int32(this.SceneType) + return this.GetSceneType() } // 比赛场发牌 @@ -1076,7 +1076,7 @@ func (this *TienLenSceneData) SendHandCardOdds() { if seat.IsRob { robotPlayers = append(robotPlayers, seat) } else { - seat.odds = this.GetPlayerOdds(seat.Player, this.GameId, this.robotGamingNum > 0) + seat.odds = this.GetPlayerOdds(seat.Player, int(this.GameId), this.robotGamingNum > 0) seat.playerPool = int(this.PlayerPoolOdds(seat.Player)) if seat.odds > 0 { realPlayersGood = append(realPlayersGood, seat) @@ -1087,7 +1087,7 @@ func (this *TienLenSceneData) SendHandCardOdds() { } else { realPlayers = append(realPlayers, seat) } - _, isNovice := seat.NoviceOdds(this.GameId) + _, isNovice := seat.NoviceOdds(int(this.GameId)) if isNovice { novicePlayers = append(novicePlayers, seat) } else { @@ -1967,7 +1967,7 @@ func (this *TienLenSceneData) TrySmallGameBilled() { logger.Logger.Trace("宠物技能抵挡炸弹生效,发送消息 SCTienLenPetSkillRes: ", pack) } if score != 0 { - taxRate := this.DbGameFree.GetTaxRate() //万分比 + taxRate := this.GetDBGameFree().GetTaxRate() //万分比 gainScore := int64(float64(score) * float64(10000-taxRate) / 10000.0) //税后 bombTaxScore := score - gainScore // win diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 021df7d..5b8ce7b 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -423,7 +423,7 @@ func TienLenCreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *TienLen State: proto.Int32(int32(s.GetSceneState().GetState())), TimeOut: proto.Int(s.GetSceneState().GetTimeout(s)), NumOfGames: proto.Int(sceneEx.NumOfGames), - TotalOfGames: proto.Int(sceneEx.TotalOfGames), + TotalOfGames: sceneEx.TotalOfGames, CurOpIdx: proto.Int(-1), MasterSnid: proto.Int32(sceneEx.masterSnid), AudienceNum: proto.Int(s.GetAudiencesNum()), @@ -432,18 +432,26 @@ func TienLenCreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *TienLen RankType: s.GetDBGameFree().GetRankType(), SceneAdd: s.GetDBGameFree().GetSceneAdd(), // 比赛场相关 - Round: int32(s.MatchRound), - CurPlayerNum: int32(s.MatchCurPlayerNum), - NextNeed: int32(s.MatchNextNeed), + Round: s.GetMatch().GetCurrRound(), + CurPlayerNum: s.GetMatch().GetCurrPlayerNum(), + NextNeed: s.GetMatch().GetNextPlayerNum(), RecordId: sceneEx.recordId, + RoomTypeId: s.GetCustom().GetRoomTypeId(), + RoomConfigId: s.GetCustom().GetRoomConfigId(), + CostType: s.GetCustom().GetCostType(), + Voice: s.GetCustom().GetVoice(), + Password: s.GetCustom().GetPassword(), + } + if s.GetCustom().GetPassword() != "" { + pack.NeedPassword = 1 } pack.IsMatch = int32(0) // 0.普通场 1.锦标赛 2.冠军赛 3.vip专属 if s.IsMatchScene() { - pack.IsMatch = int32(s.MatchType) + pack.IsMatch = s.GetMatch().GetMatchType() } pack.MatchFinals = 0 - if s.MatchFinals { + if s.GetMatch().GetIsFinals() { pack.MatchFinals = 1 if s.NumOfGames >= 2 { pack.MatchFinals = 2 @@ -879,7 +887,7 @@ func (this *SceneWaitStartStateTienLen) OnTick(s *base.Scene) { if sceneEx, ok := s.GetExtraData().(*TienLenSceneData); ok { if sceneEx.IsMatchScene() { delayT := time.Second * 2 - if sceneEx.MatchRound != 1 { //第一轮延迟2s,其他延迟3s 配合客户端播放动画 + if sceneEx.GetMatch().GetCurrRound() != 1 { //第一轮延迟2s,其他延迟3s 配合客户端播放动画 delayT = time.Second * 4 } if time.Now().Sub(sceneEx.StateStartTime) > delayT { @@ -985,7 +993,7 @@ func (this *SceneHandCardStateTienLen) OnEnter(s *base.Scene) { seat.tianHu = rule.TianHu12Straight } if seat.tianHu > 0 { - keyNovice := common.GetKeyNoviceGameId(sceneEx.GameId) + keyNovice := common.GetKeyNoviceGameId(int(sceneEx.GameId)) data, ok := seat.GDatas[keyNovice] if !ok { data = &model.PlayerGameInfo{FirstTime: time.Now()} @@ -1640,14 +1648,14 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { winRankScore := int64(0) pack := &tienlen.SCTienLenGameBilled{} tienlenType := model.TienLenType{ - GameId: sceneEx.GameId, + GameId: int(sceneEx.GameId), RoomId: int32(sceneEx.GetSceneId()), RoomType: sceneEx.GetFreeGameSceneType(), NumOfGames: int32(sceneEx.Scene.NumOfGames), BankId: sceneEx.masterSnid, PlayerCount: sceneEx.curGamingPlayerNum, BaseScore: s.GetBaseScore(), - TaxRate: s.DbGameFree.GetTaxRate(), + TaxRate: s.GetDBGameFree().GetTaxRate(), RoomMode: s.GetSceneMode(), PlayerPool: make(map[int]int), } @@ -2023,7 +2031,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { var otherScore int64 // 额外总加分 oldRankScore := playerEx.GetRankScore(sceneEx.GetDBGameFree().GetRankType()) rankScore = loseRankScore - taxRate := sceneEx.DbGameFree.GetTaxRate() //万分比 + taxRate := sceneEx.GetDBGameFree().GetTaxRate() //万分比 gainScore := int64(float64(losePlayerScore) * float64(10000-taxRate) / 10000.0) //税后 gainTaxScore := losePlayerScore - gainScore // 税收 if playerNum == 3 { @@ -2133,7 +2141,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { var otherScore int64 // 额外总加分 oldRankScore := playerEx.GetRankScore(sceneEx.GetDBGameFree().GetRankType()) rankScore = lastWinPlayerRankScore - taxRate := sceneEx.DbGameFree.GetTaxRate() //万分比 + taxRate := sceneEx.GetDBGameFree().GetTaxRate() //万分比 gainScore := int64(float64(lastWinPlayerScore) * float64(10000-taxRate) / 10000.0) //税后 gainTaxScore := lastWinPlayerScore - gainScore if sceneEx.IsMatchScene() || sceneEx.IsCustom() { @@ -2414,7 +2422,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { var otherScore int64 // 额外总加分 playerEx := sceneEx.players[winSnid] if playerEx != nil { - taxRate := sceneEx.DbGameFree.GetTaxRate() //万分比 + taxRate := sceneEx.GetDBGameFree().GetTaxRate() //万分比 gainScore := int64(float64(winScore) * float64(10000-taxRate) / 10000.0) //税后 gainTaxScore := winScore - gainScore if sceneEx.IsMatchScene() || sceneEx.IsCustom() { @@ -2550,7 +2558,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { } sceneEx.RoundEndTime = append(sceneEx.RoundEndTime, time.Now().Unix()) sceneEx.RoundLogId = append(sceneEx.RoundLogId, sceneEx.recordId) - if sceneEx.NumOfGames >= sceneEx.TotalOfGames { + if sceneEx.NumOfGames >= int(sceneEx.TotalOfGames) { sceneEx.BilledList = make(map[int32]*[]*BilledInfo) sceneEx.RoundEndTime = sceneEx.RoundEndTime[:0] sceneEx.RoundLogId = sceneEx.RoundLogId[:0] @@ -2780,10 +2788,10 @@ func (this *SceneBilledStateTienLen) OnLeave(s *base.Scene) { s.TryDismissRob() } - if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.MatchFinals || (s.MatchFinals && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 + if s.CheckNeedDestroy() || (s.IsMatchScene() && (!s.GetMatch().GetIsFinals() || (s.GetMatch().GetIsFinals() && s.NumOfGames >= 2))) { // 非决赛打一场 决赛打两场 sceneEx.SceneDestroy(true) } - if s.TotalOfGames > 0 && s.NumOfGames >= s.TotalOfGames { + if s.TotalOfGames > 0 && s.NumOfGames >= int(s.TotalOfGames) { sceneEx.SceneDestroy(true) } s.RankMatchDestroy() diff --git a/protocol/server/server.pb.go b/protocol/server/server.pb.go index 7341ecd..3f7a0d9 100644 --- a/protocol/server/server.pb.go +++ b/protocol/server/server.pb.go @@ -903,42 +903,210 @@ func (x *Item) GetNum() int64 { return 0 } +type CustomParam struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomTypeId int32 `protobuf:"varint,1,opt,name=RoomTypeId,proto3" json:"RoomTypeId,omitempty"` // 房间类型id + RoomConfigId int32 `protobuf:"varint,2,opt,name=RoomConfigId,proto3" json:"RoomConfigId,omitempty"` // 房间配置id + CostType int32 `protobuf:"varint,3,opt,name=CostType,proto3" json:"CostType,omitempty"` // 房卡场付费方式 1房主 2AA + Password string `protobuf:"bytes,4,opt,name=Password,proto3" json:"Password,omitempty"` // 房间密码 + Voice int32 `protobuf:"varint,5,opt,name=Voice,proto3" json:"Voice,omitempty"` // 是否开启语音 1开启 2关闭 +} + +func (x *CustomParam) Reset() { + *x = CustomParam{} + if protoimpl.UnsafeEnabled { + mi := &file_server_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CustomParam) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CustomParam) ProtoMessage() {} + +func (x *CustomParam) ProtoReflect() protoreflect.Message { + mi := &file_server_proto_msgTypes[9] + 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 CustomParam.ProtoReflect.Descriptor instead. +func (*CustomParam) Descriptor() ([]byte, []int) { + return file_server_proto_rawDescGZIP(), []int{9} +} + +func (x *CustomParam) GetRoomTypeId() int32 { + if x != nil { + return x.RoomTypeId + } + return 0 +} + +func (x *CustomParam) GetRoomConfigId() int32 { + if x != nil { + return x.RoomConfigId + } + return 0 +} + +func (x *CustomParam) GetCostType() int32 { + if x != nil { + return x.CostType + } + return 0 +} + +func (x *CustomParam) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +func (x *CustomParam) GetVoice() int32 { + if x != nil { + return x.Voice + } + return 0 +} + +type MatchParam struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MatchSortId int64 `protobuf:"varint,1,opt,name=MatchSortId,proto3" json:"MatchSortId,omitempty"` // 比赛实例id + MatchId int32 `protobuf:"varint,2,opt,name=MatchId,proto3" json:"MatchId,omitempty"` // 比赛配置id + IsFinals bool `protobuf:"varint,3,opt,name=IsFinals,proto3" json:"IsFinals,omitempty"` // 是否决赛 + CurrRound int32 `protobuf:"varint,4,opt,name=CurrRound,proto3" json:"CurrRound,omitempty"` // 当前第几轮 + CurrPlayerNum int32 `protobuf:"varint,5,opt,name=CurrPlayerNum,proto3" json:"CurrPlayerNum,omitempty"` // 本轮玩家数 + NextPlayerNum int32 `protobuf:"varint,6,opt,name=NextPlayerNum,proto3" json:"NextPlayerNum,omitempty"` // 下轮最大玩家数 + MatchType int32 `protobuf:"varint,7,opt,name=MatchType,proto3" json:"MatchType,omitempty"` // 比赛类型 +} + +func (x *MatchParam) Reset() { + *x = MatchParam{} + if protoimpl.UnsafeEnabled { + mi := &file_server_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchParam) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchParam) ProtoMessage() {} + +func (x *MatchParam) ProtoReflect() protoreflect.Message { + mi := &file_server_proto_msgTypes[10] + 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 MatchParam.ProtoReflect.Descriptor instead. +func (*MatchParam) Descriptor() ([]byte, []int) { + return file_server_proto_rawDescGZIP(), []int{10} +} + +func (x *MatchParam) GetMatchSortId() int64 { + if x != nil { + return x.MatchSortId + } + return 0 +} + +func (x *MatchParam) GetMatchId() int32 { + if x != nil { + return x.MatchId + } + return 0 +} + +func (x *MatchParam) GetIsFinals() bool { + if x != nil { + return x.IsFinals + } + return false +} + +func (x *MatchParam) GetCurrRound() int32 { + if x != nil { + return x.CurrRound + } + return 0 +} + +func (x *MatchParam) GetCurrPlayerNum() int32 { + if x != nil { + return x.CurrPlayerNum + } + return 0 +} + +func (x *MatchParam) GetNextPlayerNum() int32 { + if x != nil { + return x.NextPlayerNum + } + return 0 +} + +func (x *MatchParam) GetMatchType() int32 { + if x != nil { + return x.MatchType + } + return 0 +} + //PACKET_WG_CREATESCENE type WGCreateScene struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SceneId int32 `protobuf:"varint,1,opt,name=SceneId,proto3" json:"SceneId,omitempty"` - GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` - GameMode int32 `protobuf:"varint,3,opt,name=GameMode,proto3" json:"GameMode,omitempty"` - Params []int64 `protobuf:"varint,4,rep,packed,name=Params,proto3" json:"Params,omitempty"` - Creator int32 `protobuf:"varint,5,opt,name=Creator,proto3" json:"Creator,omitempty"` - Agentor int32 `protobuf:"varint,6,opt,name=Agentor,proto3" json:"Agentor,omitempty"` - ReplayCode string `protobuf:"bytes,7,opt,name=ReplayCode,proto3" json:"ReplayCode,omitempty"` - ParamsEx []int64 `protobuf:"varint,8,rep,packed,name=ParamsEx,proto3" json:"ParamsEx,omitempty"` - SceneMode int32 `protobuf:"varint,9,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` - HallId int32 `protobuf:"varint,10,opt,name=HallId,proto3" json:"HallId,omitempty"` - Platform string `protobuf:"bytes,11,opt,name=Platform,proto3" json:"Platform,omitempty"` - DBGameFree *DB_GameFree `protobuf:"bytes,12,opt,name=DBGameFree,proto3" json:"DBGameFree,omitempty"` - GroupId int32 `protobuf:"varint,13,opt,name=GroupId,proto3" json:"GroupId,omitempty"` - EnterAfterStart bool `protobuf:"varint,14,opt,name=EnterAfterStart,proto3" json:"EnterAfterStart,omitempty"` - TotalOfGames int32 `protobuf:"varint,15,opt,name=TotalOfGames,proto3" json:"TotalOfGames,omitempty"` - Club int32 `protobuf:"varint,16,opt,name=Club,proto3" json:"Club,omitempty"` //俱乐部Id - ClubRoomId string `protobuf:"bytes,17,opt,name=ClubRoomId,proto3" json:"ClubRoomId,omitempty"` - ClubRoomPos int32 `protobuf:"varint,18,opt,name=ClubRoomPos,proto3" json:"ClubRoomPos,omitempty"` - ClubRate int32 `protobuf:"varint,19,opt,name=ClubRate,proto3" json:"ClubRate,omitempty"` - BaseScore int32 `protobuf:"varint,20,opt,name=BaseScore,proto3" json:"BaseScore,omitempty"` - PlayerNum int32 `protobuf:"varint,21,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` - RealCtrl bool `protobuf:"varint,22,opt,name=RealCtrl,proto3" json:"RealCtrl,omitempty"` - ChessRank []int32 `protobuf:"varint,23,rep,packed,name=ChessRank,proto3" json:"ChessRank,omitempty"` - Items []*Item `protobuf:"bytes,24,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励道具 + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` // 平台 + SceneId int32 `protobuf:"varint,2,opt,name=SceneId,proto3" json:"SceneId,omitempty"` // 房间id + GameId int32 `protobuf:"varint,3,opt,name=GameId,proto3" json:"GameId,omitempty"` // 游戏id + GameMode int32 `protobuf:"varint,4,opt,name=GameMode,proto3" json:"GameMode,omitempty"` // 废弃,游戏模式 + SceneMode int32 `protobuf:"varint,5,opt,name=SceneMode,proto3" json:"SceneMode,omitempty"` // 房间模式 + ReplayCode string `protobuf:"bytes,6,opt,name=ReplayCode,proto3" json:"ReplayCode,omitempty"` // 回放码 + DBGameFree *DB_GameFree `protobuf:"bytes,7,opt,name=DBGameFree,proto3" json:"DBGameFree,omitempty"` // 场次配置 + TotalOfGames int32 `protobuf:"varint,8,opt,name=TotalOfGames,proto3" json:"TotalOfGames,omitempty"` // 总局数 + PlayerNum int32 `protobuf:"varint,9,opt,name=PlayerNum,proto3" json:"PlayerNum,omitempty"` // 最大玩家数 + EnterAfterStart bool `protobuf:"varint,10,opt,name=EnterAfterStart,proto3" json:"EnterAfterStart,omitempty"` // 是否开始后可加入 + Creator int32 `protobuf:"varint,11,opt,name=Creator,proto3" json:"Creator,omitempty"` // 创建者id + BaseScore int32 `protobuf:"varint,12,opt,name=BaseScore,proto3" json:"BaseScore,omitempty"` // 底分 + Items []*Item `protobuf:"bytes,13,rep,name=Items,proto3" json:"Items,omitempty"` // 获得道具 + CostItems []*Item `protobuf:"bytes,14,rep,name=CostItems,proto3" json:"CostItems,omitempty"` // 消耗道具 + Custom *CustomParam `protobuf:"bytes,15,opt,name=Custom,proto3" json:"Custom,omitempty"` // 房卡场参数 + Match *MatchParam `protobuf:"bytes,16,opt,name=Match,proto3" json:"Match,omitempty"` // 比赛场参数 + ChessRank []int32 `protobuf:"varint,26,rep,packed,name=ChessRank,proto3" json:"ChessRank,omitempty"` // 象棋段位配置 + Params []int64 `protobuf:"varint,27,rep,packed,name=Params,proto3" json:"Params,omitempty"` // 游戏参数,GameRule中定义,不要有其他用途,含义不明确 } func (x *WGCreateScene) Reset() { *x = WGCreateScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[9] + mi := &file_server_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -951,7 +1119,7 @@ func (x *WGCreateScene) String() string { func (*WGCreateScene) ProtoMessage() {} func (x *WGCreateScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[9] + mi := &file_server_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -964,7 +1132,14 @@ func (x *WGCreateScene) ProtoReflect() protoreflect.Message { // Deprecated: Use WGCreateScene.ProtoReflect.Descriptor instead. func (*WGCreateScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{9} + return file_server_proto_rawDescGZIP(), []int{11} +} + +func (x *WGCreateScene) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" } func (x *WGCreateScene) GetSceneId() int32 { @@ -988,23 +1163,9 @@ func (x *WGCreateScene) GetGameMode() int32 { return 0 } -func (x *WGCreateScene) GetParams() []int64 { +func (x *WGCreateScene) GetSceneMode() int32 { if x != nil { - return x.Params - } - return nil -} - -func (x *WGCreateScene) GetCreator() int32 { - if x != nil { - return x.Creator - } - return 0 -} - -func (x *WGCreateScene) GetAgentor() int32 { - if x != nil { - return x.Agentor + return x.SceneMode } return 0 } @@ -1016,34 +1177,6 @@ func (x *WGCreateScene) GetReplayCode() string { return "" } -func (x *WGCreateScene) GetParamsEx() []int64 { - if x != nil { - return x.ParamsEx - } - return nil -} - -func (x *WGCreateScene) GetSceneMode() int32 { - if x != nil { - return x.SceneMode - } - return 0 -} - -func (x *WGCreateScene) GetHallId() int32 { - if x != nil { - return x.HallId - } - return 0 -} - -func (x *WGCreateScene) GetPlatform() string { - if x != nil { - return x.Platform - } - return "" -} - func (x *WGCreateScene) GetDBGameFree() *DB_GameFree { if x != nil { return x.DBGameFree @@ -1051,20 +1184,6 @@ func (x *WGCreateScene) GetDBGameFree() *DB_GameFree { return nil } -func (x *WGCreateScene) GetGroupId() int32 { - if x != nil { - return x.GroupId - } - return 0 -} - -func (x *WGCreateScene) GetEnterAfterStart() bool { - if x != nil { - return x.EnterAfterStart - } - return false -} - func (x *WGCreateScene) GetTotalOfGames() int32 { if x != nil { return x.TotalOfGames @@ -1072,41 +1191,6 @@ func (x *WGCreateScene) GetTotalOfGames() int32 { return 0 } -func (x *WGCreateScene) GetClub() int32 { - if x != nil { - return x.Club - } - return 0 -} - -func (x *WGCreateScene) GetClubRoomId() string { - if x != nil { - return x.ClubRoomId - } - return "" -} - -func (x *WGCreateScene) GetClubRoomPos() int32 { - if x != nil { - return x.ClubRoomPos - } - return 0 -} - -func (x *WGCreateScene) GetClubRate() int32 { - if x != nil { - return x.ClubRate - } - return 0 -} - -func (x *WGCreateScene) GetBaseScore() int32 { - if x != nil { - return x.BaseScore - } - return 0 -} - func (x *WGCreateScene) GetPlayerNum() int32 { if x != nil { return x.PlayerNum @@ -1114,13 +1198,55 @@ func (x *WGCreateScene) GetPlayerNum() int32 { return 0 } -func (x *WGCreateScene) GetRealCtrl() bool { +func (x *WGCreateScene) GetEnterAfterStart() bool { if x != nil { - return x.RealCtrl + return x.EnterAfterStart } return false } +func (x *WGCreateScene) GetCreator() int32 { + if x != nil { + return x.Creator + } + return 0 +} + +func (x *WGCreateScene) GetBaseScore() int32 { + if x != nil { + return x.BaseScore + } + return 0 +} + +func (x *WGCreateScene) GetItems() []*Item { + if x != nil { + return x.Items + } + return nil +} + +func (x *WGCreateScene) GetCostItems() []*Item { + if x != nil { + return x.CostItems + } + return nil +} + +func (x *WGCreateScene) GetCustom() *CustomParam { + if x != nil { + return x.Custom + } + return nil +} + +func (x *WGCreateScene) GetMatch() *MatchParam { + if x != nil { + return x.Match + } + return nil +} + func (x *WGCreateScene) GetChessRank() []int32 { if x != nil { return x.ChessRank @@ -1128,9 +1254,9 @@ func (x *WGCreateScene) GetChessRank() []int32 { return nil } -func (x *WGCreateScene) GetItems() []*Item { +func (x *WGCreateScene) GetParams() []int64 { if x != nil { - return x.Items + return x.Params } return nil } @@ -1148,7 +1274,7 @@ type WGDestroyScene struct { func (x *WGDestroyScene) Reset() { *x = WGDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[10] + mi := &file_server_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1161,7 +1287,7 @@ func (x *WGDestroyScene) String() string { func (*WGDestroyScene) ProtoMessage() {} func (x *WGDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[10] + mi := &file_server_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1174,7 +1300,7 @@ func (x *WGDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDestroyScene.ProtoReflect.Descriptor instead. func (*WGDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{10} + return file_server_proto_rawDescGZIP(), []int{12} } func (x *WGDestroyScene) GetIds() []int64 { @@ -1204,7 +1330,7 @@ type GWDestroyScene struct { func (x *GWDestroyScene) Reset() { *x = GWDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[11] + mi := &file_server_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1217,7 +1343,7 @@ func (x *GWDestroyScene) String() string { func (*GWDestroyScene) ProtoMessage() {} func (x *GWDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[11] + mi := &file_server_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1230,7 +1356,7 @@ func (x *GWDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDestroyScene.ProtoReflect.Descriptor instead. func (*GWDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{11} + return file_server_proto_rawDescGZIP(), []int{13} } func (x *GWDestroyScene) GetSceneId() int64 { @@ -1259,7 +1385,7 @@ type RebateTask struct { func (x *RebateTask) Reset() { *x = RebateTask{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[12] + mi := &file_server_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1272,7 +1398,7 @@ func (x *RebateTask) String() string { func (*RebateTask) ProtoMessage() {} func (x *RebateTask) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[12] + mi := &file_server_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1285,7 +1411,7 @@ func (x *RebateTask) ProtoReflect() protoreflect.Message { // Deprecated: Use RebateTask.ProtoReflect.Descriptor instead. func (*RebateTask) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{12} + return file_server_proto_rawDescGZIP(), []int{14} } func (x *RebateTask) GetRebateSwitch() bool { @@ -1335,7 +1461,7 @@ type WGPlayerEnter struct { func (x *WGPlayerEnter) Reset() { *x = WGPlayerEnter{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[13] + mi := &file_server_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1348,7 +1474,7 @@ func (x *WGPlayerEnter) String() string { func (*WGPlayerEnter) ProtoMessage() {} func (x *WGPlayerEnter) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[13] + mi := &file_server_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1361,7 +1487,7 @@ func (x *WGPlayerEnter) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerEnter.ProtoReflect.Descriptor instead. func (*WGPlayerEnter) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{13} + return file_server_proto_rawDescGZIP(), []int{15} } func (x *WGPlayerEnter) GetSid() int64 { @@ -1527,7 +1653,7 @@ type WGAudienceSit struct { func (x *WGAudienceSit) Reset() { *x = WGAudienceSit{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[14] + mi := &file_server_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1540,7 +1666,7 @@ func (x *WGAudienceSit) String() string { func (*WGAudienceSit) ProtoMessage() {} func (x *WGAudienceSit) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[14] + mi := &file_server_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1553,7 +1679,7 @@ func (x *WGAudienceSit) ProtoReflect() protoreflect.Message { // Deprecated: Use WGAudienceSit.ProtoReflect.Descriptor instead. func (*WGAudienceSit) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{14} + return file_server_proto_rawDescGZIP(), []int{16} } func (x *WGAudienceSit) GetSnId() int32 { @@ -1599,7 +1725,7 @@ type WGPlayerReturn struct { func (x *WGPlayerReturn) Reset() { *x = WGPlayerReturn{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[15] + mi := &file_server_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1612,7 +1738,7 @@ func (x *WGPlayerReturn) String() string { func (*WGPlayerReturn) ProtoMessage() {} func (x *WGPlayerReturn) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[15] + mi := &file_server_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1625,7 +1751,7 @@ func (x *WGPlayerReturn) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerReturn.ProtoReflect.Descriptor instead. func (*WGPlayerReturn) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{15} + return file_server_proto_rawDescGZIP(), []int{17} } func (x *WGPlayerReturn) GetPlayerId() int32 { @@ -1687,7 +1813,7 @@ type GWPlayerLeave struct { func (x *GWPlayerLeave) Reset() { *x = GWPlayerLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[16] + mi := &file_server_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1700,7 +1826,7 @@ func (x *GWPlayerLeave) String() string { func (*GWPlayerLeave) ProtoMessage() {} func (x *GWPlayerLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[16] + mi := &file_server_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1713,7 +1839,7 @@ func (x *GWPlayerLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerLeave.ProtoReflect.Descriptor instead. func (*GWPlayerLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{16} + return file_server_proto_rawDescGZIP(), []int{18} } func (x *GWPlayerLeave) GetRoomId() int32 { @@ -1862,7 +1988,7 @@ type WGPlayerDropLine struct { func (x *WGPlayerDropLine) Reset() { *x = WGPlayerDropLine{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[17] + mi := &file_server_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1875,7 +2001,7 @@ func (x *WGPlayerDropLine) String() string { func (*WGPlayerDropLine) ProtoMessage() {} func (x *WGPlayerDropLine) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[17] + mi := &file_server_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1888,7 +2014,7 @@ func (x *WGPlayerDropLine) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerDropLine.ProtoReflect.Descriptor instead. func (*WGPlayerDropLine) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{17} + return file_server_proto_rawDescGZIP(), []int{19} } func (x *WGPlayerDropLine) GetId() int32 { @@ -1920,7 +2046,7 @@ type WGPlayerRehold struct { func (x *WGPlayerRehold) Reset() { *x = WGPlayerRehold{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[18] + mi := &file_server_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1933,7 +2059,7 @@ func (x *WGPlayerRehold) String() string { func (*WGPlayerRehold) ProtoMessage() {} func (x *WGPlayerRehold) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[18] + mi := &file_server_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1946,7 +2072,7 @@ func (x *WGPlayerRehold) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerRehold.ProtoReflect.Descriptor instead. func (*WGPlayerRehold) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{18} + return file_server_proto_rawDescGZIP(), []int{20} } func (x *WGPlayerRehold) GetId() int32 { @@ -1990,7 +2116,7 @@ type GWBilledRoomCard struct { func (x *GWBilledRoomCard) Reset() { *x = GWBilledRoomCard{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[19] + mi := &file_server_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2003,7 +2129,7 @@ func (x *GWBilledRoomCard) String() string { func (*GWBilledRoomCard) ProtoMessage() {} func (x *GWBilledRoomCard) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[19] + mi := &file_server_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2016,7 +2142,7 @@ func (x *GWBilledRoomCard) ProtoReflect() protoreflect.Message { // Deprecated: Use GWBilledRoomCard.ProtoReflect.Descriptor instead. func (*GWBilledRoomCard) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{19} + return file_server_proto_rawDescGZIP(), []int{21} } func (x *GWBilledRoomCard) GetRoomId() int32 { @@ -2050,7 +2176,7 @@ type GGPlayerSessionBind struct { func (x *GGPlayerSessionBind) Reset() { *x = GGPlayerSessionBind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[20] + mi := &file_server_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2063,7 +2189,7 @@ func (x *GGPlayerSessionBind) String() string { func (*GGPlayerSessionBind) ProtoMessage() {} func (x *GGPlayerSessionBind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[20] + mi := &file_server_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2076,7 +2202,7 @@ func (x *GGPlayerSessionBind) ProtoReflect() protoreflect.Message { // Deprecated: Use GGPlayerSessionBind.ProtoReflect.Descriptor instead. func (*GGPlayerSessionBind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{20} + return file_server_proto_rawDescGZIP(), []int{22} } func (x *GGPlayerSessionBind) GetSid() int64 { @@ -2133,7 +2259,7 @@ type GGPlayerSessionUnBind struct { func (x *GGPlayerSessionUnBind) Reset() { *x = GGPlayerSessionUnBind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[21] + mi := &file_server_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2146,7 +2272,7 @@ func (x *GGPlayerSessionUnBind) String() string { func (*GGPlayerSessionUnBind) ProtoMessage() {} func (x *GGPlayerSessionUnBind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[21] + mi := &file_server_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2159,7 +2285,7 @@ func (x *GGPlayerSessionUnBind) ProtoReflect() protoreflect.Message { // Deprecated: Use GGPlayerSessionUnBind.ProtoReflect.Descriptor instead. func (*GGPlayerSessionUnBind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{21} + return file_server_proto_rawDescGZIP(), []int{23} } func (x *GGPlayerSessionUnBind) GetSid() int64 { @@ -2184,7 +2310,7 @@ type WGDayTimeChange struct { func (x *WGDayTimeChange) Reset() { *x = WGDayTimeChange{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[22] + mi := &file_server_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2197,7 +2323,7 @@ func (x *WGDayTimeChange) String() string { func (*WGDayTimeChange) ProtoMessage() {} func (x *WGDayTimeChange) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[22] + mi := &file_server_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2210,7 +2336,7 @@ func (x *WGDayTimeChange) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDayTimeChange.ProtoReflect.Descriptor instead. func (*WGDayTimeChange) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{22} + return file_server_proto_rawDescGZIP(), []int{24} } func (x *WGDayTimeChange) GetMinute() int32 { @@ -2266,7 +2392,7 @@ type ReplayPlayerData struct { func (x *ReplayPlayerData) Reset() { *x = ReplayPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[23] + mi := &file_server_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2405,7 @@ func (x *ReplayPlayerData) String() string { func (*ReplayPlayerData) ProtoMessage() {} func (x *ReplayPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[23] + mi := &file_server_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2418,7 @@ func (x *ReplayPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayPlayerData.ProtoReflect.Descriptor instead. func (*ReplayPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{23} + return file_server_proto_rawDescGZIP(), []int{25} } func (x *ReplayPlayerData) GetAccId() string { @@ -2368,7 +2494,7 @@ type ReplayRecord struct { func (x *ReplayRecord) Reset() { *x = ReplayRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[24] + mi := &file_server_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2381,7 +2507,7 @@ func (x *ReplayRecord) String() string { func (*ReplayRecord) ProtoMessage() {} func (x *ReplayRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[24] + mi := &file_server_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2394,7 +2520,7 @@ func (x *ReplayRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayRecord.ProtoReflect.Descriptor instead. func (*ReplayRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{24} + return file_server_proto_rawDescGZIP(), []int{26} } func (x *ReplayRecord) GetTimeStamp() int64 { @@ -2450,7 +2576,7 @@ type ReplaySequene struct { func (x *ReplaySequene) Reset() { *x = ReplaySequene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[25] + mi := &file_server_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2463,7 +2589,7 @@ func (x *ReplaySequene) String() string { func (*ReplaySequene) ProtoMessage() {} func (x *ReplaySequene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[25] + mi := &file_server_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2476,7 +2602,7 @@ func (x *ReplaySequene) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaySequene.ProtoReflect.Descriptor instead. func (*ReplaySequene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{25} + return file_server_proto_rawDescGZIP(), []int{27} } func (x *ReplaySequene) GetSequenes() []*ReplayRecord { @@ -2514,7 +2640,7 @@ type GRReplaySequene struct { func (x *GRReplaySequene) Reset() { *x = GRReplaySequene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[26] + mi := &file_server_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2527,7 +2653,7 @@ func (x *GRReplaySequene) String() string { func (*GRReplaySequene) ProtoMessage() {} func (x *GRReplaySequene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[26] + mi := &file_server_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2540,7 +2666,7 @@ func (x *GRReplaySequene) ProtoReflect() protoreflect.Message { // Deprecated: Use GRReplaySequene.ProtoReflect.Descriptor instead. func (*GRReplaySequene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{26} + return file_server_proto_rawDescGZIP(), []int{28} } func (x *GRReplaySequene) GetName() string { @@ -2687,7 +2813,7 @@ type WRLoginRec struct { func (x *WRLoginRec) Reset() { *x = WRLoginRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[27] + mi := &file_server_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2700,7 +2826,7 @@ func (x *WRLoginRec) String() string { func (*WRLoginRec) ProtoMessage() {} func (x *WRLoginRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[27] + mi := &file_server_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2713,7 +2839,7 @@ func (x *WRLoginRec) ProtoReflect() protoreflect.Message { // Deprecated: Use WRLoginRec.ProtoReflect.Descriptor instead. func (*WRLoginRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{27} + return file_server_proto_rawDescGZIP(), []int{29} } func (x *WRLoginRec) GetSnId() int32 { @@ -2777,7 +2903,7 @@ type WRGameDetail struct { func (x *WRGameDetail) Reset() { *x = WRGameDetail{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[28] + mi := &file_server_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2790,7 +2916,7 @@ func (x *WRGameDetail) String() string { func (*WRGameDetail) ProtoMessage() {} func (x *WRGameDetail) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[28] + mi := &file_server_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2803,7 +2929,7 @@ func (x *WRGameDetail) ProtoReflect() protoreflect.Message { // Deprecated: Use WRGameDetail.ProtoReflect.Descriptor instead. func (*WRGameDetail) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{28} + return file_server_proto_rawDescGZIP(), []int{30} } func (x *WRGameDetail) GetGameDetail() []byte { @@ -2826,7 +2952,7 @@ type WRPlayerData struct { func (x *WRPlayerData) Reset() { *x = WRPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[29] + mi := &file_server_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2839,7 +2965,7 @@ func (x *WRPlayerData) String() string { func (*WRPlayerData) ProtoMessage() {} func (x *WRPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[29] + mi := &file_server_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2852,7 +2978,7 @@ func (x *WRPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use WRPlayerData.ProtoReflect.Descriptor instead. func (*WRPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{29} + return file_server_proto_rawDescGZIP(), []int{31} } func (x *WRPlayerData) GetSid() int64 { @@ -2882,7 +3008,7 @@ type WTPlayerPay struct { func (x *WTPlayerPay) Reset() { *x = WTPlayerPay{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[30] + mi := &file_server_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2895,7 +3021,7 @@ func (x *WTPlayerPay) String() string { func (*WTPlayerPay) ProtoMessage() {} func (x *WTPlayerPay) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[30] + mi := &file_server_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2908,7 +3034,7 @@ func (x *WTPlayerPay) ProtoReflect() protoreflect.Message { // Deprecated: Use WTPlayerPay.ProtoReflect.Descriptor instead. func (*WTPlayerPay) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{30} + return file_server_proto_rawDescGZIP(), []int{32} } func (x *WTPlayerPay) GetPlayerData() []byte { @@ -2941,7 +3067,7 @@ type PlayerGameRec struct { func (x *PlayerGameRec) Reset() { *x = PlayerGameRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[31] + mi := &file_server_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2954,7 +3080,7 @@ func (x *PlayerGameRec) String() string { func (*PlayerGameRec) ProtoMessage() {} func (x *PlayerGameRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[31] + mi := &file_server_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2967,7 +3093,7 @@ func (x *PlayerGameRec) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerGameRec.ProtoReflect.Descriptor instead. func (*PlayerGameRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{31} + return file_server_proto_rawDescGZIP(), []int{33} } func (x *PlayerGameRec) GetId() int32 { @@ -3028,7 +3154,7 @@ type GWGameRec struct { func (x *GWGameRec) Reset() { *x = GWGameRec{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[32] + mi := &file_server_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3041,7 +3167,7 @@ func (x *GWGameRec) String() string { func (*GWGameRec) ProtoMessage() {} func (x *GWGameRec) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[32] + mi := &file_server_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3054,7 +3180,7 @@ func (x *GWGameRec) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameRec.ProtoReflect.Descriptor instead. func (*GWGameRec) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{32} + return file_server_proto_rawDescGZIP(), []int{34} } func (x *GWGameRec) GetRoomId() int32 { @@ -3107,7 +3233,7 @@ type GWSceneStart struct { func (x *GWSceneStart) Reset() { *x = GWSceneStart{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[33] + mi := &file_server_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3120,7 +3246,7 @@ func (x *GWSceneStart) String() string { func (*GWSceneStart) ProtoMessage() {} func (x *GWSceneStart) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[33] + mi := &file_server_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3133,7 +3259,7 @@ func (x *GWSceneStart) ProtoReflect() protoreflect.Message { // Deprecated: Use GWSceneStart.ProtoReflect.Descriptor instead. func (*GWSceneStart) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{33} + return file_server_proto_rawDescGZIP(), []int{35} } func (x *GWSceneStart) GetRoomId() int32 { @@ -3176,7 +3302,7 @@ type PlayerCtx struct { func (x *PlayerCtx) Reset() { *x = PlayerCtx{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[34] + mi := &file_server_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3189,7 +3315,7 @@ func (x *PlayerCtx) String() string { func (*PlayerCtx) ProtoMessage() {} func (x *PlayerCtx) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[34] + mi := &file_server_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3202,7 +3328,7 @@ func (x *PlayerCtx) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCtx.ProtoReflect.Descriptor instead. func (*PlayerCtx) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{34} + return file_server_proto_rawDescGZIP(), []int{36} } func (x *PlayerCtx) GetSnId() int32 { @@ -3238,7 +3364,7 @@ type FishRecord struct { func (x *FishRecord) Reset() { *x = FishRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[35] + mi := &file_server_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3251,7 +3377,7 @@ func (x *FishRecord) String() string { func (*FishRecord) ProtoMessage() {} func (x *FishRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[35] + mi := &file_server_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3264,7 +3390,7 @@ func (x *FishRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use FishRecord.ProtoReflect.Descriptor instead. func (*FishRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{35} + return file_server_proto_rawDescGZIP(), []int{37} } func (x *FishRecord) GetFishId() int32 { @@ -3294,7 +3420,7 @@ type GWFishRecord struct { func (x *GWFishRecord) Reset() { *x = GWFishRecord{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[36] + mi := &file_server_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3307,7 +3433,7 @@ func (x *GWFishRecord) String() string { func (*GWFishRecord) ProtoMessage() {} func (x *GWFishRecord) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[36] + mi := &file_server_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3320,7 +3446,7 @@ func (x *GWFishRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use GWFishRecord.ProtoReflect.Descriptor instead. func (*GWFishRecord) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{36} + return file_server_proto_rawDescGZIP(), []int{38} } func (x *GWFishRecord) GetGameFreeId() int32 { @@ -3358,7 +3484,7 @@ type GWSceneState struct { func (x *GWSceneState) Reset() { *x = GWSceneState{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[37] + mi := &file_server_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3371,7 +3497,7 @@ func (x *GWSceneState) String() string { func (*GWSceneState) ProtoMessage() {} func (x *GWSceneState) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[37] + mi := &file_server_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3384,7 +3510,7 @@ func (x *GWSceneState) ProtoReflect() protoreflect.Message { // Deprecated: Use GWSceneState.ProtoReflect.Descriptor instead. func (*GWSceneState) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{37} + return file_server_proto_rawDescGZIP(), []int{39} } func (x *GWSceneState) GetRoomId() int32 { @@ -3418,7 +3544,7 @@ type WRInviteRobot struct { func (x *WRInviteRobot) Reset() { *x = WRInviteRobot{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[38] + mi := &file_server_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3431,7 +3557,7 @@ func (x *WRInviteRobot) String() string { func (*WRInviteRobot) ProtoMessage() {} func (x *WRInviteRobot) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[38] + mi := &file_server_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3444,7 +3570,7 @@ func (x *WRInviteRobot) ProtoReflect() protoreflect.Message { // Deprecated: Use WRInviteRobot.ProtoReflect.Descriptor instead. func (*WRInviteRobot) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{38} + return file_server_proto_rawDescGZIP(), []int{40} } func (x *WRInviteRobot) GetRoomId() int32 { @@ -3502,7 +3628,7 @@ type WRInviteCreateRoom struct { func (x *WRInviteCreateRoom) Reset() { *x = WRInviteCreateRoom{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[39] + mi := &file_server_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3515,7 +3641,7 @@ func (x *WRInviteCreateRoom) String() string { func (*WRInviteCreateRoom) ProtoMessage() {} func (x *WRInviteCreateRoom) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[39] + mi := &file_server_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3528,7 +3654,7 @@ func (x *WRInviteCreateRoom) ProtoReflect() protoreflect.Message { // Deprecated: Use WRInviteCreateRoom.ProtoReflect.Descriptor instead. func (*WRInviteCreateRoom) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{39} + return file_server_proto_rawDescGZIP(), []int{41} } func (x *WRInviteCreateRoom) GetCnt() int32 { @@ -3560,7 +3686,7 @@ type WGAgentKickOutPlayer struct { func (x *WGAgentKickOutPlayer) Reset() { *x = WGAgentKickOutPlayer{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[40] + mi := &file_server_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3573,7 +3699,7 @@ func (x *WGAgentKickOutPlayer) String() string { func (*WGAgentKickOutPlayer) ProtoMessage() {} func (x *WGAgentKickOutPlayer) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[40] + mi := &file_server_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3586,7 +3712,7 @@ func (x *WGAgentKickOutPlayer) ProtoReflect() protoreflect.Message { // Deprecated: Use WGAgentKickOutPlayer.ProtoReflect.Descriptor instead. func (*WGAgentKickOutPlayer) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{40} + return file_server_proto_rawDescGZIP(), []int{42} } func (x *WGAgentKickOutPlayer) GetRoomId() int32 { @@ -3630,7 +3756,7 @@ type WDDataAnalysis struct { func (x *WDDataAnalysis) Reset() { *x = WDDataAnalysis{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[41] + mi := &file_server_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3643,7 +3769,7 @@ func (x *WDDataAnalysis) String() string { func (*WDDataAnalysis) ProtoMessage() {} func (x *WDDataAnalysis) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[41] + mi := &file_server_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3656,7 +3782,7 @@ func (x *WDDataAnalysis) ProtoReflect() protoreflect.Message { // Deprecated: Use WDDataAnalysis.ProtoReflect.Descriptor instead. func (*WDDataAnalysis) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{41} + return file_server_proto_rawDescGZIP(), []int{43} } func (x *WDDataAnalysis) GetDataType() int32 { @@ -3685,7 +3811,7 @@ type PlayerCard struct { func (x *PlayerCard) Reset() { *x = PlayerCard{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[42] + mi := &file_server_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3698,7 +3824,7 @@ func (x *PlayerCard) String() string { func (*PlayerCard) ProtoMessage() {} func (x *PlayerCard) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[42] + mi := &file_server_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3711,7 +3837,7 @@ func (x *PlayerCard) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCard.ProtoReflect.Descriptor instead. func (*PlayerCard) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{42} + return file_server_proto_rawDescGZIP(), []int{44} } func (x *PlayerCard) GetPos() int32 { @@ -3741,7 +3867,7 @@ type GNPlayerCards struct { func (x *GNPlayerCards) Reset() { *x = GNPlayerCards{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[43] + mi := &file_server_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3754,7 +3880,7 @@ func (x *GNPlayerCards) String() string { func (*GNPlayerCards) ProtoMessage() {} func (x *GNPlayerCards) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[43] + mi := &file_server_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3767,7 +3893,7 @@ func (x *GNPlayerCards) ProtoReflect() protoreflect.Message { // Deprecated: Use GNPlayerCards.ProtoReflect.Descriptor instead. func (*GNPlayerCards) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{43} + return file_server_proto_rawDescGZIP(), []int{45} } func (x *GNPlayerCards) GetSceneId() int32 { @@ -3806,7 +3932,7 @@ type RobotData struct { func (x *RobotData) Reset() { *x = RobotData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[44] + mi := &file_server_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3819,7 +3945,7 @@ func (x *RobotData) String() string { func (*RobotData) ProtoMessage() {} func (x *RobotData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[44] + mi := &file_server_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3832,7 +3958,7 @@ func (x *RobotData) ProtoReflect() protoreflect.Message { // Deprecated: Use RobotData.ProtoReflect.Descriptor instead. func (*RobotData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{44} + return file_server_proto_rawDescGZIP(), []int{46} } func (x *RobotData) GetTotalIn() int64 { @@ -3882,7 +4008,7 @@ type GNPlayerParam struct { func (x *GNPlayerParam) Reset() { *x = GNPlayerParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[45] + mi := &file_server_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3895,7 +4021,7 @@ func (x *GNPlayerParam) String() string { func (*GNPlayerParam) ProtoMessage() {} func (x *GNPlayerParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[45] + mi := &file_server_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3908,7 +4034,7 @@ func (x *GNPlayerParam) ProtoReflect() protoreflect.Message { // Deprecated: Use GNPlayerParam.ProtoReflect.Descriptor instead. func (*GNPlayerParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{45} + return file_server_proto_rawDescGZIP(), []int{47} } func (x *GNPlayerParam) GetSceneId() int32 { @@ -3939,7 +4065,7 @@ type GWRebuildScene struct { func (x *GWRebuildScene) Reset() { *x = GWRebuildScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[46] + mi := &file_server_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3952,7 +4078,7 @@ func (x *GWRebuildScene) String() string { func (*GWRebuildScene) ProtoMessage() {} func (x *GWRebuildScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[46] + mi := &file_server_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3965,7 +4091,7 @@ func (x *GWRebuildScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWRebuildScene.ProtoReflect.Descriptor instead. func (*GWRebuildScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{46} + return file_server_proto_rawDescGZIP(), []int{48} } func (x *GWRebuildScene) GetSceneIds() []int32 { @@ -3995,7 +4121,7 @@ type WGRebindPlayerSnId struct { func (x *WGRebindPlayerSnId) Reset() { *x = WGRebindPlayerSnId{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[47] + mi := &file_server_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4008,7 +4134,7 @@ func (x *WGRebindPlayerSnId) String() string { func (*WGRebindPlayerSnId) ProtoMessage() {} func (x *WGRebindPlayerSnId) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[47] + mi := &file_server_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4021,7 +4147,7 @@ func (x *WGRebindPlayerSnId) ProtoReflect() protoreflect.Message { // Deprecated: Use WGRebindPlayerSnId.ProtoReflect.Descriptor instead. func (*WGRebindPlayerSnId) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{47} + return file_server_proto_rawDescGZIP(), []int{49} } func (x *WGRebindPlayerSnId) GetOldSnId() int32 { @@ -4052,7 +4178,7 @@ type GWPlayerFlag struct { func (x *GWPlayerFlag) Reset() { *x = GWPlayerFlag{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[48] + mi := &file_server_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4065,7 +4191,7 @@ func (x *GWPlayerFlag) String() string { func (*GWPlayerFlag) ProtoMessage() {} func (x *GWPlayerFlag) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[48] + mi := &file_server_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4078,7 +4204,7 @@ func (x *GWPlayerFlag) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerFlag.ProtoReflect.Descriptor instead. func (*GWPlayerFlag) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{48} + return file_server_proto_rawDescGZIP(), []int{50} } func (x *GWPlayerFlag) GetSnId() int32 { @@ -4117,7 +4243,7 @@ type WGHundredOp struct { func (x *WGHundredOp) Reset() { *x = WGHundredOp{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[49] + mi := &file_server_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4130,7 +4256,7 @@ func (x *WGHundredOp) String() string { func (*WGHundredOp) ProtoMessage() {} func (x *WGHundredOp) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[49] + mi := &file_server_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4143,7 +4269,7 @@ func (x *WGHundredOp) ProtoReflect() protoreflect.Message { // Deprecated: Use WGHundredOp.ProtoReflect.Descriptor instead. func (*WGHundredOp) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{49} + return file_server_proto_rawDescGZIP(), []int{51} } func (x *WGHundredOp) GetSnid() int32 { @@ -4187,7 +4313,7 @@ type GWNewNotice struct { func (x *GWNewNotice) Reset() { *x = GWNewNotice{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[50] + mi := &file_server_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4200,7 +4326,7 @@ func (x *GWNewNotice) String() string { func (*GWNewNotice) ProtoMessage() {} func (x *GWNewNotice) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[50] + mi := &file_server_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4213,7 +4339,7 @@ func (x *GWNewNotice) ProtoReflect() protoreflect.Message { // Deprecated: Use GWNewNotice.ProtoReflect.Descriptor instead. func (*GWNewNotice) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{50} + return file_server_proto_rawDescGZIP(), []int{52} } func (x *GWNewNotice) GetCh() string { @@ -4298,7 +4424,7 @@ type PlayerStatics struct { func (x *PlayerStatics) Reset() { *x = PlayerStatics{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[51] + mi := &file_server_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4311,7 +4437,7 @@ func (x *PlayerStatics) String() string { func (*PlayerStatics) ProtoMessage() {} func (x *PlayerStatics) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[51] + mi := &file_server_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4324,7 +4450,7 @@ func (x *PlayerStatics) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerStatics.ProtoReflect.Descriptor instead. func (*PlayerStatics) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{51} + return file_server_proto_rawDescGZIP(), []int{53} } func (x *PlayerStatics) GetSnId() int32 { @@ -4404,7 +4530,7 @@ type GWPlayerStatics struct { func (x *GWPlayerStatics) Reset() { *x = GWPlayerStatics{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[52] + mi := &file_server_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4417,7 +4543,7 @@ func (x *GWPlayerStatics) String() string { func (*GWPlayerStatics) ProtoMessage() {} func (x *GWPlayerStatics) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[52] + mi := &file_server_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4430,7 +4556,7 @@ func (x *GWPlayerStatics) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerStatics.ProtoReflect.Descriptor instead. func (*GWPlayerStatics) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{52} + return file_server_proto_rawDescGZIP(), []int{54} } func (x *GWPlayerStatics) GetRoomId() int32 { @@ -4477,7 +4603,7 @@ type WGResetCoinPool struct { func (x *WGResetCoinPool) Reset() { *x = WGResetCoinPool{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[53] + mi := &file_server_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4490,7 +4616,7 @@ func (x *WGResetCoinPool) String() string { func (*WGResetCoinPool) ProtoMessage() {} func (x *WGResetCoinPool) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[53] + mi := &file_server_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4503,7 +4629,7 @@ func (x *WGResetCoinPool) ProtoReflect() protoreflect.Message { // Deprecated: Use WGResetCoinPool.ProtoReflect.Descriptor instead. func (*WGResetCoinPool) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{53} + return file_server_proto_rawDescGZIP(), []int{55} } func (x *WGResetCoinPool) GetPlatform() string { @@ -4565,7 +4691,7 @@ type WGSetPlayerBlackLevel struct { func (x *WGSetPlayerBlackLevel) Reset() { *x = WGSetPlayerBlackLevel{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[54] + mi := &file_server_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4578,7 +4704,7 @@ func (x *WGSetPlayerBlackLevel) String() string { func (*WGSetPlayerBlackLevel) ProtoMessage() {} func (x *WGSetPlayerBlackLevel) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[54] + mi := &file_server_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4591,7 +4717,7 @@ func (x *WGSetPlayerBlackLevel) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSetPlayerBlackLevel.ProtoReflect.Descriptor instead. func (*WGSetPlayerBlackLevel) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{54} + return file_server_proto_rawDescGZIP(), []int{56} } func (x *WGSetPlayerBlackLevel) GetSnId() int32 { @@ -4654,7 +4780,7 @@ type GWAutoRelieveWBLevel struct { func (x *GWAutoRelieveWBLevel) Reset() { *x = GWAutoRelieveWBLevel{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[55] + mi := &file_server_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4667,7 +4793,7 @@ func (x *GWAutoRelieveWBLevel) String() string { func (*GWAutoRelieveWBLevel) ProtoMessage() {} func (x *GWAutoRelieveWBLevel) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[55] + mi := &file_server_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4680,7 +4806,7 @@ func (x *GWAutoRelieveWBLevel) ProtoReflect() protoreflect.Message { // Deprecated: Use GWAutoRelieveWBLevel.ProtoReflect.Descriptor instead. func (*GWAutoRelieveWBLevel) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{55} + return file_server_proto_rawDescGZIP(), []int{57} } func (x *GWAutoRelieveWBLevel) GetSnId() int32 { @@ -4706,7 +4832,7 @@ type GWScenePlayerLog struct { func (x *GWScenePlayerLog) Reset() { *x = GWScenePlayerLog{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[56] + mi := &file_server_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4719,7 +4845,7 @@ func (x *GWScenePlayerLog) String() string { func (*GWScenePlayerLog) ProtoMessage() {} func (x *GWScenePlayerLog) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[56] + mi := &file_server_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4732,7 +4858,7 @@ func (x *GWScenePlayerLog) ProtoReflect() protoreflect.Message { // Deprecated: Use GWScenePlayerLog.ProtoReflect.Descriptor instead. func (*GWScenePlayerLog) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{56} + return file_server_proto_rawDescGZIP(), []int{58} } func (x *GWScenePlayerLog) GetGameId() int32 { @@ -4778,7 +4904,7 @@ type GWPlayerForceLeave struct { func (x *GWPlayerForceLeave) Reset() { *x = GWPlayerForceLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[57] + mi := &file_server_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4791,7 +4917,7 @@ func (x *GWPlayerForceLeave) String() string { func (*GWPlayerForceLeave) ProtoMessage() {} func (x *GWPlayerForceLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[57] + mi := &file_server_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4804,7 +4930,7 @@ func (x *GWPlayerForceLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerForceLeave.ProtoReflect.Descriptor instead. func (*GWPlayerForceLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{57} + return file_server_proto_rawDescGZIP(), []int{59} } func (x *GWPlayerForceLeave) GetRoomId() int32 { @@ -4854,7 +4980,7 @@ type PlayerData struct { func (x *PlayerData) Reset() { *x = PlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[58] + mi := &file_server_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4867,7 +4993,7 @@ func (x *PlayerData) String() string { func (*PlayerData) ProtoMessage() {} func (x *PlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[58] + mi := &file_server_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4880,7 +5006,7 @@ func (x *PlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerData.ProtoReflect.Descriptor instead. func (*PlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{58} + return file_server_proto_rawDescGZIP(), []int{60} } func (x *PlayerData) GetSnId() int32 { @@ -4952,7 +5078,7 @@ type GWPlayerData struct { func (x *GWPlayerData) Reset() { *x = GWPlayerData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[59] + mi := &file_server_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4965,7 +5091,7 @@ func (x *GWPlayerData) String() string { func (*GWPlayerData) ProtoMessage() {} func (x *GWPlayerData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[59] + mi := &file_server_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4978,7 +5104,7 @@ func (x *GWPlayerData) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerData.ProtoReflect.Descriptor instead. func (*GWPlayerData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{59} + return file_server_proto_rawDescGZIP(), []int{61} } func (x *GWPlayerData) GetDatas() []*PlayerData { @@ -5020,7 +5146,7 @@ type PlayerWinScore struct { func (x *PlayerWinScore) Reset() { *x = PlayerWinScore{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[60] + mi := &file_server_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5033,7 +5159,7 @@ func (x *PlayerWinScore) String() string { func (*PlayerWinScore) ProtoMessage() {} func (x *PlayerWinScore) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[60] + mi := &file_server_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5046,7 +5172,7 @@ func (x *PlayerWinScore) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerWinScore.ProtoReflect.Descriptor instead. func (*PlayerWinScore) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{60} + return file_server_proto_rawDescGZIP(), []int{62} } func (x *PlayerWinScore) GetSnId() int32 { @@ -5113,7 +5239,7 @@ type GWPlayerWinScore struct { func (x *GWPlayerWinScore) Reset() { *x = GWPlayerWinScore{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[61] + mi := &file_server_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5126,7 +5252,7 @@ func (x *GWPlayerWinScore) String() string { func (*GWPlayerWinScore) ProtoMessage() {} func (x *GWPlayerWinScore) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[61] + mi := &file_server_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5139,7 +5265,7 @@ func (x *GWPlayerWinScore) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerWinScore.ProtoReflect.Descriptor instead. func (*GWPlayerWinScore) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{61} + return file_server_proto_rawDescGZIP(), []int{63} } func (x *GWPlayerWinScore) GetGameFreeId() int32 { @@ -5188,7 +5314,7 @@ type WGPayerOnGameCount struct { func (x *WGPayerOnGameCount) Reset() { *x = WGPayerOnGameCount{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[62] + mi := &file_server_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5201,7 +5327,7 @@ func (x *WGPayerOnGameCount) String() string { func (*WGPayerOnGameCount) ProtoMessage() {} func (x *WGPayerOnGameCount) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[62] + mi := &file_server_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5214,7 +5340,7 @@ func (x *WGPayerOnGameCount) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPayerOnGameCount.ProtoReflect.Descriptor instead. func (*WGPayerOnGameCount) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{62} + return file_server_proto_rawDescGZIP(), []int{64} } func (x *WGPayerOnGameCount) GetDTCount() []int32 { @@ -5236,7 +5362,7 @@ type GRGameFreeData struct { func (x *GRGameFreeData) Reset() { *x = GRGameFreeData{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[63] + mi := &file_server_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5249,7 +5375,7 @@ func (x *GRGameFreeData) String() string { func (*GRGameFreeData) ProtoMessage() {} func (x *GRGameFreeData) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[63] + mi := &file_server_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5262,7 +5388,7 @@ func (x *GRGameFreeData) ProtoReflect() protoreflect.Message { // Deprecated: Use GRGameFreeData.ProtoReflect.Descriptor instead. func (*GRGameFreeData) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{63} + return file_server_proto_rawDescGZIP(), []int{65} } func (x *GRGameFreeData) GetRoomId() int32 { @@ -5291,7 +5417,7 @@ type WGSyncPlayerSafeBoxCoin struct { func (x *WGSyncPlayerSafeBoxCoin) Reset() { *x = WGSyncPlayerSafeBoxCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[64] + mi := &file_server_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5304,7 +5430,7 @@ func (x *WGSyncPlayerSafeBoxCoin) String() string { func (*WGSyncPlayerSafeBoxCoin) ProtoMessage() {} func (x *WGSyncPlayerSafeBoxCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[64] + mi := &file_server_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5317,7 +5443,7 @@ func (x *WGSyncPlayerSafeBoxCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSyncPlayerSafeBoxCoin.ProtoReflect.Descriptor instead. func (*WGSyncPlayerSafeBoxCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{64} + return file_server_proto_rawDescGZIP(), []int{66} } func (x *WGSyncPlayerSafeBoxCoin) GetSnId() int32 { @@ -5349,7 +5475,7 @@ type WGClubMessage struct { func (x *WGClubMessage) Reset() { *x = WGClubMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[65] + mi := &file_server_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5362,7 +5488,7 @@ func (x *WGClubMessage) String() string { func (*WGClubMessage) ProtoMessage() {} func (x *WGClubMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[65] + mi := &file_server_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5375,7 +5501,7 @@ func (x *WGClubMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use WGClubMessage.ProtoReflect.Descriptor instead. func (*WGClubMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{65} + return file_server_proto_rawDescGZIP(), []int{67} } func (x *WGClubMessage) GetClubId() int64 { @@ -5422,7 +5548,7 @@ type DWThirdRebateMessage struct { func (x *DWThirdRebateMessage) Reset() { *x = DWThirdRebateMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[66] + mi := &file_server_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5435,7 +5561,7 @@ func (x *DWThirdRebateMessage) String() string { func (*DWThirdRebateMessage) ProtoMessage() {} func (x *DWThirdRebateMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[66] + mi := &file_server_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5448,7 +5574,7 @@ func (x *DWThirdRebateMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use DWThirdRebateMessage.ProtoReflect.Descriptor instead. func (*DWThirdRebateMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{66} + return file_server_proto_rawDescGZIP(), []int{68} } func (x *DWThirdRebateMessage) GetTag() uint64 { @@ -5507,7 +5633,7 @@ type DWThirdRoundMessage struct { func (x *DWThirdRoundMessage) Reset() { *x = DWThirdRoundMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[67] + mi := &file_server_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5520,7 +5646,7 @@ func (x *DWThirdRoundMessage) String() string { func (*DWThirdRoundMessage) ProtoMessage() {} func (x *DWThirdRoundMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[67] + mi := &file_server_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5533,7 +5659,7 @@ func (x *DWThirdRoundMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use DWThirdRoundMessage.ProtoReflect.Descriptor instead. func (*DWThirdRoundMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{67} + return file_server_proto_rawDescGZIP(), []int{69} } func (x *DWThirdRoundMessage) GetTag() uint64 { @@ -5626,7 +5752,7 @@ type WDACKThirdRebateMessage struct { func (x *WDACKThirdRebateMessage) Reset() { *x = WDACKThirdRebateMessage{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[68] + mi := &file_server_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5639,7 +5765,7 @@ func (x *WDACKThirdRebateMessage) String() string { func (*WDACKThirdRebateMessage) ProtoMessage() {} func (x *WDACKThirdRebateMessage) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[68] + mi := &file_server_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5652,7 +5778,7 @@ func (x *WDACKThirdRebateMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use WDACKThirdRebateMessage.ProtoReflect.Descriptor instead. func (*WDACKThirdRebateMessage) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{68} + return file_server_proto_rawDescGZIP(), []int{70} } func (x *WDACKThirdRebateMessage) GetTag() uint64 { @@ -5683,7 +5809,7 @@ type GWGameStateLog struct { func (x *GWGameStateLog) Reset() { *x = GWGameStateLog{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[69] + mi := &file_server_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5696,7 +5822,7 @@ func (x *GWGameStateLog) String() string { func (*GWGameStateLog) ProtoMessage() {} func (x *GWGameStateLog) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[69] + mi := &file_server_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5709,7 +5835,7 @@ func (x *GWGameStateLog) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameStateLog.ProtoReflect.Descriptor instead. func (*GWGameStateLog) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{69} + return file_server_proto_rawDescGZIP(), []int{71} } func (x *GWGameStateLog) GetSceneId() int32 { @@ -5749,7 +5875,7 @@ type GWGameState struct { func (x *GWGameState) Reset() { *x = GWGameState{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[70] + mi := &file_server_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5762,7 +5888,7 @@ func (x *GWGameState) String() string { func (*GWGameState) ProtoMessage() {} func (x *GWGameState) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[70] + mi := &file_server_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5775,7 +5901,7 @@ func (x *GWGameState) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameState.ProtoReflect.Descriptor instead. func (*GWGameState) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{70} + return file_server_proto_rawDescGZIP(), []int{72} } func (x *GWGameState) GetSceneId() int32 { @@ -5832,7 +5958,7 @@ type GWGameJackList struct { func (x *GWGameJackList) Reset() { *x = GWGameJackList{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[71] + mi := &file_server_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5845,7 +5971,7 @@ func (x *GWGameJackList) String() string { func (*GWGameJackList) ProtoMessage() {} func (x *GWGameJackList) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[71] + mi := &file_server_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5858,7 +5984,7 @@ func (x *GWGameJackList) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameJackList.ProtoReflect.Descriptor instead. func (*GWGameJackList) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{71} + return file_server_proto_rawDescGZIP(), []int{73} } func (x *GWGameJackList) GetSnId() int32 { @@ -5930,7 +6056,7 @@ type GWGameJackCoin struct { func (x *GWGameJackCoin) Reset() { *x = GWGameJackCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[72] + mi := &file_server_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5943,7 +6069,7 @@ func (x *GWGameJackCoin) String() string { func (*GWGameJackCoin) ProtoMessage() {} func (x *GWGameJackCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[72] + mi := &file_server_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5956,7 +6082,7 @@ func (x *GWGameJackCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use GWGameJackCoin.ProtoReflect.Descriptor instead. func (*GWGameJackCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{72} + return file_server_proto_rawDescGZIP(), []int{74} } func (x *GWGameJackCoin) GetPlatform() []string { @@ -5986,7 +6112,7 @@ type WGNiceIdRebind struct { func (x *WGNiceIdRebind) Reset() { *x = WGNiceIdRebind{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[73] + mi := &file_server_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5999,7 +6125,7 @@ func (x *WGNiceIdRebind) String() string { func (*WGNiceIdRebind) ProtoMessage() {} func (x *WGNiceIdRebind) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[73] + mi := &file_server_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6012,7 +6138,7 @@ func (x *WGNiceIdRebind) ProtoReflect() protoreflect.Message { // Deprecated: Use WGNiceIdRebind.ProtoReflect.Descriptor instead. func (*WGNiceIdRebind) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{73} + return file_server_proto_rawDescGZIP(), []int{75} } func (x *WGNiceIdRebind) GetUser() int32 { @@ -6042,7 +6168,7 @@ type PLAYERWINCOININFO struct { func (x *PLAYERWINCOININFO) Reset() { *x = PLAYERWINCOININFO{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[74] + mi := &file_server_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6055,7 +6181,7 @@ func (x *PLAYERWINCOININFO) String() string { func (*PLAYERWINCOININFO) ProtoMessage() {} func (x *PLAYERWINCOININFO) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[74] + mi := &file_server_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6068,7 +6194,7 @@ func (x *PLAYERWINCOININFO) ProtoReflect() protoreflect.Message { // Deprecated: Use PLAYERWINCOININFO.ProtoReflect.Descriptor instead. func (*PLAYERWINCOININFO) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{74} + return file_server_proto_rawDescGZIP(), []int{76} } func (x *PLAYERWINCOININFO) GetSnId() int32 { @@ -6104,7 +6230,7 @@ type GWPLAYERWINCOIN struct { func (x *GWPLAYERWINCOIN) Reset() { *x = GWPLAYERWINCOIN{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[75] + mi := &file_server_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6117,7 +6243,7 @@ func (x *GWPLAYERWINCOIN) String() string { func (*GWPLAYERWINCOIN) ProtoMessage() {} func (x *GWPLAYERWINCOIN) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[75] + mi := &file_server_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6130,7 +6256,7 @@ func (x *GWPLAYERWINCOIN) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPLAYERWINCOIN.ProtoReflect.Descriptor instead. func (*GWPLAYERWINCOIN) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{75} + return file_server_proto_rawDescGZIP(), []int{77} } func (x *GWPLAYERWINCOIN) GetPlayer() []*PLAYERWINCOININFO { @@ -6153,7 +6279,7 @@ type GWPlayerAutoMarkTag struct { func (x *GWPlayerAutoMarkTag) Reset() { *x = GWPlayerAutoMarkTag{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[76] + mi := &file_server_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6166,7 +6292,7 @@ func (x *GWPlayerAutoMarkTag) String() string { func (*GWPlayerAutoMarkTag) ProtoMessage() {} func (x *GWPlayerAutoMarkTag) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[76] + mi := &file_server_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6179,7 +6305,7 @@ func (x *GWPlayerAutoMarkTag) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerAutoMarkTag.ProtoReflect.Descriptor instead. func (*GWPlayerAutoMarkTag) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{76} + return file_server_proto_rawDescGZIP(), []int{78} } func (x *GWPlayerAutoMarkTag) GetSnId() int32 { @@ -6210,7 +6336,7 @@ type WGInviteRobEnterCoinSceneQueue struct { func (x *WGInviteRobEnterCoinSceneQueue) Reset() { *x = WGInviteRobEnterCoinSceneQueue{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[77] + mi := &file_server_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6223,7 +6349,7 @@ func (x *WGInviteRobEnterCoinSceneQueue) String() string { func (*WGInviteRobEnterCoinSceneQueue) ProtoMessage() {} func (x *WGInviteRobEnterCoinSceneQueue) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[77] + mi := &file_server_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6236,7 +6362,7 @@ func (x *WGInviteRobEnterCoinSceneQueue) ProtoReflect() protoreflect.Message { // Deprecated: Use WGInviteRobEnterCoinSceneQueue.ProtoReflect.Descriptor instead. func (*WGInviteRobEnterCoinSceneQueue) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{77} + return file_server_proto_rawDescGZIP(), []int{79} } func (x *WGInviteRobEnterCoinSceneQueue) GetPlatform() string { @@ -6272,7 +6398,7 @@ type WGGameForceStart struct { func (x *WGGameForceStart) Reset() { *x = WGGameForceStart{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[78] + mi := &file_server_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6285,7 +6411,7 @@ func (x *WGGameForceStart) String() string { func (*WGGameForceStart) ProtoMessage() {} func (x *WGGameForceStart) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[78] + mi := &file_server_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6298,7 +6424,7 @@ func (x *WGGameForceStart) ProtoReflect() protoreflect.Message { // Deprecated: Use WGGameForceStart.ProtoReflect.Descriptor instead. func (*WGGameForceStart) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{78} + return file_server_proto_rawDescGZIP(), []int{80} } func (x *WGGameForceStart) GetSceneId() int32 { @@ -6323,7 +6449,7 @@ type ProfitControlGameCfg struct { func (x *ProfitControlGameCfg) Reset() { *x = ProfitControlGameCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[79] + mi := &file_server_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6336,7 +6462,7 @@ func (x *ProfitControlGameCfg) String() string { func (*ProfitControlGameCfg) ProtoMessage() {} func (x *ProfitControlGameCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[79] + mi := &file_server_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6349,7 +6475,7 @@ func (x *ProfitControlGameCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfitControlGameCfg.ProtoReflect.Descriptor instead. func (*ProfitControlGameCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{79} + return file_server_proto_rawDescGZIP(), []int{81} } func (x *ProfitControlGameCfg) GetGameFreeId() int32 { @@ -6399,7 +6525,7 @@ type ProfitControlPlatformCfg struct { func (x *ProfitControlPlatformCfg) Reset() { *x = ProfitControlPlatformCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[80] + mi := &file_server_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6412,7 +6538,7 @@ func (x *ProfitControlPlatformCfg) String() string { func (*ProfitControlPlatformCfg) ProtoMessage() {} func (x *ProfitControlPlatformCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[80] + mi := &file_server_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6425,7 +6551,7 @@ func (x *ProfitControlPlatformCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfitControlPlatformCfg.ProtoReflect.Descriptor instead. func (*ProfitControlPlatformCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{80} + return file_server_proto_rawDescGZIP(), []int{82} } func (x *ProfitControlPlatformCfg) GetPlatform() string { @@ -6454,7 +6580,7 @@ type WGProfitControlCorrect struct { func (x *WGProfitControlCorrect) Reset() { *x = WGProfitControlCorrect{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[81] + mi := &file_server_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6467,7 +6593,7 @@ func (x *WGProfitControlCorrect) String() string { func (*WGProfitControlCorrect) ProtoMessage() {} func (x *WGProfitControlCorrect) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[81] + mi := &file_server_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6480,7 +6606,7 @@ func (x *WGProfitControlCorrect) ProtoReflect() protoreflect.Message { // Deprecated: Use WGProfitControlCorrect.ProtoReflect.Descriptor instead. func (*WGProfitControlCorrect) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{81} + return file_server_proto_rawDescGZIP(), []int{83} } func (x *WGProfitControlCorrect) GetCfg() []*ProfitControlPlatformCfg { @@ -6502,7 +6628,7 @@ type GWChangeSceneEvent struct { func (x *GWChangeSceneEvent) Reset() { *x = GWChangeSceneEvent{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[82] + mi := &file_server_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6515,7 +6641,7 @@ func (x *GWChangeSceneEvent) String() string { func (*GWChangeSceneEvent) ProtoMessage() {} func (x *GWChangeSceneEvent) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[82] + mi := &file_server_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6528,7 +6654,7 @@ func (x *GWChangeSceneEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use GWChangeSceneEvent.ProtoReflect.Descriptor instead. func (*GWChangeSceneEvent) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{82} + return file_server_proto_rawDescGZIP(), []int{84} } func (x *GWChangeSceneEvent) GetSceneId() int32 { @@ -6550,7 +6676,7 @@ type PlayerIParam struct { func (x *PlayerIParam) Reset() { *x = PlayerIParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[83] + mi := &file_server_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6563,7 +6689,7 @@ func (x *PlayerIParam) String() string { func (*PlayerIParam) ProtoMessage() {} func (x *PlayerIParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[83] + mi := &file_server_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6576,7 +6702,7 @@ func (x *PlayerIParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerIParam.ProtoReflect.Descriptor instead. func (*PlayerIParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{83} + return file_server_proto_rawDescGZIP(), []int{85} } func (x *PlayerIParam) GetParamId() int32 { @@ -6605,7 +6731,7 @@ type PlayerSParam struct { func (x *PlayerSParam) Reset() { *x = PlayerSParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[84] + mi := &file_server_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6618,7 +6744,7 @@ func (x *PlayerSParam) String() string { func (*PlayerSParam) ProtoMessage() {} func (x *PlayerSParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[84] + mi := &file_server_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6631,7 +6757,7 @@ func (x *PlayerSParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerSParam.ProtoReflect.Descriptor instead. func (*PlayerSParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{84} + return file_server_proto_rawDescGZIP(), []int{86} } func (x *PlayerSParam) GetParamId() int32 { @@ -6660,7 +6786,7 @@ type PlayerCParam struct { func (x *PlayerCParam) Reset() { *x = PlayerCParam{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[85] + mi := &file_server_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6673,7 +6799,7 @@ func (x *PlayerCParam) String() string { func (*PlayerCParam) ProtoMessage() {} func (x *PlayerCParam) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[85] + mi := &file_server_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6686,7 +6812,7 @@ func (x *PlayerCParam) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerCParam.ProtoReflect.Descriptor instead. func (*PlayerCParam) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{85} + return file_server_proto_rawDescGZIP(), []int{87} } func (x *PlayerCParam) GetStrKey() string { @@ -6715,7 +6841,7 @@ type PlayerMatchCoin struct { func (x *PlayerMatchCoin) Reset() { *x = PlayerMatchCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[86] + mi := &file_server_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6728,7 +6854,7 @@ func (x *PlayerMatchCoin) String() string { func (*PlayerMatchCoin) ProtoMessage() {} func (x *PlayerMatchCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[86] + mi := &file_server_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6741,7 +6867,7 @@ func (x *PlayerMatchCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerMatchCoin.ProtoReflect.Descriptor instead. func (*PlayerMatchCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{86} + return file_server_proto_rawDescGZIP(), []int{88} } func (x *PlayerMatchCoin) GetSnId() int32 { @@ -6773,7 +6899,7 @@ type GWPlayerMatchBilled struct { func (x *GWPlayerMatchBilled) Reset() { *x = GWPlayerMatchBilled{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[87] + mi := &file_server_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6786,7 +6912,7 @@ func (x *GWPlayerMatchBilled) String() string { func (*GWPlayerMatchBilled) ProtoMessage() {} func (x *GWPlayerMatchBilled) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[87] + mi := &file_server_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6799,7 +6925,7 @@ func (x *GWPlayerMatchBilled) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerMatchBilled.ProtoReflect.Descriptor instead. func (*GWPlayerMatchBilled) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{87} + return file_server_proto_rawDescGZIP(), []int{89} } func (x *GWPlayerMatchBilled) GetSceneId() int32 { @@ -6847,7 +6973,7 @@ type GWPlayerMatchGrade struct { func (x *GWPlayerMatchGrade) Reset() { *x = GWPlayerMatchGrade{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[88] + mi := &file_server_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6860,7 +6986,7 @@ func (x *GWPlayerMatchGrade) String() string { func (*GWPlayerMatchGrade) ProtoMessage() {} func (x *GWPlayerMatchGrade) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[88] + mi := &file_server_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6873,7 +6999,7 @@ func (x *GWPlayerMatchGrade) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerMatchGrade.ProtoReflect.Descriptor instead. func (*GWPlayerMatchGrade) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{88} + return file_server_proto_rawDescGZIP(), []int{90} } func (x *GWPlayerMatchGrade) GetSceneId() int32 { @@ -6933,7 +7059,7 @@ type WGPlayerQuitMatch struct { func (x *WGPlayerQuitMatch) Reset() { *x = WGPlayerQuitMatch{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[89] + mi := &file_server_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6946,7 +7072,7 @@ func (x *WGPlayerQuitMatch) String() string { func (*WGPlayerQuitMatch) ProtoMessage() {} func (x *WGPlayerQuitMatch) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[89] + mi := &file_server_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6959,7 +7085,7 @@ func (x *WGPlayerQuitMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerQuitMatch.ProtoReflect.Descriptor instead. func (*WGPlayerQuitMatch) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{89} + return file_server_proto_rawDescGZIP(), []int{91} } func (x *WGPlayerQuitMatch) GetSnId() int32 { @@ -7000,7 +7126,7 @@ type WGSceneMatchBaseChange struct { func (x *WGSceneMatchBaseChange) Reset() { *x = WGSceneMatchBaseChange{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[90] + mi := &file_server_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7013,7 +7139,7 @@ func (x *WGSceneMatchBaseChange) String() string { func (*WGSceneMatchBaseChange) ProtoMessage() {} func (x *WGSceneMatchBaseChange) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[90] + mi := &file_server_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7026,7 +7152,7 @@ func (x *WGSceneMatchBaseChange) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSceneMatchBaseChange.ProtoReflect.Descriptor instead. func (*WGSceneMatchBaseChange) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{90} + return file_server_proto_rawDescGZIP(), []int{92} } func (x *WGSceneMatchBaseChange) GetSceneIds() []int32 { @@ -7079,7 +7205,7 @@ type SSRedirectToPlayer struct { func (x *SSRedirectToPlayer) Reset() { *x = SSRedirectToPlayer{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[91] + mi := &file_server_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7092,7 +7218,7 @@ func (x *SSRedirectToPlayer) String() string { func (*SSRedirectToPlayer) ProtoMessage() {} func (x *SSRedirectToPlayer) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[91] + mi := &file_server_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7105,7 +7231,7 @@ func (x *SSRedirectToPlayer) ProtoReflect() protoreflect.Message { // Deprecated: Use SSRedirectToPlayer.ProtoReflect.Descriptor instead. func (*SSRedirectToPlayer) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{91} + return file_server_proto_rawDescGZIP(), []int{93} } func (x *SSRedirectToPlayer) GetSnId() int32 { @@ -7152,7 +7278,7 @@ type WGInviteMatchRob struct { func (x *WGInviteMatchRob) Reset() { *x = WGInviteMatchRob{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[92] + mi := &file_server_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7165,7 +7291,7 @@ func (x *WGInviteMatchRob) String() string { func (*WGInviteMatchRob) ProtoMessage() {} func (x *WGInviteMatchRob) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[92] + mi := &file_server_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7178,7 +7304,7 @@ func (x *WGInviteMatchRob) ProtoReflect() protoreflect.Message { // Deprecated: Use WGInviteMatchRob.ProtoReflect.Descriptor instead. func (*WGInviteMatchRob) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{92} + return file_server_proto_rawDescGZIP(), []int{94} } func (x *WGInviteMatchRob) GetPlatform() string { @@ -7229,7 +7355,7 @@ type GameInfo struct { func (x *GameInfo) Reset() { *x = GameInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[93] + mi := &file_server_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7242,7 +7368,7 @@ func (x *GameInfo) String() string { func (*GameInfo) ProtoMessage() {} func (x *GameInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[93] + mi := &file_server_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7255,7 +7381,7 @@ func (x *GameInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GameInfo.ProtoReflect.Descriptor instead. func (*GameInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{93} + return file_server_proto_rawDescGZIP(), []int{95} } func (x *GameInfo) GetGameId() int32 { @@ -7294,7 +7420,7 @@ type WGGameJackpot struct { func (x *WGGameJackpot) Reset() { *x = WGGameJackpot{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[94] + mi := &file_server_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7307,7 +7433,7 @@ func (x *WGGameJackpot) String() string { func (*WGGameJackpot) ProtoMessage() {} func (x *WGGameJackpot) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[94] + mi := &file_server_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7320,7 +7446,7 @@ func (x *WGGameJackpot) ProtoReflect() protoreflect.Message { // Deprecated: Use WGGameJackpot.ProtoReflect.Descriptor instead. func (*WGGameJackpot) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{94} + return file_server_proto_rawDescGZIP(), []int{96} } func (x *WGGameJackpot) GetSid() int64 { @@ -7370,7 +7496,7 @@ type BigWinHistoryInfo struct { func (x *BigWinHistoryInfo) Reset() { *x = BigWinHistoryInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[95] + mi := &file_server_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7383,7 +7509,7 @@ func (x *BigWinHistoryInfo) String() string { func (*BigWinHistoryInfo) ProtoMessage() {} func (x *BigWinHistoryInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[95] + mi := &file_server_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7396,7 +7522,7 @@ func (x *BigWinHistoryInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BigWinHistoryInfo.ProtoReflect.Descriptor instead. func (*BigWinHistoryInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{95} + return file_server_proto_rawDescGZIP(), []int{97} } func (x *BigWinHistoryInfo) GetSpinID() string { @@ -7476,7 +7602,7 @@ type WGPlayerEnterMiniGame struct { func (x *WGPlayerEnterMiniGame) Reset() { *x = WGPlayerEnterMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[96] + mi := &file_server_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7489,7 +7615,7 @@ func (x *WGPlayerEnterMiniGame) String() string { func (*WGPlayerEnterMiniGame) ProtoMessage() {} func (x *WGPlayerEnterMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[96] + mi := &file_server_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7502,7 +7628,7 @@ func (x *WGPlayerEnterMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerEnterMiniGame.ProtoReflect.Descriptor instead. func (*WGPlayerEnterMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{96} + return file_server_proto_rawDescGZIP(), []int{98} } func (x *WGPlayerEnterMiniGame) GetSid() int64 { @@ -7590,7 +7716,7 @@ type WGPlayerLeaveMiniGame struct { func (x *WGPlayerLeaveMiniGame) Reset() { *x = WGPlayerLeaveMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[97] + mi := &file_server_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7603,7 +7729,7 @@ func (x *WGPlayerLeaveMiniGame) String() string { func (*WGPlayerLeaveMiniGame) ProtoMessage() {} func (x *WGPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[97] + mi := &file_server_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7616,7 +7742,7 @@ func (x *WGPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerLeaveMiniGame.ProtoReflect.Descriptor instead. func (*WGPlayerLeaveMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{97} + return file_server_proto_rawDescGZIP(), []int{99} } func (x *WGPlayerLeaveMiniGame) GetSid() int64 { @@ -7659,7 +7785,7 @@ type WGPlayerLeave struct { func (x *WGPlayerLeave) Reset() { *x = WGPlayerLeave{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[98] + mi := &file_server_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7672,7 +7798,7 @@ func (x *WGPlayerLeave) String() string { func (*WGPlayerLeave) ProtoMessage() {} func (x *WGPlayerLeave) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[98] + mi := &file_server_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7685,7 +7811,7 @@ func (x *WGPlayerLeave) ProtoReflect() protoreflect.Message { // Deprecated: Use WGPlayerLeave.ProtoReflect.Descriptor instead. func (*WGPlayerLeave) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{98} + return file_server_proto_rawDescGZIP(), []int{100} } func (x *WGPlayerLeave) GetSnId() int32 { @@ -7711,7 +7837,7 @@ type GWPlayerLeaveMiniGame struct { func (x *GWPlayerLeaveMiniGame) Reset() { *x = GWPlayerLeaveMiniGame{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[99] + mi := &file_server_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7724,7 +7850,7 @@ func (x *GWPlayerLeaveMiniGame) String() string { func (*GWPlayerLeaveMiniGame) ProtoMessage() {} func (x *GWPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[99] + mi := &file_server_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7737,7 +7863,7 @@ func (x *GWPlayerLeaveMiniGame) ProtoReflect() protoreflect.Message { // Deprecated: Use GWPlayerLeaveMiniGame.ProtoReflect.Descriptor instead. func (*GWPlayerLeaveMiniGame) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{99} + return file_server_proto_rawDescGZIP(), []int{101} } func (x *GWPlayerLeaveMiniGame) GetSceneId() int32 { @@ -7787,7 +7913,7 @@ type GWDestroyMiniScene struct { func (x *GWDestroyMiniScene) Reset() { *x = GWDestroyMiniScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[100] + mi := &file_server_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7800,7 +7926,7 @@ func (x *GWDestroyMiniScene) String() string { func (*GWDestroyMiniScene) ProtoMessage() {} func (x *GWDestroyMiniScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[100] + mi := &file_server_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7813,7 +7939,7 @@ func (x *GWDestroyMiniScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDestroyMiniScene.ProtoReflect.Descriptor instead. func (*GWDestroyMiniScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{100} + return file_server_proto_rawDescGZIP(), []int{102} } func (x *GWDestroyMiniScene) GetSceneId() int32 { @@ -7835,7 +7961,7 @@ type GRDestroyScene struct { func (x *GRDestroyScene) Reset() { *x = GRDestroyScene{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[101] + mi := &file_server_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7848,7 +7974,7 @@ func (x *GRDestroyScene) String() string { func (*GRDestroyScene) ProtoMessage() {} func (x *GRDestroyScene) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[101] + mi := &file_server_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7861,7 +7987,7 @@ func (x *GRDestroyScene) ProtoReflect() protoreflect.Message { // Deprecated: Use GRDestroyScene.ProtoReflect.Descriptor instead. func (*GRDestroyScene) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{101} + return file_server_proto_rawDescGZIP(), []int{103} } func (x *GRDestroyScene) GetSceneId() int32 { @@ -7883,7 +8009,7 @@ type RWAccountInvalid struct { func (x *RWAccountInvalid) Reset() { *x = RWAccountInvalid{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[102] + mi := &file_server_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7896,7 +8022,7 @@ func (x *RWAccountInvalid) String() string { func (*RWAccountInvalid) ProtoMessage() {} func (x *RWAccountInvalid) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[102] + mi := &file_server_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7909,7 +8035,7 @@ func (x *RWAccountInvalid) ProtoReflect() protoreflect.Message { // Deprecated: Use RWAccountInvalid.ProtoReflect.Descriptor instead. func (*RWAccountInvalid) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{102} + return file_server_proto_rawDescGZIP(), []int{104} } func (x *RWAccountInvalid) GetAcc() string { @@ -7932,7 +8058,7 @@ type WGDTRoomInfo struct { func (x *WGDTRoomInfo) Reset() { *x = WGDTRoomInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[103] + mi := &file_server_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7945,7 +8071,7 @@ func (x *WGDTRoomInfo) String() string { func (*WGDTRoomInfo) ProtoMessage() {} func (x *WGDTRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[103] + mi := &file_server_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7958,7 +8084,7 @@ func (x *WGDTRoomInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use WGDTRoomInfo.ProtoReflect.Descriptor instead. func (*WGDTRoomInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{103} + return file_server_proto_rawDescGZIP(), []int{105} } func (x *WGDTRoomInfo) GetDataKey() string { @@ -7993,7 +8119,7 @@ type PlayerDTCoin struct { func (x *PlayerDTCoin) Reset() { *x = PlayerDTCoin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[104] + mi := &file_server_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8006,7 +8132,7 @@ func (x *PlayerDTCoin) String() string { func (*PlayerDTCoin) ProtoMessage() {} func (x *PlayerDTCoin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[104] + mi := &file_server_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8019,7 +8145,7 @@ func (x *PlayerDTCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerDTCoin.ProtoReflect.Descriptor instead. func (*PlayerDTCoin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{104} + return file_server_proto_rawDescGZIP(), []int{106} } func (x *PlayerDTCoin) GetNickName() string { @@ -8090,7 +8216,7 @@ type EResult struct { func (x *EResult) Reset() { *x = EResult{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[105] + mi := &file_server_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8103,7 +8229,7 @@ func (x *EResult) String() string { func (*EResult) ProtoMessage() {} func (x *EResult) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[105] + mi := &file_server_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8116,7 +8242,7 @@ func (x *EResult) ProtoReflect() protoreflect.Message { // Deprecated: Use EResult.ProtoReflect.Descriptor instead. func (*EResult) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{105} + return file_server_proto_rawDescGZIP(), []int{107} } func (x *EResult) GetIndex() string { @@ -8158,7 +8284,7 @@ type GWDTRoomInfo struct { func (x *GWDTRoomInfo) Reset() { *x = GWDTRoomInfo{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[106] + mi := &file_server_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8171,7 +8297,7 @@ func (x *GWDTRoomInfo) String() string { func (*GWDTRoomInfo) ProtoMessage() {} func (x *GWDTRoomInfo) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[106] + mi := &file_server_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8184,7 +8310,7 @@ func (x *GWDTRoomInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use GWDTRoomInfo.ProtoReflect.Descriptor instead. func (*GWDTRoomInfo) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{106} + return file_server_proto_rawDescGZIP(), []int{108} } func (x *GWDTRoomInfo) GetDataKey() string { @@ -8300,7 +8426,7 @@ type WGRoomResults struct { func (x *WGRoomResults) Reset() { *x = WGRoomResults{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[107] + mi := &file_server_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8313,7 +8439,7 @@ func (x *WGRoomResults) String() string { func (*WGRoomResults) ProtoMessage() {} func (x *WGRoomResults) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[107] + mi := &file_server_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8326,7 +8452,7 @@ func (x *WGRoomResults) ProtoReflect() protoreflect.Message { // Deprecated: Use WGRoomResults.ProtoReflect.Descriptor instead. func (*WGRoomResults) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{107} + return file_server_proto_rawDescGZIP(), []int{109} } func (x *WGRoomResults) GetRoomId() int32 { @@ -8371,7 +8497,7 @@ type GWRoomResults struct { func (x *GWRoomResults) Reset() { *x = GWRoomResults{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[108] + mi := &file_server_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8384,7 +8510,7 @@ func (x *GWRoomResults) String() string { func (*GWRoomResults) ProtoMessage() {} func (x *GWRoomResults) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[108] + mi := &file_server_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8397,7 +8523,7 @@ func (x *GWRoomResults) ProtoReflect() protoreflect.Message { // Deprecated: Use GWRoomResults.ProtoReflect.Descriptor instead. func (*GWRoomResults) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{108} + return file_server_proto_rawDescGZIP(), []int{110} } func (x *GWRoomResults) GetDataKey() string { @@ -8435,7 +8561,7 @@ type GWAddSingleAdjust struct { func (x *GWAddSingleAdjust) Reset() { *x = GWAddSingleAdjust{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[109] + mi := &file_server_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8448,7 +8574,7 @@ func (x *GWAddSingleAdjust) String() string { func (*GWAddSingleAdjust) ProtoMessage() {} func (x *GWAddSingleAdjust) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[109] + mi := &file_server_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8461,7 +8587,7 @@ func (x *GWAddSingleAdjust) ProtoReflect() protoreflect.Message { // Deprecated: Use GWAddSingleAdjust.ProtoReflect.Descriptor instead. func (*GWAddSingleAdjust) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{109} + return file_server_proto_rawDescGZIP(), []int{111} } func (x *GWAddSingleAdjust) GetSnId() int32 { @@ -8499,7 +8625,7 @@ type WGSingleAdjust struct { func (x *WGSingleAdjust) Reset() { *x = WGSingleAdjust{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[110] + mi := &file_server_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8512,7 +8638,7 @@ func (x *WGSingleAdjust) String() string { func (*WGSingleAdjust) ProtoMessage() {} func (x *WGSingleAdjust) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[110] + mi := &file_server_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8525,7 +8651,7 @@ func (x *WGSingleAdjust) ProtoReflect() protoreflect.Message { // Deprecated: Use WGSingleAdjust.ProtoReflect.Descriptor instead. func (*WGSingleAdjust) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{110} + return file_server_proto_rawDescGZIP(), []int{112} } func (x *WGSingleAdjust) GetSceneId() int32 { @@ -8566,7 +8692,7 @@ type WbCtrlCfg struct { func (x *WbCtrlCfg) Reset() { *x = WbCtrlCfg{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[111] + mi := &file_server_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8579,7 +8705,7 @@ func (x *WbCtrlCfg) String() string { func (*WbCtrlCfg) ProtoMessage() {} func (x *WbCtrlCfg) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[111] + mi := &file_server_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8592,7 +8718,7 @@ func (x *WbCtrlCfg) ProtoReflect() protoreflect.Message { // Deprecated: Use WbCtrlCfg.ProtoReflect.Descriptor instead. func (*WbCtrlCfg) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{111} + return file_server_proto_rawDescGZIP(), []int{113} } func (x *WbCtrlCfg) GetPlatform() string { @@ -8651,7 +8777,7 @@ type WGBuyRecTimeItem struct { func (x *WGBuyRecTimeItem) Reset() { *x = WGBuyRecTimeItem{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[112] + mi := &file_server_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8664,7 +8790,7 @@ func (x *WGBuyRecTimeItem) String() string { func (*WGBuyRecTimeItem) ProtoMessage() {} func (x *WGBuyRecTimeItem) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[112] + mi := &file_server_proto_msgTypes[114] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8677,7 +8803,7 @@ func (x *WGBuyRecTimeItem) ProtoReflect() protoreflect.Message { // Deprecated: Use WGBuyRecTimeItem.ProtoReflect.Descriptor instead. func (*WGBuyRecTimeItem) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{112} + return file_server_proto_rawDescGZIP(), []int{114} } func (x *WGBuyRecTimeItem) GetSnId() int32 { @@ -8714,7 +8840,7 @@ type WGUpdateSkin struct { func (x *WGUpdateSkin) Reset() { *x = WGUpdateSkin{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[113] + mi := &file_server_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8727,7 +8853,7 @@ func (x *WGUpdateSkin) String() string { func (*WGUpdateSkin) ProtoMessage() {} func (x *WGUpdateSkin) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[113] + mi := &file_server_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8740,7 +8866,7 @@ func (x *WGUpdateSkin) ProtoReflect() protoreflect.Message { // Deprecated: Use WGUpdateSkin.ProtoReflect.Descriptor instead. func (*WGUpdateSkin) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{113} + return file_server_proto_rawDescGZIP(), []int{115} } func (x *WGUpdateSkin) GetSnId() int32 { @@ -8770,7 +8896,7 @@ type PlayerChangeItems struct { func (x *PlayerChangeItems) Reset() { *x = PlayerChangeItems{} if protoimpl.UnsafeEnabled { - mi := &file_server_proto_msgTypes[114] + mi := &file_server_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8783,7 +8909,7 @@ func (x *PlayerChangeItems) String() string { func (*PlayerChangeItems) ProtoMessage() {} func (x *PlayerChangeItems) ProtoReflect() protoreflect.Message { - mi := &file_server_proto_msgTypes[114] + mi := &file_server_proto_msgTypes[116] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8796,7 +8922,7 @@ func (x *PlayerChangeItems) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayerChangeItems.ProtoReflect.Descriptor instead. func (*PlayerChangeItems) Descriptor() ([]byte, []int) { - return file_server_proto_rawDescGZIP(), []int{114} + return file_server_proto_rawDescGZIP(), []int{116} } func (x *PlayerChangeItems) GetSnId() int32 { @@ -8860,1144 +8986,1162 @@ var file_server_proto_rawDesc = []byte{ 0x28, 0x09, 0x52, 0x04, 0x54, 0x65, 0x78, 0x74, 0x22, 0x28, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, - 0x75, 0x6d, 0x22, 0xe0, 0x05, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, - 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x12, 0x1e, - 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x18, 0x08, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x61, 0x6c, 0x6c, - 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x48, 0x61, 0x6c, 0x6c, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x33, 0x0a, 0x0a, - 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x45, - 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, - 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, - 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6c, 0x75, - 0x62, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6c, 0x75, 0x62, 0x12, 0x1e, 0x0a, - 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x20, 0x0a, - 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0b, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x6f, 0x73, 0x12, - 0x1a, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x43, 0x6c, 0x75, 0x62, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, - 0x74, 0x72, 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, - 0x74, 0x72, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, - 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, - 0x6b, 0x12, 0x22, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3c, 0x0a, 0x0e, 0x57, 0x47, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x03, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x47, - 0x72, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x47, 0x72, - 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, - 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x22, 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, - 0x65, 0x43, 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x52, 0x65, 0x62, 0x61, - 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0xdd, 0x06, 0x0a, 0x0d, 0x57, 0x47, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x53, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x49, - 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, - 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, - 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, - 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, - 0x2e, 0x0a, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x2e, 0x0a, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x2e, 0x0a, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, - 0x75, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, - 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x61, - 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x52, 0x61, - 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, 0x74, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, - 0x74, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, - 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x75, 0x6d, 0x22, 0x9f, 0x01, 0x0a, 0x0b, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, + 0x6f, 0x69, 0x63, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x72, 0x74, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, + 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x49, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x43, + 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x43, 0x75, 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x43, 0x75, 0x72, + 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0d, 0x43, 0x75, 0x72, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, + 0x24, 0x0a, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x65, 0x78, 0x74, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, + 0x79, 0x70, 0x65, 0x22, 0xed, 0x04, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, + 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, + 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x33, 0x0a, + 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, + 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x4e, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x41, 0x66, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, + 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x09, 0x43, 0x6f, + 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x43, 0x6f, 0x73, + 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x06, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x12, 0x28, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, + 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x09, 0x43, 0x68, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x22, 0x3c, 0x0a, 0x0e, 0x57, 0x47, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x03, 0x52, 0x03, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x47, 0x72, 0x61, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x47, 0x72, 0x61, 0x63, + 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x57, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, + 0x56, 0x0a, 0x0a, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x22, 0x0a, + 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x53, 0x77, 0x69, 0x74, 0x63, + 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, + 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, + 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0xdd, 0x06, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, + 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, + 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x1c, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, + 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, + 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2e, 0x0a, + 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2e, 0x0a, + 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x52, 0x07, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, + 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, + 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x49, 0x74, + 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x12, + 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x13, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x57, 0x47, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x61, 0x6e, 0x6b, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, + 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x56, 0x43, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x73, 0x74, 0x1a, + 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0d, 0x57, 0x47, 0x41, - 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x7a, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, - 0x54, 0x73, 0x22, 0x91, 0x07, 0x0a, 0x0d, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, - 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, - 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x4c, 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, - 0x6f, 0x77, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x2e, - 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x36, - 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, - 0x65, 0x61, 0x76, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, - 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x57, 0x0a, 0x10, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, - 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, - 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x72, 0x6f, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x52, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x61, 0x6e, + 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0d, 0x57, 0x47, 0x41, 0x75, 0x64, + 0x69, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x10, - 0x47, 0x57, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, 0x72, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, - 0x13, 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x69, - 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x69, 0x70, 0x12, 0x22, 0x0a, 0x0c, - 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x70, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, 0x0a, 0x15, - 0x47, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, - 0x6e, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x0f, 0x57, 0x47, 0x44, 0x61, 0x79, - 0x54, 0x69, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x69, - 0x6e, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x69, 0x6e, 0x75, - 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x65, 0x65, 0x6b, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x14, 0x0a, 0x05, - 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x6f, 0x6e, - 0x74, 0x68, 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xae, 0x01, - 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, - 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x69, - 0x6e, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x42, 0x69, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, - 0x0a, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x22, 0x41, - 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, - 0x30, 0x0a, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, - 0x73, 0x22, 0x9c, 0x04, 0x0a, 0x0f, 0x47, 0x52, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x03, 0x52, 0x65, 0x63, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x52, 0x03, 0x52, - 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, - 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x43, 0x6c, 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, - 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, - 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, - 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, - 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, - 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, - 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, - 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, - 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, - 0x22, 0xb2, 0x01, 0x0a, 0x0a, 0x57, 0x52, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, - 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, - 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0c, 0x57, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x52, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0b, 0x57, 0x54, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x50, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, 0x6e, - 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x10, - 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, - 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x09, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x52, 0x05, - 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, - 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, - 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x22, 0x76, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, - 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, - 0x72, 0x72, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x4d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x33, 0x0a, 0x09, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x43, 0x74, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, - 0x0a, 0x0a, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x46, 0x69, 0x73, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x69, - 0x73, 0x68, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0c, 0x47, 0x57, - 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x34, - 0x0a, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x73, - 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, - 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x57, - 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, + 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x50, 0x6f, 0x73, 0x22, 0x7a, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x49, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, + 0x22, 0x91, 0x07, 0x0a, 0x0d, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, + 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, + 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, + 0x0a, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, + 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x65, 0x6c, 0x56, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x65, + 0x6c, 0x56, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x57, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, + 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4c, + 0x6f, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x2e, 0x0a, 0x12, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x42, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x36, 0x0a, 0x05, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, + 0x76, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x43, 0x75, 0x72, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x57, 0x0a, 0x10, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x12, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x57, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x61, + 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x2e, 0x52, 0x61, + 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x52, 0x61, + 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, + 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x10, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x44, 0x72, 0x6f, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x22, 0x66, 0x0a, 0x0e, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, + 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x10, 0x47, 0x57, + 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x13, 0x47, + 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, + 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x69, 0x70, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x56, 0x69, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x6f, + 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x70, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, 0x0a, 0x15, 0x47, 0x47, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x42, + 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x53, 0x69, 0x64, 0x22, 0x79, 0x0a, 0x0f, 0x57, 0x47, 0x44, 0x61, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x48, 0x6f, 0x75, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x44, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x44, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x57, 0x65, 0x65, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x6f, 0x6e, 0x74, 0x68, + 0x22, 0xb8, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xae, 0x01, 0x0a, 0x0c, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x09, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x42, 0x69, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x74, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, + 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x6f, 0x73, 0x22, 0x41, 0x0a, 0x0d, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x12, 0x30, 0x0a, + 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x22, + 0x9c, 0x04, 0x0a, 0x0f, 0x47, 0x52, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x03, 0x52, 0x65, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, + 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x52, 0x03, 0x52, 0x65, 0x63, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, - 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, - 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, - 0x61, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, - 0x77, 0x61, 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, - 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, 0x44, 0x44, - 0x61, 0x74, 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, - 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, - 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x43, - 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, - 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, - 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, - 0x72, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, - 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, - 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x43, - 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, - 0x2c, 0x0a, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, 0x69, 0x6e, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, - 0x03, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, - 0x5c, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x50, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, - 0x0e, 0x47, 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, 0x47, 0x52, - 0x65, 0x62, 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x77, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x77, 0x53, - 0x6e, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, - 0x4f, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, 0x65, 0x77, - 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, - 0x72, 0x6f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, - 0x22, 0xa7, 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, - 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, - 0x0a, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x47, - 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, - 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x0f, 0x47, - 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, + 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, + 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6c, + 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x6c, + 0x75, 0x62, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, + 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, + 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73, + 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, + 0x6f, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x10, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, + 0x6c, 0x61, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x44, + 0x61, 0x74, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, 0x65, 0x72, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, 0x61, 0x73, 0x56, 0x65, 0x72, + 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x22, 0xb2, + 0x01, 0x0a, 0x0a, 0x57, 0x52, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, + 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x52, 0x65, + 0x63, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x49, 0x73, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x69, 0x74, + 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, + 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, + 0x67, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x0c, 0x57, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x52, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0b, 0x57, 0x54, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x50, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x8f, + 0x01, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, + 0x50, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, + 0x0a, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x22, 0xac, 0x01, 0x0a, 0x09, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x44, 0x61, - 0x74, 0x61, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, - 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, - 0x6e, 0x22, 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x69, - 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x57, 0x47, - 0x53, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x57, - 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, - 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x6c, - 0x69, 0x65, 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, - 0x7e, 0x0a, 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, - 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, - 0x6e, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, 0x69, 0x64, - 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x22, - 0x7a, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x63, 0x65, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0a, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, 0x65, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x42, - 0x47, 0x61, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, 0x47, 0x61, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x72, - 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, - 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, - 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, 0x69, 0x6e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x4c, - 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x6f, - 0x74, 0x74, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, - 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, 0xc2, 0x01, - 0x0a, 0x10, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, - 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x52, 0x65, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x63, - 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, - 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, - 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, - 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x22, 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, - 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, 0x6d, 0x70, - 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, 0x6d, 0x70, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, - 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, - 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x44, 0x57, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, - 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x50, 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, 0x54, 0x68, - 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x12, 0x28, - 0x0a, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, - 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, - 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, - 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, - 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, - 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, - 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x22, 0x43, 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, - 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, - 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, - 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x4c, - 0x6f, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, - 0x43, 0x6e, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x02, 0x54, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, - 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x61, - 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, 0x0a, 0x0e, - 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, - 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, - 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, - 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, - 0x0a, 0x0e, 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x12, - 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, - 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x44, 0x0a, - 0x0f, 0x47, 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, - 0x12, 0x31, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, - 0x75, 0x74, 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, - 0x22, 0x74, 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x45, - 0x6e, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, 0x75, 0x65, - 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, - 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, - 0x46, 0x6f, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, - 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, - 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, - 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, - 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, - 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, - 0x75, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, - 0x6e, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, - 0x66, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, - 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, - 0x4c, 0x0a, 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, 0x66, 0x67, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, 0x2e, 0x0a, - 0x12, 0x47, 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, - 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, - 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x22, - 0x40, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, - 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, - 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, - 0x6c, 0x22, 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, - 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, - 0x6c, 0x22, 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x63, 0x52, 0x05, 0x44, 0x61, + 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, + 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x22, + 0x76, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x75, 0x72, 0x72, 0x52, + 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x75, 0x72, 0x72, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4d, + 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, + 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x33, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x43, 0x74, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, - 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x69, - 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, - 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, - 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, - 0x50, 0x6f, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, - 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, - 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, - 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x11, 0x57, - 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, 0x0a, 0x0a, + 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x69, + 0x73, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x46, 0x69, 0x73, 0x68, + 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x78, 0x0a, 0x0c, 0x47, 0x57, 0x46, 0x69, + 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0b, + 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x46, 0x69, 0x73, 0x68, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x46, 0x69, 0x73, 0x68, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x73, 0x22, 0x44, 0x0a, 0x0c, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, + 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x52, + 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x0d, 0x57, 0x52, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, + 0x69, 0x74, 0x22, 0x40, 0x0a, 0x12, 0x57, 0x52, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x43, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x49, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x57, 0x47, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x4b, 0x69, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, + 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x0e, 0x57, 0x44, 0x44, 0x61, 0x74, + 0x61, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x61, 0x74, + 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x44, 0x61, 0x74, + 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, + 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, + 0x83, 0x01, 0x0a, 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0b, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x43, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4d, 0x6f, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4e, 0x6f, 0x77, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x6f, 0x69, + 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2c, 0x0a, + 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x43, 0x6f, 0x69, 0x6e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x50, + 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x5c, 0x0a, + 0x0d, 0x47, 0x4e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, + 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x0e, 0x47, + 0x57, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x09, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x12, 0x57, 0x47, 0x52, 0x65, 0x62, + 0x69, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x4f, 0x6c, 0x64, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x49, + 0x64, 0x22, 0x4e, 0x0a, 0x0c, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6c, 0x61, + 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, + 0x67, 0x22, 0x51, 0x0a, 0x0b, 0x57, 0x47, 0x48, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x64, 0x4f, 0x70, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x73, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x4e, 0x65, 0x77, 0x4e, 0x6f, + 0x74, 0x69, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x72, 0x6f, + 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x72, 0x6f, 0x62, 0x22, 0xa7, + 0x02, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, 0x47, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, - 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x4f, 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, - 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x73, 0x74, - 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x53, - 0x53, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, 0x46, 0x6f, + 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x49, 0x73, 0x46, 0x6f, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, + 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x4c, 0x6f, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x47, 0x61, 0x6d, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, + 0x79, 0x73, 0x49, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x53, 0x79, 0x73, 0x49, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, + 0x79, 0x73, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x53, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x22, 0x94, 0x01, 0x0a, 0x0f, 0x47, 0x57, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x75, 0x6d, + 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x50, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x22, + 0xb5, 0x01, 0x0a, 0x0f, 0x57, 0x47, 0x52, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x50, + 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6f, 0x6f, 0x6c, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x15, 0x57, 0x47, 0x53, 0x65, + 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, - 0x96, 0x01, 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, - 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x18, 0x0a, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x57, 0x42, 0x43, + 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, + 0x57, 0x42, 0x43, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x4d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x57, 0x41, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x6c, 0x69, 0x65, + 0x76, 0x65, 0x57, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x7e, 0x0a, + 0x10, 0x47, 0x57, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x6f, + 0x67, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, + 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x6e, 0x69, + 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x08, 0x52, 0x09, 0x49, 0x73, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x6e, 0x67, 0x22, 0x7a, 0x0a, + 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, + 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x0a, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x42, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x42, 0x65, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x47, 0x61, + 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x54, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x42, 0x47, 0x61, + 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x57, 0x42, 0x47, 0x61, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x72, 0x0a, 0x0c, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x05, + 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, + 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x22, 0xa8, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x78, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x74, + 0x74, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x6f, 0x74, 0x74, + 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x72, 0x64, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x72, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x10, + 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, + 0x12, 0x40, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x57, 0x69, 0x6e, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x47, 0x61, 0x69, 0x6e, + 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, + 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x52, 0x65, 0x63, 0x49, 0x64, + 0x22, 0x2e, 0x0a, 0x12, 0x57, 0x47, 0x50, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x44, 0x54, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0x5d, 0x0a, 0x0e, 0x47, 0x52, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, + 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, + 0x4f, 0x0a, 0x17, 0x57, 0x47, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, + 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x20, + 0x0a, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0b, 0x53, 0x61, 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, + 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x57, 0x47, 0x43, 0x6c, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, + 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x75, 0x6d, 0x70, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x44, 0x42, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x52, 0x0a, 0x44, 0x42, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x14, 0x44, 0x57, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, + 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, + 0x6c, 0x74, 0x22, 0x89, 0x03, 0x0a, 0x13, 0x44, 0x57, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, + 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x54, 0x68, 0x69, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, + 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x49, + 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, + 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x49, 0x6e, 0x54, 0x68, 0x69, 0x72, 0x64, 0x47, 0x61, + 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, + 0x4f, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x61, 0x78, 0x77, 0x69, 0x6e, 0x12, 0x28, + 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x63, 0x63, 0x52, 0x6f, 0x75, 0x6e, + 0x64, 0x73, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x10, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x49, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x65, 0x74, + 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x46, 0x6c, + 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0e, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x43, + 0x0a, 0x17, 0x57, 0x44, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x5c, 0x0a, 0x0e, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x6f, 0x67, + 0x43, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x43, 0x6e, + 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x47, 0x57, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, + 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x4c, 0x69, 0x73, + 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x42, 0x61, 0x6e, 0x6b, + 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x22, 0xce, 0x01, 0x0a, 0x0e, 0x47, 0x57, + 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x4a, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x0e, 0x47, 0x57, + 0x47, 0x61, 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x3a, 0x0a, 0x0e, + 0x57, 0x47, 0x4e, 0x69, 0x63, 0x65, 0x49, 0x64, 0x52, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x55, 0x73, + 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x4e, 0x65, 0x77, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x44, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, + 0x44, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x44, 0x0a, 0x0f, 0x47, + 0x57, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x12, 0x31, + 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, + 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x22, 0x3b, 0x0a, 0x13, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x41, 0x75, 0x74, + 0x6f, 0x4d, 0x61, 0x72, 0x6b, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, 0x22, 0x74, + 0x0a, 0x1e, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x6f, 0x62, 0x45, 0x6e, 0x74, + 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x47, 0x61, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, 0x47, 0x61, - 0x6d, 0x65, 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, - 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, - 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x67, 0x57, - 0x69, 0x6e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, - 0x06, 0x53, 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, - 0x70, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, - 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, - 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, - 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, - 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, - 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, - 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, - 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, - 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, - 0x74, 0x22, 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, - 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, - 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, - 0x6e, 0x65, 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x57, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x44, - 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, 0x52, 0x44, - 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, - 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x63, 0x63, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, 0x0c, 0x57, - 0x47, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, - 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, - 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xc6, 0x01, - 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, - 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x9b, 0x03, 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, - 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, - 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, - 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, - 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, - 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x70, - 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, - 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, - 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x75, 0x0a, - 0x0d, 0x57, 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, - 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, - 0x61, 0x4b, 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, 0x53, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, - 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, 0x57, 0x47, - 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, - 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, - 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, - 0x6a, 0x75, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0xaf, - 0x01, 0x0a, 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, - 0x43, 0x74, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, - 0x43, 0x74, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x57, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, - 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, - 0x22, 0x60, 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, - 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x45, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, - 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, + 0x52, 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x2c, 0x0a, 0x10, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x41, + 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, + 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, + 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x11, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x52, + 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x55, 0x73, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, + 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x6e, 0x0a, + 0x18, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x36, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x66, 0x67, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x66, 0x67, 0x22, 0x4c, 0x0a, + 0x16, 0x57, 0x47, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x03, 0x43, 0x66, 0x67, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x43, 0x66, 0x67, 0x52, 0x03, 0x43, 0x66, 0x67, 0x22, 0x2e, 0x0a, 0x12, 0x47, + 0x57, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x0c, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x22, 0x40, 0x0a, + 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a, + 0x07, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, + 0x3e, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, + 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x53, 0x74, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x22, + 0x39, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x4b, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, - 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x2a, 0x83, 0x17, 0x0a, 0x0a, 0x53, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x52, - 0x56, 0x45, 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, 0x5f, 0x4c, 0x4f, 0x41, 0x44, - 0x10, 0xe8, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xe9, 0x07, - 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, - 0x54, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, - 0x10, 0xec, 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, - 0x5f, 0x53, 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x54, - 0x41, 0x47, 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, 0x47, 0x5f, 0x4d, 0x55, 0x4c, - 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x53, 0x43, 0x45, - 0x4e, 0x45, 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, - 0xce, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xcf, 0x08, 0x12, 0x1a, - 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x52, 0x4f, - 0x4f, 0x4d, 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, - 0x45, 0x4e, 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x52, 0x4f, 0x50, 0x4c, 0x49, - 0x4e, 0x45, 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x10, - 0xd4, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x42, 0x49, 0x4e, - 0x44, 0x10, 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x55, - 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x54, 0x55, - 0x52, 0x4e, 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x52, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, - 0xd8, 0x08, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, - 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x4c, 0x45, - 0x41, 0x56, 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xdc, - 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, - 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, 0xdd, 0x08, 0x12, 0x21, 0x0a, - 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, - 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xde, 0x08, - 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, 0x08, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x42, 0x49, - 0x4c, 0x4c, 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x5f, 0x53, - 0x4e, 0x49, 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, - 0xe3, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, - 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, - 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x4e, 0x44, 0x10, - 0xe7, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x46, 0x49, 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xe8, 0x08, 0x12, 0x1f, 0x0a, - 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xe9, 0x08, 0x12, 0x1e, - 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0xea, 0x08, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, - 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, 0x08, 0x12, 0x24, 0x0a, 0x1f, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, - 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, - 0xed, 0x08, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, - 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x10, 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, - 0x4f, 0x4d, 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x57, 0x52, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x10, 0xf0, 0x08, 0x12, 0x19, - 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x10, 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xf3, 0x08, - 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x57, 0x42, - 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x41, - 0x52, 0x44, 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x53, 0x43, 0x45, 0x4e, 0x45, - 0x10, 0xdd, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x12, - 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x45, 0x57, - 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, - 0x54, 0x49, 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x53, 0x45, 0x54, 0x54, - 0x49, 0x4e, 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x42, 0x4c, 0x41, - 0x43, 0x4b, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x52, 0x45, 0x4c, 0x49, - 0x45, 0x56, 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe3, 0x0b, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, - 0x52, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, - 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, - 0x66, 0x65, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, 0x0b, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x43, - 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x5f, 0x4d, 0x45, 0x53, - 0x53, 0x41, 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4c, 0x4f, - 0x47, 0x10, 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf0, 0x0b, 0x12, 0x1a, - 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, - 0x50, 0x4f, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, - 0x4f, 0x49, 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, - 0x10, 0xf3, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf4, - 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, - 0x4c, 0x41, 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x52, 0x4b, 0x54, 0x41, 0x47, - 0x10, 0xf5, 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x43, - 0x4f, 0x49, 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0xf6, 0x0b, - 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, - 0x4d, 0x45, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xf7, 0x0b, 0x12, - 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x52, 0x4f, - 0x46, 0x49, 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x45, - 0x43, 0x54, 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x56, - 0x45, 0x4e, 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x57, 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x59, 0x10, 0xfa, 0x0b, - 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, - 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, - 0xfb, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x47, 0x52, 0x41, 0x44, 0x45, - 0x10, 0xfc, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, 0x4d, 0x41, 0x54, 0x43, 0x48, - 0x10, 0xfd, 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x41, 0x53, 0x45, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x54, 0x4f, - 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x4d, 0x41, 0x54, - 0x43, 0x48, 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, - 0x54, 0x10, 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, - 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x49, - 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, - 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x86, 0x0c, 0x12, 0x23, - 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, - 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, - 0x10, 0x87, 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, - 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x43, 0x45, 0x4e, - 0x45, 0x10, 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, - 0x52, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x89, - 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, - 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, 0x0c, 0x12, 0x19, 0x0a, 0x14, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, - 0x54, 0x53, 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, - 0x10, 0x8d, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, - 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8e, 0x0c, - 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x44, - 0x44, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8f, 0x0c, - 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x42, 0x55, - 0x59, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x90, 0x0c, 0x12, - 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x10, 0x92, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, - 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x47, + 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, + 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, + 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, + 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x47, 0x57, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, + 0x70, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x47, 0x61, 0x6d, 0x65, + 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x47, 0x61, 0x6d, + 0x65, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x69, 0x6e, + 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, 0x5b, 0x0a, 0x11, 0x57, 0x47, 0x50, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x51, 0x75, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, + 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x16, 0x57, 0x47, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, + 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4f, + 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4f, + 0x75, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, + 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x52, 0x65, 0x73, 0x74, 0x4e, 0x75, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x53, 0x53, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x54, 0x6f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, + 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x96, 0x01, + 0x0a, 0x10, 0x57, 0x47, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, + 0x6f, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, + 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x62, 0x4e, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x62, 0x4e, 0x75, 0x6d, + 0x12, 0x1c, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x41, 0x77, 0x61, 0x69, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, + 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x47, 0x61, + 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7d, 0x0a, 0x0d, 0x57, 0x47, 0x47, 0x61, 0x6d, 0x65, + 0x4a, 0x61, 0x63, 0x6b, 0x70, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, + 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, + 0x53, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, + 0x24, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x67, 0x57, 0x69, 0x6e, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x53, + 0x70, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x70, 0x69, + 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x42, 0x61, 0x73, 0x65, 0x42, 0x65, 0x74, 0x12, + 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x49, + 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x65, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, + 0x72, 0x64, 0x73, 0x22, 0xb9, 0x02, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x53, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x47, 0x61, 0x74, 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x61, 0x6b, 0x65, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x04, 0x49, 0x73, 0x51, 0x4d, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, + 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x69, + 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x45, 0x78, 0x70, 0x65, + 0x63, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x53, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0c, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, + 0x71, 0x0a, 0x15, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, + 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x53, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, + 0x74, 0x65, 0x53, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x47, 0x61, 0x74, + 0x65, 0x53, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, + 0x49, 0x64, 0x22, 0x23, 0x0a, 0x0d, 0x57, 0x47, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x57, 0x50, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x47, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x47, + 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x57, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x4d, 0x69, 0x6e, 0x69, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x53, 0x63, 0x65, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x0e, 0x47, 0x52, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, 0x6e, + 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x10, 0x52, 0x57, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x63, 0x63, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x41, 0x63, 0x63, 0x22, 0x40, 0x0a, 0x0c, 0x57, 0x47, 0x44, + 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, + 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, + 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0c, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x44, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x54, + 0x6f, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, + 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x9b, 0x03, + 0x0a, 0x0c, 0x47, 0x57, 0x44, 0x54, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, + 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x4e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4e, 0x43, 0x6f, + 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x54, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x07, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x4c, 0x65, 0x66, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, + 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x6f, + 0x69, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, + 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, + 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, + 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x6f, 0x70, 0x4e, 0x75, 0x6d, + 0x12, 0x29, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x44, + 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x44, 0x43, + 0x6f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x44, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x75, 0x0a, 0x0d, 0x57, + 0x47, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, + 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x57, 0x65, 0x62, 0x75, 0x73, 0x65, 0x72, 0x12, 0x18, + 0x0a, 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, + 0x4b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, + 0x65, 0x79, 0x22, 0x4f, 0x0a, 0x0d, 0x47, 0x57, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, + 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x4d, 0x73, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x57, 0x41, 0x64, 0x64, 0x53, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x61, 0x6d, 0x65, + 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x47, 0x61, + 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x0e, 0x57, 0x47, 0x53, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x63, + 0x65, 0x6e, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x63, 0x65, + 0x6e, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x12, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, + 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x22, 0xaf, 0x01, 0x0a, + 0x09, 0x57, 0x62, 0x43, 0x74, 0x72, 0x6c, 0x43, 0x66, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, + 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x43, 0x74, + 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x4e, 0x6f, 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x57, 0x65, 0x6c, + 0x66, 0x61, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x4b, 0x69, 0x6c, 0x6c, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x73, 0x22, 0x60, + 0x0a, 0x10, 0x57, 0x47, 0x42, 0x75, 0x79, 0x52, 0x65, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x49, 0x74, + 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x45, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, + 0x22, 0x32, 0x0a, 0x0c, 0x57, 0x47, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6b, 0x69, 0x6e, + 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x53, 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x49, 0x64, 0x22, 0x4b, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a, + 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x2a, 0x83, 0x17, 0x0a, 0x0a, 0x53, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, + 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, + 0x52, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x43, 0x55, 0x52, 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0xe8, + 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x42, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xe9, 0x07, 0x12, 0x17, + 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x54, 0x45, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xea, 0x07, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x53, 0x5f, 0x44, 0x49, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0xec, + 0x07, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x5f, 0x53, + 0x52, 0x56, 0x43, 0x54, 0x52, 0x4c, 0x10, 0xed, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x10, 0xf4, 0x07, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x54, 0x41, 0x47, + 0x10, 0xf5, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x53, + 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x54, 0x41, 0x47, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, + 0x43, 0x41, 0x53, 0x54, 0x10, 0xf6, 0x07, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, + 0x10, 0xcd, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xce, 0x08, + 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xcf, 0x08, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xd0, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x52, 0x4f, 0x4f, 0x4d, + 0x43, 0x41, 0x52, 0x44, 0x10, 0xd1, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, + 0x45, 0x10, 0xd2, 0x08, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x44, 0x52, 0x4f, 0x50, 0x4c, 0x49, 0x4e, 0x45, + 0x10, 0xd3, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, + 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x48, 0x4f, 0x4c, 0x44, 0x10, 0xd4, 0x08, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x42, 0x49, 0x4e, 0x44, 0x10, + 0xd5, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x47, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x55, 0x4e, 0x42, + 0x49, 0x4e, 0x44, 0x10, 0xd6, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, + 0x10, 0xd7, 0x08, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, + 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xd8, 0x08, + 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x47, 0x41, + 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xd9, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x45, 0x4e, + 0x54, 0x45, 0x52, 0x10, 0xda, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, + 0x45, 0x10, 0xdb, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xdc, 0x08, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x49, 0x4e, 0x56, + 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x4f, 0x54, 0x10, 0xdd, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x4b, 0x49, + 0x43, 0x4b, 0x4f, 0x55, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0xde, 0x08, 0x12, 0x1a, + 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x44, 0x41, 0x54, 0x41, + 0x4e, 0x41, 0x4c, 0x59, 0x53, 0x49, 0x53, 0x10, 0xdf, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x42, 0x49, 0x4c, 0x4c, + 0x4d, 0x4f, 0x4e, 0x45, 0x59, 0x10, 0xe1, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4e, 0x49, + 0x44, 0x10, 0xe2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xe3, 0x08, + 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, + 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x10, 0xe4, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x10, 0xe5, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x47, 0x52, 0x41, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, + 0x43, 0x45, 0x4e, 0x45, 0x10, 0xe6, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x4e, 0x44, 0x10, 0xe7, 0x08, + 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x46, 0x49, + 0x53, 0x48, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0xe8, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x46, + 0x4f, 0x52, 0x43, 0x45, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xe9, 0x08, 0x12, 0x1e, 0x0a, 0x19, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x57, 0x49, 0x4e, 0x53, 0x4f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0xea, 0x08, 0x12, 0x19, 0x0a, 0x14, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x44, 0x41, 0x54, 0x41, 0x10, 0xeb, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xec, 0x08, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x44, 0x5f, 0x41, 0x43, 0x4b, 0x54, 0x68, 0x69, 0x72, 0x64, + 0x52, 0x65, 0x62, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, 0xed, 0x08, + 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x44, 0x57, 0x5f, 0x54, 0x68, + 0x69, 0x72, 0x64, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x10, + 0xee, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, + 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, + 0x10, 0xef, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, + 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x63, 0x10, 0xf0, 0x08, 0x12, 0x19, 0x0a, 0x14, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x10, 0xf1, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x52, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x10, + 0xf2, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xf3, 0x08, 0x12, 0x18, + 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x57, 0x42, 0x43, 0x74, + 0x72, 0x6c, 0x43, 0x66, 0x67, 0x10, 0xf4, 0x08, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x41, 0x52, 0x44, + 0x53, 0x10, 0xdc, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0xdd, + 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x12, 0x18, 0x0a, + 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4e, 0x45, 0x57, 0x4e, 0x4f, + 0x54, 0x49, 0x43, 0x45, 0x10, 0xdf, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x49, + 0x43, 0x10, 0xe0, 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x43, 0x4f, 0x49, 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0xe1, 0x0b, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x53, 0x45, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x42, 0x4c, 0x41, 0x43, 0x4b, + 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe2, 0x0b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x56, + 0x45, 0x57, 0x42, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x10, 0xe3, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, + 0x41, 0x52, 0x41, 0x4d, 0x10, 0xe4, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x4c, 0x4f, 0x47, 0x10, 0xe5, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x47, 0x57, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x43, 0x4f, + 0x49, 0x4e, 0x10, 0xe6, 0x0b, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x10, 0xea, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x47, 0x52, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x65, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x10, 0xeb, 0x0b, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x47, 0x5f, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x61, 0x66, 0x65, + 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xec, 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x43, 0x4f, 0x49, + 0x4e, 0x50, 0x4f, 0x4f, 0x4c, 0x10, 0xed, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x43, 0x4c, 0x55, 0x42, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, + 0x47, 0x45, 0x10, 0xee, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x47, 0x57, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4c, 0x4f, 0x47, 0x10, + 0xef, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, + 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xf0, 0x0b, 0x12, 0x1a, 0x0a, 0x15, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, + 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf1, 0x0b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x43, 0x4f, 0x49, + 0x4e, 0x10, 0xf2, 0x0b, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, + 0x57, 0x5f, 0x4e, 0x49, 0x43, 0x45, 0x49, 0x44, 0x52, 0x45, 0x42, 0x49, 0x4e, 0x44, 0x10, 0xf3, + 0x0b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x57, 0x49, 0x4e, 0x43, 0x4f, 0x49, 0x4e, 0x10, 0xf4, 0x0b, 0x12, + 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x41, 0x55, 0x54, 0x4f, 0x4d, 0x41, 0x52, 0x4b, 0x54, 0x41, 0x47, 0x10, 0xf5, + 0x0b, 0x12, 0x2b, 0x0a, 0x26, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, + 0x4e, 0x56, 0x49, 0x54, 0x45, 0x52, 0x4f, 0x42, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x43, 0x4f, 0x49, + 0x4e, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x51, 0x55, 0x45, 0x55, 0x45, 0x10, 0xf6, 0x0b, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, + 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xf7, 0x0b, 0x12, 0x24, 0x0a, + 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, + 0x54, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x45, 0x43, 0x54, + 0x10, 0xf8, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x45, 0x56, 0x45, 0x4e, + 0x54, 0x10, 0xf9, 0x0b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, + 0x54, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x50, 0x41, 0x59, 0x10, 0xfa, 0x0b, 0x12, 0x20, + 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, + 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xfb, 0x0b, + 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0xfc, + 0x0b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x51, 0x55, 0x49, 0x54, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0xfd, + 0x0b, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, + 0x43, 0x45, 0x4e, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x42, 0x41, 0x53, 0x45, 0x43, 0x48, 0x41, + 0x4e, 0x47, 0x45, 0x10, 0xfe, 0x0b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x54, 0x4f, 0x50, 0x4c, + 0x41, 0x59, 0x45, 0x52, 0x10, 0xff, 0x0b, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x4d, 0x41, 0x54, 0x43, 0x48, + 0x52, 0x4f, 0x42, 0x10, 0x80, 0x0c, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x57, 0x47, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4a, 0x41, 0x43, 0x4b, 0x50, 0x4f, 0x54, 0x10, + 0x83, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x4e, 0x49, + 0x47, 0x41, 0x4d, 0x45, 0x10, 0x85, 0x0c, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, + 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x86, 0x0c, 0x12, 0x23, 0x0a, 0x1e, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, + 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x87, + 0x0c, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, + 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, + 0x88, 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x5f, + 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x53, 0x43, 0x45, 0x4e, 0x45, 0x10, 0x89, 0x0c, 0x12, + 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, + 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x8a, 0x0c, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, + 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, + 0x46, 0x4f, 0x10, 0x8b, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x57, 0x47, 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, + 0x10, 0x8c, 0x0c, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, + 0x5f, 0x44, 0x54, 0x52, 0x4f, 0x4f, 0x4d, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x8d, + 0x0c, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x53, + 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8e, 0x0c, 0x12, 0x1e, + 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x57, 0x5f, 0x41, 0x44, 0x44, 0x53, + 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x41, 0x44, 0x4a, 0x55, 0x53, 0x54, 0x10, 0x8f, 0x0c, 0x12, 0x1d, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x42, 0x55, 0x59, 0x52, + 0x45, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x49, 0x54, 0x45, 0x4d, 0x10, 0x90, 0x0c, 0x12, 0x19, 0x0a, + 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x47, 0x5f, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x53, 0x6b, 0x69, 0x6e, 0x10, 0x91, 0x0c, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x10, 0x92, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, + 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -10013,7 +10157,7 @@ func file_server_proto_rawDescGZIP() []byte { } var file_server_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 120) +var file_server_proto_msgTypes = make([]protoimpl.MessageInfo, 122) var file_server_proto_goTypes = []interface{}{ (SSPacketID)(0), // 0: server.SSPacketID (SGBindGroupTag_OpCode)(0), // 1: server.SGBindGroupTag.OpCode @@ -10026,158 +10170,163 @@ var file_server_proto_goTypes = []interface{}{ (*ServerCtrl)(nil), // 8: server.ServerCtrl (*ServerNotice)(nil), // 9: server.ServerNotice (*Item)(nil), // 10: server.Item - (*WGCreateScene)(nil), // 11: server.WGCreateScene - (*WGDestroyScene)(nil), // 12: server.WGDestroyScene - (*GWDestroyScene)(nil), // 13: server.GWDestroyScene - (*RebateTask)(nil), // 14: server.RebateTask - (*WGPlayerEnter)(nil), // 15: server.WGPlayerEnter - (*WGAudienceSit)(nil), // 16: server.WGAudienceSit - (*WGPlayerReturn)(nil), // 17: server.WGPlayerReturn - (*GWPlayerLeave)(nil), // 18: server.GWPlayerLeave - (*WGPlayerDropLine)(nil), // 19: server.WGPlayerDropLine - (*WGPlayerRehold)(nil), // 20: server.WGPlayerRehold - (*GWBilledRoomCard)(nil), // 21: server.GWBilledRoomCard - (*GGPlayerSessionBind)(nil), // 22: server.GGPlayerSessionBind - (*GGPlayerSessionUnBind)(nil), // 23: server.GGPlayerSessionUnBind - (*WGDayTimeChange)(nil), // 24: server.WGDayTimeChange - (*ReplayPlayerData)(nil), // 25: server.ReplayPlayerData - (*ReplayRecord)(nil), // 26: server.ReplayRecord - (*ReplaySequene)(nil), // 27: server.ReplaySequene - (*GRReplaySequene)(nil), // 28: server.GRReplaySequene - (*WRLoginRec)(nil), // 29: server.WRLoginRec - (*WRGameDetail)(nil), // 30: server.WRGameDetail - (*WRPlayerData)(nil), // 31: server.WRPlayerData - (*WTPlayerPay)(nil), // 32: server.WTPlayerPay - (*PlayerGameRec)(nil), // 33: server.PlayerGameRec - (*GWGameRec)(nil), // 34: server.GWGameRec - (*GWSceneStart)(nil), // 35: server.GWSceneStart - (*PlayerCtx)(nil), // 36: server.PlayerCtx - (*FishRecord)(nil), // 37: server.FishRecord - (*GWFishRecord)(nil), // 38: server.GWFishRecord - (*GWSceneState)(nil), // 39: server.GWSceneState - (*WRInviteRobot)(nil), // 40: server.WRInviteRobot - (*WRInviteCreateRoom)(nil), // 41: server.WRInviteCreateRoom - (*WGAgentKickOutPlayer)(nil), // 42: server.WGAgentKickOutPlayer - (*WDDataAnalysis)(nil), // 43: server.WDDataAnalysis - (*PlayerCard)(nil), // 44: server.PlayerCard - (*GNPlayerCards)(nil), // 45: server.GNPlayerCards - (*RobotData)(nil), // 46: server.RobotData - (*GNPlayerParam)(nil), // 47: server.GNPlayerParam - (*GWRebuildScene)(nil), // 48: server.GWRebuildScene - (*WGRebindPlayerSnId)(nil), // 49: server.WGRebindPlayerSnId - (*GWPlayerFlag)(nil), // 50: server.GWPlayerFlag - (*WGHundredOp)(nil), // 51: server.WGHundredOp - (*GWNewNotice)(nil), // 52: server.GWNewNotice - (*PlayerStatics)(nil), // 53: server.PlayerStatics - (*GWPlayerStatics)(nil), // 54: server.GWPlayerStatics - (*WGResetCoinPool)(nil), // 55: server.WGResetCoinPool - (*WGSetPlayerBlackLevel)(nil), // 56: server.WGSetPlayerBlackLevel - (*GWAutoRelieveWBLevel)(nil), // 57: server.GWAutoRelieveWBLevel - (*GWScenePlayerLog)(nil), // 58: server.GWScenePlayerLog - (*GWPlayerForceLeave)(nil), // 59: server.GWPlayerForceLeave - (*PlayerData)(nil), // 60: server.PlayerData - (*GWPlayerData)(nil), // 61: server.GWPlayerData - (*PlayerWinScore)(nil), // 62: server.PlayerWinScore - (*GWPlayerWinScore)(nil), // 63: server.GWPlayerWinScore - (*WGPayerOnGameCount)(nil), // 64: server.WGPayerOnGameCount - (*GRGameFreeData)(nil), // 65: server.GRGameFreeData - (*WGSyncPlayerSafeBoxCoin)(nil), // 66: server.WGSyncPlayerSafeBoxCoin - (*WGClubMessage)(nil), // 67: server.WGClubMessage - (*DWThirdRebateMessage)(nil), // 68: server.DWThirdRebateMessage - (*DWThirdRoundMessage)(nil), // 69: server.DWThirdRoundMessage - (*WDACKThirdRebateMessage)(nil), // 70: server.WDACKThirdRebateMessage - (*GWGameStateLog)(nil), // 71: server.GWGameStateLog - (*GWGameState)(nil), // 72: server.GWGameState - (*GWGameJackList)(nil), // 73: server.GWGameJackList - (*GWGameJackCoin)(nil), // 74: server.GWGameJackCoin - (*WGNiceIdRebind)(nil), // 75: server.WGNiceIdRebind - (*PLAYERWINCOININFO)(nil), // 76: server.PLAYERWINCOININFO - (*GWPLAYERWINCOIN)(nil), // 77: server.GWPLAYERWINCOIN - (*GWPlayerAutoMarkTag)(nil), // 78: server.GWPlayerAutoMarkTag - (*WGInviteRobEnterCoinSceneQueue)(nil), // 79: server.WGInviteRobEnterCoinSceneQueue - (*WGGameForceStart)(nil), // 80: server.WGGameForceStart - (*ProfitControlGameCfg)(nil), // 81: server.ProfitControlGameCfg - (*ProfitControlPlatformCfg)(nil), // 82: server.ProfitControlPlatformCfg - (*WGProfitControlCorrect)(nil), // 83: server.WGProfitControlCorrect - (*GWChangeSceneEvent)(nil), // 84: server.GWChangeSceneEvent - (*PlayerIParam)(nil), // 85: server.PlayerIParam - (*PlayerSParam)(nil), // 86: server.PlayerSParam - (*PlayerCParam)(nil), // 87: server.PlayerCParam - (*PlayerMatchCoin)(nil), // 88: server.PlayerMatchCoin - (*GWPlayerMatchBilled)(nil), // 89: server.GWPlayerMatchBilled - (*GWPlayerMatchGrade)(nil), // 90: server.GWPlayerMatchGrade - (*WGPlayerQuitMatch)(nil), // 91: server.WGPlayerQuitMatch - (*WGSceneMatchBaseChange)(nil), // 92: server.WGSceneMatchBaseChange - (*SSRedirectToPlayer)(nil), // 93: server.SSRedirectToPlayer - (*WGInviteMatchRob)(nil), // 94: server.WGInviteMatchRob - (*GameInfo)(nil), // 95: server.GameInfo - (*WGGameJackpot)(nil), // 96: server.WGGameJackpot - (*BigWinHistoryInfo)(nil), // 97: server.BigWinHistoryInfo - (*WGPlayerEnterMiniGame)(nil), // 98: server.WGPlayerEnterMiniGame - (*WGPlayerLeaveMiniGame)(nil), // 99: server.WGPlayerLeaveMiniGame - (*WGPlayerLeave)(nil), // 100: server.WGPlayerLeave - (*GWPlayerLeaveMiniGame)(nil), // 101: server.GWPlayerLeaveMiniGame - (*GWDestroyMiniScene)(nil), // 102: server.GWDestroyMiniScene - (*GRDestroyScene)(nil), // 103: server.GRDestroyScene - (*RWAccountInvalid)(nil), // 104: server.RWAccountInvalid - (*WGDTRoomInfo)(nil), // 105: server.WGDTRoomInfo - (*PlayerDTCoin)(nil), // 106: server.PlayerDTCoin - (*EResult)(nil), // 107: server.EResult - (*GWDTRoomInfo)(nil), // 108: server.GWDTRoomInfo - (*WGRoomResults)(nil), // 109: server.WGRoomResults - (*GWRoomResults)(nil), // 110: server.GWRoomResults - (*GWAddSingleAdjust)(nil), // 111: server.GWAddSingleAdjust - (*WGSingleAdjust)(nil), // 112: server.WGSingleAdjust - (*WbCtrlCfg)(nil), // 113: server.WbCtrlCfg - (*WGBuyRecTimeItem)(nil), // 114: server.WGBuyRecTimeItem - (*WGUpdateSkin)(nil), // 115: server.WGUpdateSkin - (*PlayerChangeItems)(nil), // 116: server.PlayerChangeItems - nil, // 117: server.WGPlayerEnter.ItemsEntry - nil, // 118: server.WGPlayerEnter.RankScoreEntry - nil, // 119: server.GWPlayerLeave.ItemsEntry - nil, // 120: server.GWPlayerLeave.MatchRobotGradesEntry - nil, // 121: server.GWPlayerLeave.RankScoreEntry - (*DB_GameFree)(nil), // 122: server.DB_GameFree + (*CustomParam)(nil), // 11: server.CustomParam + (*MatchParam)(nil), // 12: server.MatchParam + (*WGCreateScene)(nil), // 13: server.WGCreateScene + (*WGDestroyScene)(nil), // 14: server.WGDestroyScene + (*GWDestroyScene)(nil), // 15: server.GWDestroyScene + (*RebateTask)(nil), // 16: server.RebateTask + (*WGPlayerEnter)(nil), // 17: server.WGPlayerEnter + (*WGAudienceSit)(nil), // 18: server.WGAudienceSit + (*WGPlayerReturn)(nil), // 19: server.WGPlayerReturn + (*GWPlayerLeave)(nil), // 20: server.GWPlayerLeave + (*WGPlayerDropLine)(nil), // 21: server.WGPlayerDropLine + (*WGPlayerRehold)(nil), // 22: server.WGPlayerRehold + (*GWBilledRoomCard)(nil), // 23: server.GWBilledRoomCard + (*GGPlayerSessionBind)(nil), // 24: server.GGPlayerSessionBind + (*GGPlayerSessionUnBind)(nil), // 25: server.GGPlayerSessionUnBind + (*WGDayTimeChange)(nil), // 26: server.WGDayTimeChange + (*ReplayPlayerData)(nil), // 27: server.ReplayPlayerData + (*ReplayRecord)(nil), // 28: server.ReplayRecord + (*ReplaySequene)(nil), // 29: server.ReplaySequene + (*GRReplaySequene)(nil), // 30: server.GRReplaySequene + (*WRLoginRec)(nil), // 31: server.WRLoginRec + (*WRGameDetail)(nil), // 32: server.WRGameDetail + (*WRPlayerData)(nil), // 33: server.WRPlayerData + (*WTPlayerPay)(nil), // 34: server.WTPlayerPay + (*PlayerGameRec)(nil), // 35: server.PlayerGameRec + (*GWGameRec)(nil), // 36: server.GWGameRec + (*GWSceneStart)(nil), // 37: server.GWSceneStart + (*PlayerCtx)(nil), // 38: server.PlayerCtx + (*FishRecord)(nil), // 39: server.FishRecord + (*GWFishRecord)(nil), // 40: server.GWFishRecord + (*GWSceneState)(nil), // 41: server.GWSceneState + (*WRInviteRobot)(nil), // 42: server.WRInviteRobot + (*WRInviteCreateRoom)(nil), // 43: server.WRInviteCreateRoom + (*WGAgentKickOutPlayer)(nil), // 44: server.WGAgentKickOutPlayer + (*WDDataAnalysis)(nil), // 45: server.WDDataAnalysis + (*PlayerCard)(nil), // 46: server.PlayerCard + (*GNPlayerCards)(nil), // 47: server.GNPlayerCards + (*RobotData)(nil), // 48: server.RobotData + (*GNPlayerParam)(nil), // 49: server.GNPlayerParam + (*GWRebuildScene)(nil), // 50: server.GWRebuildScene + (*WGRebindPlayerSnId)(nil), // 51: server.WGRebindPlayerSnId + (*GWPlayerFlag)(nil), // 52: server.GWPlayerFlag + (*WGHundredOp)(nil), // 53: server.WGHundredOp + (*GWNewNotice)(nil), // 54: server.GWNewNotice + (*PlayerStatics)(nil), // 55: server.PlayerStatics + (*GWPlayerStatics)(nil), // 56: server.GWPlayerStatics + (*WGResetCoinPool)(nil), // 57: server.WGResetCoinPool + (*WGSetPlayerBlackLevel)(nil), // 58: server.WGSetPlayerBlackLevel + (*GWAutoRelieveWBLevel)(nil), // 59: server.GWAutoRelieveWBLevel + (*GWScenePlayerLog)(nil), // 60: server.GWScenePlayerLog + (*GWPlayerForceLeave)(nil), // 61: server.GWPlayerForceLeave + (*PlayerData)(nil), // 62: server.PlayerData + (*GWPlayerData)(nil), // 63: server.GWPlayerData + (*PlayerWinScore)(nil), // 64: server.PlayerWinScore + (*GWPlayerWinScore)(nil), // 65: server.GWPlayerWinScore + (*WGPayerOnGameCount)(nil), // 66: server.WGPayerOnGameCount + (*GRGameFreeData)(nil), // 67: server.GRGameFreeData + (*WGSyncPlayerSafeBoxCoin)(nil), // 68: server.WGSyncPlayerSafeBoxCoin + (*WGClubMessage)(nil), // 69: server.WGClubMessage + (*DWThirdRebateMessage)(nil), // 70: server.DWThirdRebateMessage + (*DWThirdRoundMessage)(nil), // 71: server.DWThirdRoundMessage + (*WDACKThirdRebateMessage)(nil), // 72: server.WDACKThirdRebateMessage + (*GWGameStateLog)(nil), // 73: server.GWGameStateLog + (*GWGameState)(nil), // 74: server.GWGameState + (*GWGameJackList)(nil), // 75: server.GWGameJackList + (*GWGameJackCoin)(nil), // 76: server.GWGameJackCoin + (*WGNiceIdRebind)(nil), // 77: server.WGNiceIdRebind + (*PLAYERWINCOININFO)(nil), // 78: server.PLAYERWINCOININFO + (*GWPLAYERWINCOIN)(nil), // 79: server.GWPLAYERWINCOIN + (*GWPlayerAutoMarkTag)(nil), // 80: server.GWPlayerAutoMarkTag + (*WGInviteRobEnterCoinSceneQueue)(nil), // 81: server.WGInviteRobEnterCoinSceneQueue + (*WGGameForceStart)(nil), // 82: server.WGGameForceStart + (*ProfitControlGameCfg)(nil), // 83: server.ProfitControlGameCfg + (*ProfitControlPlatformCfg)(nil), // 84: server.ProfitControlPlatformCfg + (*WGProfitControlCorrect)(nil), // 85: server.WGProfitControlCorrect + (*GWChangeSceneEvent)(nil), // 86: server.GWChangeSceneEvent + (*PlayerIParam)(nil), // 87: server.PlayerIParam + (*PlayerSParam)(nil), // 88: server.PlayerSParam + (*PlayerCParam)(nil), // 89: server.PlayerCParam + (*PlayerMatchCoin)(nil), // 90: server.PlayerMatchCoin + (*GWPlayerMatchBilled)(nil), // 91: server.GWPlayerMatchBilled + (*GWPlayerMatchGrade)(nil), // 92: server.GWPlayerMatchGrade + (*WGPlayerQuitMatch)(nil), // 93: server.WGPlayerQuitMatch + (*WGSceneMatchBaseChange)(nil), // 94: server.WGSceneMatchBaseChange + (*SSRedirectToPlayer)(nil), // 95: server.SSRedirectToPlayer + (*WGInviteMatchRob)(nil), // 96: server.WGInviteMatchRob + (*GameInfo)(nil), // 97: server.GameInfo + (*WGGameJackpot)(nil), // 98: server.WGGameJackpot + (*BigWinHistoryInfo)(nil), // 99: server.BigWinHistoryInfo + (*WGPlayerEnterMiniGame)(nil), // 100: server.WGPlayerEnterMiniGame + (*WGPlayerLeaveMiniGame)(nil), // 101: server.WGPlayerLeaveMiniGame + (*WGPlayerLeave)(nil), // 102: server.WGPlayerLeave + (*GWPlayerLeaveMiniGame)(nil), // 103: server.GWPlayerLeaveMiniGame + (*GWDestroyMiniScene)(nil), // 104: server.GWDestroyMiniScene + (*GRDestroyScene)(nil), // 105: server.GRDestroyScene + (*RWAccountInvalid)(nil), // 106: server.RWAccountInvalid + (*WGDTRoomInfo)(nil), // 107: server.WGDTRoomInfo + (*PlayerDTCoin)(nil), // 108: server.PlayerDTCoin + (*EResult)(nil), // 109: server.EResult + (*GWDTRoomInfo)(nil), // 110: server.GWDTRoomInfo + (*WGRoomResults)(nil), // 111: server.WGRoomResults + (*GWRoomResults)(nil), // 112: server.GWRoomResults + (*GWAddSingleAdjust)(nil), // 113: server.GWAddSingleAdjust + (*WGSingleAdjust)(nil), // 114: server.WGSingleAdjust + (*WbCtrlCfg)(nil), // 115: server.WbCtrlCfg + (*WGBuyRecTimeItem)(nil), // 116: server.WGBuyRecTimeItem + (*WGUpdateSkin)(nil), // 117: server.WGUpdateSkin + (*PlayerChangeItems)(nil), // 118: server.PlayerChangeItems + nil, // 119: server.WGPlayerEnter.ItemsEntry + nil, // 120: server.WGPlayerEnter.RankScoreEntry + nil, // 121: server.GWPlayerLeave.ItemsEntry + nil, // 122: server.GWPlayerLeave.MatchRobotGradesEntry + nil, // 123: server.GWPlayerLeave.RankScoreEntry + (*DB_GameFree)(nil), // 124: server.DB_GameFree } var file_server_proto_depIdxs = []int32{ 1, // 0: server.SGBindGroupTag.Code:type_name -> server.SGBindGroupTag.OpCode 4, // 1: server.ServerCtrl.Params:type_name -> server.OpResultParam - 122, // 2: server.WGCreateScene.DBGameFree:type_name -> server.DB_GameFree + 124, // 2: server.WGCreateScene.DBGameFree:type_name -> server.DB_GameFree 10, // 3: server.WGCreateScene.Items:type_name -> server.Item - 85, // 4: server.WGPlayerEnter.IParams:type_name -> server.PlayerIParam - 86, // 5: server.WGPlayerEnter.SParams:type_name -> server.PlayerSParam - 87, // 6: server.WGPlayerEnter.CParams:type_name -> server.PlayerCParam - 117, // 7: server.WGPlayerEnter.Items:type_name -> server.WGPlayerEnter.ItemsEntry - 118, // 8: server.WGPlayerEnter.RankScore:type_name -> server.WGPlayerEnter.RankScoreEntry - 119, // 9: server.GWPlayerLeave.Items:type_name -> server.GWPlayerLeave.ItemsEntry - 120, // 10: server.GWPlayerLeave.MatchRobotGrades:type_name -> server.GWPlayerLeave.MatchRobotGradesEntry - 121, // 11: server.GWPlayerLeave.RankScore:type_name -> server.GWPlayerLeave.RankScoreEntry - 26, // 12: server.ReplaySequene.Sequenes:type_name -> server.ReplayRecord - 27, // 13: server.GRReplaySequene.Rec:type_name -> server.ReplaySequene - 25, // 14: server.GRReplaySequene.Datas:type_name -> server.ReplayPlayerData - 33, // 15: server.GWGameRec.Datas:type_name -> server.PlayerGameRec - 37, // 16: server.GWFishRecord.FishRecords:type_name -> server.FishRecord - 44, // 17: server.GNPlayerCards.PlayerCards:type_name -> server.PlayerCard - 46, // 18: server.GNPlayerParam.Playerdata:type_name -> server.RobotData - 53, // 19: server.GWPlayerStatics.Datas:type_name -> server.PlayerStatics - 60, // 20: server.GWPlayerData.Datas:type_name -> server.PlayerData - 62, // 21: server.GWPlayerWinScore.PlayerWinScores:type_name -> server.PlayerWinScore - 122, // 22: server.GRGameFreeData.DBGameFree:type_name -> server.DB_GameFree - 122, // 23: server.WGClubMessage.DBGameFree:type_name -> server.DB_GameFree - 76, // 24: server.GWPLAYERWINCOIN.player:type_name -> server.PLAYERWINCOININFO - 81, // 25: server.ProfitControlPlatformCfg.GameCfg:type_name -> server.ProfitControlGameCfg - 82, // 26: server.WGProfitControlCorrect.Cfg:type_name -> server.ProfitControlPlatformCfg - 88, // 27: server.GWPlayerMatchBilled.Players:type_name -> server.PlayerMatchCoin - 88, // 28: server.GWPlayerMatchGrade.Players:type_name -> server.PlayerMatchCoin - 95, // 29: server.WGGameJackpot.Info:type_name -> server.GameInfo - 106, // 30: server.GWDTRoomInfo.Players:type_name -> server.PlayerDTCoin - 107, // 31: server.GWDTRoomInfo.Results:type_name -> server.EResult - 10, // 32: server.PlayerChangeItems.Items:type_name -> server.Item - 33, // [33:33] is the sub-list for method output_type - 33, // [33:33] is the sub-list for method input_type - 33, // [33:33] is the sub-list for extension type_name - 33, // [33:33] is the sub-list for extension extendee - 0, // [0:33] is the sub-list for field type_name + 10, // 4: server.WGCreateScene.CostItems:type_name -> server.Item + 11, // 5: server.WGCreateScene.Custom:type_name -> server.CustomParam + 12, // 6: server.WGCreateScene.Match:type_name -> server.MatchParam + 87, // 7: server.WGPlayerEnter.IParams:type_name -> server.PlayerIParam + 88, // 8: server.WGPlayerEnter.SParams:type_name -> server.PlayerSParam + 89, // 9: server.WGPlayerEnter.CParams:type_name -> server.PlayerCParam + 119, // 10: server.WGPlayerEnter.Items:type_name -> server.WGPlayerEnter.ItemsEntry + 120, // 11: server.WGPlayerEnter.RankScore:type_name -> server.WGPlayerEnter.RankScoreEntry + 121, // 12: server.GWPlayerLeave.Items:type_name -> server.GWPlayerLeave.ItemsEntry + 122, // 13: server.GWPlayerLeave.MatchRobotGrades:type_name -> server.GWPlayerLeave.MatchRobotGradesEntry + 123, // 14: server.GWPlayerLeave.RankScore:type_name -> server.GWPlayerLeave.RankScoreEntry + 28, // 15: server.ReplaySequene.Sequenes:type_name -> server.ReplayRecord + 29, // 16: server.GRReplaySequene.Rec:type_name -> server.ReplaySequene + 27, // 17: server.GRReplaySequene.Datas:type_name -> server.ReplayPlayerData + 35, // 18: server.GWGameRec.Datas:type_name -> server.PlayerGameRec + 39, // 19: server.GWFishRecord.FishRecords:type_name -> server.FishRecord + 46, // 20: server.GNPlayerCards.PlayerCards:type_name -> server.PlayerCard + 48, // 21: server.GNPlayerParam.Playerdata:type_name -> server.RobotData + 55, // 22: server.GWPlayerStatics.Datas:type_name -> server.PlayerStatics + 62, // 23: server.GWPlayerData.Datas:type_name -> server.PlayerData + 64, // 24: server.GWPlayerWinScore.PlayerWinScores:type_name -> server.PlayerWinScore + 124, // 25: server.GRGameFreeData.DBGameFree:type_name -> server.DB_GameFree + 124, // 26: server.WGClubMessage.DBGameFree:type_name -> server.DB_GameFree + 78, // 27: server.GWPLAYERWINCOIN.player:type_name -> server.PLAYERWINCOININFO + 83, // 28: server.ProfitControlPlatformCfg.GameCfg:type_name -> server.ProfitControlGameCfg + 84, // 29: server.WGProfitControlCorrect.Cfg:type_name -> server.ProfitControlPlatformCfg + 90, // 30: server.GWPlayerMatchBilled.Players:type_name -> server.PlayerMatchCoin + 90, // 31: server.GWPlayerMatchGrade.Players:type_name -> server.PlayerMatchCoin + 97, // 32: server.WGGameJackpot.Info:type_name -> server.GameInfo + 108, // 33: server.GWDTRoomInfo.Players:type_name -> server.PlayerDTCoin + 109, // 34: server.GWDTRoomInfo.Results:type_name -> server.EResult + 10, // 35: server.PlayerChangeItems.Items:type_name -> server.Item + 36, // [36:36] is the sub-list for method output_type + 36, // [36:36] is the sub-list for method input_type + 36, // [36:36] is the sub-list for extension type_name + 36, // [36:36] is the sub-list for extension extendee + 0, // [0:36] is the sub-list for field type_name } func init() { file_server_proto_init() } @@ -10296,7 +10445,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGCreateScene); i { + switch v := v.(*CustomParam); i { case 0: return &v.state case 1: @@ -10308,7 +10457,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDestroyScene); i { + switch v := v.(*MatchParam); i { case 0: return &v.state case 1: @@ -10320,7 +10469,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDestroyScene); i { + switch v := v.(*WGCreateScene); i { case 0: return &v.state case 1: @@ -10332,7 +10481,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RebateTask); i { + switch v := v.(*WGDestroyScene); i { case 0: return &v.state case 1: @@ -10344,7 +10493,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerEnter); i { + switch v := v.(*GWDestroyScene); i { case 0: return &v.state case 1: @@ -10356,7 +10505,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGAudienceSit); i { + switch v := v.(*RebateTask); i { case 0: return &v.state case 1: @@ -10368,7 +10517,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerReturn); i { + switch v := v.(*WGPlayerEnter); i { case 0: return &v.state case 1: @@ -10380,7 +10529,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerLeave); i { + switch v := v.(*WGAudienceSit); i { case 0: return &v.state case 1: @@ -10392,7 +10541,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerDropLine); i { + switch v := v.(*WGPlayerReturn); i { case 0: return &v.state case 1: @@ -10404,7 +10553,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerRehold); i { + switch v := v.(*GWPlayerLeave); i { case 0: return &v.state case 1: @@ -10416,7 +10565,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWBilledRoomCard); i { + switch v := v.(*WGPlayerDropLine); i { case 0: return &v.state case 1: @@ -10428,7 +10577,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GGPlayerSessionBind); i { + switch v := v.(*WGPlayerRehold); i { case 0: return &v.state case 1: @@ -10440,7 +10589,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GGPlayerSessionUnBind); i { + switch v := v.(*GWBilledRoomCard); i { case 0: return &v.state case 1: @@ -10452,7 +10601,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDayTimeChange); i { + switch v := v.(*GGPlayerSessionBind); i { case 0: return &v.state case 1: @@ -10464,7 +10613,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayPlayerData); i { + switch v := v.(*GGPlayerSessionUnBind); i { case 0: return &v.state case 1: @@ -10476,7 +10625,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplayRecord); i { + switch v := v.(*WGDayTimeChange); i { case 0: return &v.state case 1: @@ -10488,7 +10637,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplaySequene); i { + switch v := v.(*ReplayPlayerData); i { case 0: return &v.state case 1: @@ -10500,7 +10649,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRReplaySequene); i { + switch v := v.(*ReplayRecord); i { case 0: return &v.state case 1: @@ -10512,7 +10661,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRLoginRec); i { + switch v := v.(*ReplaySequene); i { case 0: return &v.state case 1: @@ -10524,7 +10673,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRGameDetail); i { + switch v := v.(*GRReplaySequene); i { case 0: return &v.state case 1: @@ -10536,7 +10685,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRPlayerData); i { + switch v := v.(*WRLoginRec); i { case 0: return &v.state case 1: @@ -10548,7 +10697,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WTPlayerPay); i { + switch v := v.(*WRGameDetail); i { case 0: return &v.state case 1: @@ -10560,7 +10709,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerGameRec); i { + switch v := v.(*WRPlayerData); i { case 0: return &v.state case 1: @@ -10572,7 +10721,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameRec); i { + switch v := v.(*WTPlayerPay); i { case 0: return &v.state case 1: @@ -10584,7 +10733,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWSceneStart); i { + switch v := v.(*PlayerGameRec); i { case 0: return &v.state case 1: @@ -10596,7 +10745,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCtx); i { + switch v := v.(*GWGameRec); i { case 0: return &v.state case 1: @@ -10608,7 +10757,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FishRecord); i { + switch v := v.(*GWSceneStart); i { case 0: return &v.state case 1: @@ -10620,7 +10769,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWFishRecord); i { + switch v := v.(*PlayerCtx); i { case 0: return &v.state case 1: @@ -10632,7 +10781,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWSceneState); i { + switch v := v.(*FishRecord); i { case 0: return &v.state case 1: @@ -10644,7 +10793,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRInviteRobot); i { + switch v := v.(*GWFishRecord); i { case 0: return &v.state case 1: @@ -10656,7 +10805,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WRInviteCreateRoom); i { + switch v := v.(*GWSceneState); i { case 0: return &v.state case 1: @@ -10668,7 +10817,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGAgentKickOutPlayer); i { + switch v := v.(*WRInviteRobot); i { case 0: return &v.state case 1: @@ -10680,7 +10829,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WDDataAnalysis); i { + switch v := v.(*WRInviteCreateRoom); i { case 0: return &v.state case 1: @@ -10692,7 +10841,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCard); i { + switch v := v.(*WGAgentKickOutPlayer); i { case 0: return &v.state case 1: @@ -10704,7 +10853,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GNPlayerCards); i { + switch v := v.(*WDDataAnalysis); i { case 0: return &v.state case 1: @@ -10716,7 +10865,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RobotData); i { + switch v := v.(*PlayerCard); i { case 0: return &v.state case 1: @@ -10728,7 +10877,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GNPlayerParam); i { + switch v := v.(*GNPlayerCards); i { case 0: return &v.state case 1: @@ -10740,7 +10889,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWRebuildScene); i { + switch v := v.(*RobotData); i { case 0: return &v.state case 1: @@ -10752,7 +10901,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGRebindPlayerSnId); i { + switch v := v.(*GNPlayerParam); i { case 0: return &v.state case 1: @@ -10764,7 +10913,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerFlag); i { + switch v := v.(*GWRebuildScene); i { case 0: return &v.state case 1: @@ -10776,7 +10925,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGHundredOp); i { + switch v := v.(*WGRebindPlayerSnId); i { case 0: return &v.state case 1: @@ -10788,7 +10937,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWNewNotice); i { + switch v := v.(*GWPlayerFlag); i { case 0: return &v.state case 1: @@ -10800,7 +10949,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerStatics); i { + switch v := v.(*WGHundredOp); i { case 0: return &v.state case 1: @@ -10812,7 +10961,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerStatics); i { + switch v := v.(*GWNewNotice); i { case 0: return &v.state case 1: @@ -10824,7 +10973,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGResetCoinPool); i { + switch v := v.(*PlayerStatics); i { case 0: return &v.state case 1: @@ -10836,7 +10985,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSetPlayerBlackLevel); i { + switch v := v.(*GWPlayerStatics); i { case 0: return &v.state case 1: @@ -10848,7 +10997,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWAutoRelieveWBLevel); i { + switch v := v.(*WGResetCoinPool); i { case 0: return &v.state case 1: @@ -10860,7 +11009,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWScenePlayerLog); i { + switch v := v.(*WGSetPlayerBlackLevel); i { case 0: return &v.state case 1: @@ -10872,7 +11021,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerForceLeave); i { + switch v := v.(*GWAutoRelieveWBLevel); i { case 0: return &v.state case 1: @@ -10884,7 +11033,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerData); i { + switch v := v.(*GWScenePlayerLog); i { case 0: return &v.state case 1: @@ -10896,7 +11045,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerData); i { + switch v := v.(*GWPlayerForceLeave); i { case 0: return &v.state case 1: @@ -10908,7 +11057,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerWinScore); i { + switch v := v.(*PlayerData); i { case 0: return &v.state case 1: @@ -10920,7 +11069,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerWinScore); i { + switch v := v.(*GWPlayerData); i { case 0: return &v.state case 1: @@ -10932,7 +11081,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPayerOnGameCount); i { + switch v := v.(*PlayerWinScore); i { case 0: return &v.state case 1: @@ -10944,7 +11093,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRGameFreeData); i { + switch v := v.(*GWPlayerWinScore); i { case 0: return &v.state case 1: @@ -10956,7 +11105,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSyncPlayerSafeBoxCoin); i { + switch v := v.(*WGPayerOnGameCount); i { case 0: return &v.state case 1: @@ -10968,7 +11117,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGClubMessage); i { + switch v := v.(*GRGameFreeData); i { case 0: return &v.state case 1: @@ -10980,7 +11129,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DWThirdRebateMessage); i { + switch v := v.(*WGSyncPlayerSafeBoxCoin); i { case 0: return &v.state case 1: @@ -10992,7 +11141,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DWThirdRoundMessage); i { + switch v := v.(*WGClubMessage); i { case 0: return &v.state case 1: @@ -11004,7 +11153,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WDACKThirdRebateMessage); i { + switch v := v.(*DWThirdRebateMessage); i { case 0: return &v.state case 1: @@ -11016,7 +11165,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameStateLog); i { + switch v := v.(*DWThirdRoundMessage); i { case 0: return &v.state case 1: @@ -11028,7 +11177,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameState); i { + switch v := v.(*WDACKThirdRebateMessage); i { case 0: return &v.state case 1: @@ -11040,7 +11189,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameJackList); i { + switch v := v.(*GWGameStateLog); i { case 0: return &v.state case 1: @@ -11052,7 +11201,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWGameJackCoin); i { + switch v := v.(*GWGameState); i { case 0: return &v.state case 1: @@ -11064,7 +11213,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGNiceIdRebind); i { + switch v := v.(*GWGameJackList); i { case 0: return &v.state case 1: @@ -11076,7 +11225,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PLAYERWINCOININFO); i { + switch v := v.(*GWGameJackCoin); i { case 0: return &v.state case 1: @@ -11088,7 +11237,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPLAYERWINCOIN); i { + switch v := v.(*WGNiceIdRebind); i { case 0: return &v.state case 1: @@ -11100,7 +11249,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerAutoMarkTag); i { + switch v := v.(*PLAYERWINCOININFO); i { case 0: return &v.state case 1: @@ -11112,7 +11261,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGInviteRobEnterCoinSceneQueue); i { + switch v := v.(*GWPLAYERWINCOIN); i { case 0: return &v.state case 1: @@ -11124,7 +11273,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGGameForceStart); i { + switch v := v.(*GWPlayerAutoMarkTag); i { case 0: return &v.state case 1: @@ -11136,7 +11285,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProfitControlGameCfg); i { + switch v := v.(*WGInviteRobEnterCoinSceneQueue); i { case 0: return &v.state case 1: @@ -11148,7 +11297,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProfitControlPlatformCfg); i { + switch v := v.(*WGGameForceStart); i { case 0: return &v.state case 1: @@ -11160,7 +11309,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGProfitControlCorrect); i { + switch v := v.(*ProfitControlGameCfg); i { case 0: return &v.state case 1: @@ -11172,7 +11321,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWChangeSceneEvent); i { + switch v := v.(*ProfitControlPlatformCfg); i { case 0: return &v.state case 1: @@ -11184,7 +11333,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerIParam); i { + switch v := v.(*WGProfitControlCorrect); i { case 0: return &v.state case 1: @@ -11196,7 +11345,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerSParam); i { + switch v := v.(*GWChangeSceneEvent); i { case 0: return &v.state case 1: @@ -11208,7 +11357,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerCParam); i { + switch v := v.(*PlayerIParam); i { case 0: return &v.state case 1: @@ -11220,7 +11369,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerMatchCoin); i { + switch v := v.(*PlayerSParam); i { case 0: return &v.state case 1: @@ -11232,7 +11381,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerMatchBilled); i { + switch v := v.(*PlayerCParam); i { case 0: return &v.state case 1: @@ -11244,7 +11393,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerMatchGrade); i { + switch v := v.(*PlayerMatchCoin); i { case 0: return &v.state case 1: @@ -11256,7 +11405,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerQuitMatch); i { + switch v := v.(*GWPlayerMatchBilled); i { case 0: return &v.state case 1: @@ -11268,7 +11417,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSceneMatchBaseChange); i { + switch v := v.(*GWPlayerMatchGrade); i { case 0: return &v.state case 1: @@ -11280,7 +11429,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SSRedirectToPlayer); i { + switch v := v.(*WGPlayerQuitMatch); i { case 0: return &v.state case 1: @@ -11292,7 +11441,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGInviteMatchRob); i { + switch v := v.(*WGSceneMatchBaseChange); i { case 0: return &v.state case 1: @@ -11304,7 +11453,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GameInfo); i { + switch v := v.(*SSRedirectToPlayer); i { case 0: return &v.state case 1: @@ -11316,7 +11465,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGGameJackpot); i { + switch v := v.(*WGInviteMatchRob); i { case 0: return &v.state case 1: @@ -11328,7 +11477,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BigWinHistoryInfo); i { + switch v := v.(*GameInfo); i { case 0: return &v.state case 1: @@ -11340,7 +11489,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerEnterMiniGame); i { + switch v := v.(*WGGameJackpot); i { case 0: return &v.state case 1: @@ -11352,7 +11501,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerLeaveMiniGame); i { + switch v := v.(*BigWinHistoryInfo); i { case 0: return &v.state case 1: @@ -11364,7 +11513,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGPlayerLeave); i { + switch v := v.(*WGPlayerEnterMiniGame); i { case 0: return &v.state case 1: @@ -11376,7 +11525,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWPlayerLeaveMiniGame); i { + switch v := v.(*WGPlayerLeaveMiniGame); i { case 0: return &v.state case 1: @@ -11388,7 +11537,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDestroyMiniScene); i { + switch v := v.(*WGPlayerLeave); i { case 0: return &v.state case 1: @@ -11400,7 +11549,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRDestroyScene); i { + switch v := v.(*GWPlayerLeaveMiniGame); i { case 0: return &v.state case 1: @@ -11412,7 +11561,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RWAccountInvalid); i { + switch v := v.(*GWDestroyMiniScene); i { case 0: return &v.state case 1: @@ -11424,7 +11573,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGDTRoomInfo); i { + switch v := v.(*GRDestroyScene); i { case 0: return &v.state case 1: @@ -11436,7 +11585,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlayerDTCoin); i { + switch v := v.(*RWAccountInvalid); i { case 0: return &v.state case 1: @@ -11448,7 +11597,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EResult); i { + switch v := v.(*WGDTRoomInfo); i { case 0: return &v.state case 1: @@ -11460,7 +11609,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWDTRoomInfo); i { + switch v := v.(*PlayerDTCoin); i { case 0: return &v.state case 1: @@ -11472,7 +11621,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGRoomResults); i { + switch v := v.(*EResult); i { case 0: return &v.state case 1: @@ -11484,7 +11633,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWRoomResults); i { + switch v := v.(*GWDTRoomInfo); i { case 0: return &v.state case 1: @@ -11496,7 +11645,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GWAddSingleAdjust); i { + switch v := v.(*WGRoomResults); i { case 0: return &v.state case 1: @@ -11508,7 +11657,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGSingleAdjust); i { + switch v := v.(*GWRoomResults); i { case 0: return &v.state case 1: @@ -11520,7 +11669,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WbCtrlCfg); i { + switch v := v.(*GWAddSingleAdjust); i { case 0: return &v.state case 1: @@ -11532,7 +11681,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGBuyRecTimeItem); i { + switch v := v.(*WGSingleAdjust); i { case 0: return &v.state case 1: @@ -11544,7 +11693,7 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WGUpdateSkin); i { + switch v := v.(*WbCtrlCfg); i { case 0: return &v.state case 1: @@ -11556,6 +11705,30 @@ func file_server_proto_init() { } } file_server_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WGBuyRecTimeItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_server_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WGUpdateSkin); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_server_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlayerChangeItems); i { case 0: return &v.state @@ -11574,7 +11747,7 @@ func file_server_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_server_proto_rawDesc, NumEnums: 2, - NumMessages: 120, + NumMessages: 122, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/server/server.proto b/protocol/server/server.proto index 6ef0c23..d34b16f 100644 --- a/protocol/server/server.proto +++ b/protocol/server/server.proto @@ -167,32 +167,44 @@ message Item { int64 Num = 2; } +message CustomParam { + int32 RoomTypeId = 1; // 房间类型id + int32 RoomConfigId = 2; // 房间配置id + int32 CostType = 3; // 房卡场付费方式 1房主 2AA + string Password = 4; // 房间密码 + int32 Voice = 5; // 是否开启语音 1开启 2关闭 +} + +message MatchParam { + int64 MatchSortId = 1; // 比赛实例id + int32 MatchId = 2; // 比赛配置id + bool IsFinals = 3; // 是否决赛 + int32 CurrRound = 4; // 当前第几轮 + int32 CurrPlayerNum = 5; // 本轮玩家数 + int32 NextPlayerNum = 6; // 下轮最大玩家数 + int32 MatchType = 7; // 比赛类型 +} + //PACKET_WG_CREATESCENE message WGCreateScene { - int32 SceneId = 1; - int32 GameId = 2; - int32 GameMode = 3; - repeated int64 Params = 4; - int32 Creator = 5; - int32 Agentor = 6; - string ReplayCode = 7; - repeated int64 ParamsEx = 8; - int32 SceneMode = 9; - int32 HallId = 10; - string Platform = 11; - DB_GameFree DBGameFree = 12; - int32 GroupId = 13; - bool EnterAfterStart = 14; - int32 TotalOfGames = 15; - int32 Club = 16; //俱乐部Id - string ClubRoomId = 17; - int32 ClubRoomPos = 18; - int32 ClubRate = 19; - int32 BaseScore = 20; - int32 PlayerNum = 21; - bool RealCtrl = 22; - repeated int32 ChessRank = 23; - repeated Item Items = 24; // 奖励道具 + string Platform = 1; // 平台 + int32 SceneId = 2; // 房间id + int32 GameId = 3; // 游戏id + int32 GameMode = 4; // 废弃,游戏模式 + int32 SceneMode = 5; // 房间模式 + string ReplayCode = 6; // 回放码 + DB_GameFree DBGameFree = 7; // 场次配置 + int32 TotalOfGames = 8; // 总局数 + int32 PlayerNum = 9; // 最大玩家数 + bool EnterAfterStart = 10; // 是否开始后可加入 + int32 Creator = 11; // 创建者id + int32 BaseScore = 12; // 底分 + repeated Item Items = 13; // 获得道具 + repeated Item CostItems = 14; // 消耗道具 + CustomParam Custom = 15; // 房卡场参数 + MatchParam Match = 16; // 比赛场参数 + repeated int32 ChessRank = 26; // 象棋段位配置 + repeated int64 Params = 27; // 游戏参数,GameRule中定义,不要有其他用途,含义不明确 } //PACKET_WG_DESTROYSCENE diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 82b55e9..88488a4 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -98,9 +98,9 @@ func (this *CSEnterRoomHandler) Process(s *netlib.Session, packetid int, data in } // 密码是否正确 - if scene.password != "" && scene.password != msg.GetPassword() { + if scene.GetPassword() != "" && scene.GetPassword() != msg.GetPassword() { code = gamehall.OpResultCode_Game_OPRC_PasswordError - logger.Logger.Trace("CSEnterRoomHandler scene is closed") + logger.Logger.Trace("CSEnterRoomHandler password error") goto failed } @@ -153,9 +153,8 @@ func (this *CSEnterRoomHandler) Process(s *netlib.Session, packetid int, data in } skinId := int32(300001) var tm *TmMatch - if len(scene.params) > 3 { - sortId := scene.params[0] - tm = TournamentMgr.GetTm(sortId) + if scene.MatchSortId > 0 { + tm = TournamentMgr.GetTm(scene.MatchSortId) if tm != nil && tm.copyRobotGrades != nil && len(tm.copyRobotGrades) > 0 { randIndex := rand.Intn(len(tm.copyRobotGrades)) grade = tm.copyRobotGrades[randIndex].grade @@ -1260,7 +1259,7 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ return nil } // 游戏是否开启 - if cfg.GetOn() != common.On || gf.GetStatus() { + if cfg.GetOn() != common.On || !gf.GetStatus() { code = gamehall.OpResultCode_Game_OPRC_GameHadClosed send() return nil @@ -1287,22 +1286,24 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ csp := CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, msg.GetGameFreeId()) roomId := SceneMgrSingleton.GenOnePrivateSceneId() scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ - CreateId: p.SnId, - RoomId: roomId, - SceneMode: common.SceneMode_Private, - CycleTimes: 0, - TotalRound: int(msg.GetRound()), - Params: common.CopySliceInt32ToInt64(csp.dbGameRule.GetParams()), - GS: nil, - Platform: PlatformMgrSingleton.GetPlatform(p.Platform), - GF: csp.dbGameFree, - PlayerNum: msg.GetPlayerNum(), - Password: password, - Voice: int32(voice), - Channel: cfg.GetOnChannelName(), - RoomType: PlatformMgrSingleton.GetConfig(p.Platform).RoomType[cfg.GetRoomType()], - RoomConfig: cfg, - RoomCostType: int(msg.GetCostType()), + CreateId: p.SnId, + RoomId: roomId, + SceneMode: common.SceneMode_Private, + CycleTimes: 0, + TotalRound: int(msg.GetRound()), + Params: common.CopySliceInt32ToInt64(csp.dbGameRule.GetParams()), + GS: nil, + Platform: PlatformMgrSingleton.GetPlatform(p.Platform), + GF: csp.dbGameFree, + PlayerNum: msg.GetPlayerNum(), + Channel: cfg.GetOnChannelName(), + CustomParam: &server.CustomParam{ + RoomTypeId: cfg.GetRoomType(), + RoomConfigId: cfg.GetId(), + CostType: int32(costType), + Password: password, + Voice: int32(voice), + }, }) if scene == nil { @@ -1364,7 +1365,7 @@ func CSGetPrivateRoomListHandler(s *netlib.Session, packetId int, data interface }) for _, v := range scenes { needPassword := 0 - if v.password != "" { + if v.GetPassword() != "" { needPassword = 1 } var players []*gamehall.PrivatePlayerInfo @@ -1378,8 +1379,8 @@ func CSGetPrivateRoomListHandler(s *netlib.Session, packetId int, data interface d := &gamehall.PrivateRoomInfo{ GameFreeId: v.dbGameFree.GetId(), GameId: v.dbGameFree.GetGameId(), - RoomTypeId: v.RoomType.GetId(), - RoomConfigId: v.RoomConfig.GetId(), + RoomTypeId: v.GetRoomTypeId(), + RoomConfigId: v.GetRoomConfigId(), RoomId: int32(v.sceneId), NeedPassword: int32(needPassword), CurrRound: v.currRound, diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index 6481acb..bf0779f 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -58,7 +58,7 @@ func init() { case scene.IsMatchScene(): if !MatchSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { logger.Logger.Warnf("GWPlayerLeave snid:%v sceneid:%v gameid:%v modeid:%v matchid:%v [matchscene]", - p.SnId, scene.sceneId, scene.gameId, scene.gameMode, scene.matchId) + p.SnId, scene.sceneId, scene.gameId, scene.gameMode, scene.MatchSortId) } else { //结算积分 if !p.IsRob { @@ -366,7 +366,7 @@ func init() { case scene.IsMatchScene(): if !MatchSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason())) { logger.Logger.Warnf("GWPlayerLeave snid:%v sceneid:%v gameid:%v modeid:%v matchid:%v [matchscene]", - p.SnId, scene.sceneId, scene.gameId, scene.gameMode, scene.matchId) + p.SnId, scene.sceneId, scene.gameId, scene.gameMode, scene.MatchSortId) } default: scene.PlayerLeave(p, int(msg.GetReason())) @@ -538,7 +538,7 @@ func init() { if scene != nil { scene.State = msg.GetState() scene.StateSec = msg.GetSec() - scene.BankerListNum = msg.GetBankerListNum() + //scene.BankerListNum = msg.GetBankerListNum() if scene.State == scene.sp.GetBetState() { scene.StateTs = msg.GetTs() leftTime := int64(scene.StateSec) - (time.Now().Unix() - scene.StateTs) diff --git a/worldsrv/action_tournament.go b/worldsrv/action_tournament.go index 4da5495..64d889a 100644 --- a/worldsrv/action_tournament.go +++ b/worldsrv/action_tournament.go @@ -184,7 +184,7 @@ func CSRoomList(s *netlib.Session, packetId int, data interface{}, sid int64) er audience := msg.GetTp() == 1 scenes := TournamentMgr.GetTmRoom(p.Platform, 0, p.LastChannel, audience, msg.GetId()) for _, v := range scenes { - tm := TournamentMgr.GetTm(v.matchId) + tm := TournamentMgr.GetTm(v.MatchSortId) if tm == nil { continue } diff --git a/worldsrv/gamesess.go b/worldsrv/gamesess.go index d7ad029..5ee4209 100644 --- a/worldsrv/gamesess.go +++ b/worldsrv/gamesess.go @@ -151,45 +151,55 @@ func (this *GameSession) OnStateOff() { this.Send(int(server_proto.SSPacketID_PACKET_WG_SERVER_STATE), pack) } -func (this *GameSession) AddScene(s *Scene) { - this.scenes[s.sceneId] = s +type AddSceneParam struct { + S *Scene +} + +func (this *GameSession) AddScene(args *AddSceneParam) { + this.scenes[args.S.sceneId] = args.S //send msg msg := &server_proto.WGCreateScene{ - SceneId: proto.Int(s.sceneId), - GameId: proto.Int(s.gameId), - GameMode: proto.Int(s.gameMode), - SceneMode: proto.Int(s.sceneMode), - Params: s.params, - Creator: proto.Int32(s.creator), - HallId: proto.Int32(s.hallId), - ReplayCode: proto.String(s.replayCode), - GroupId: proto.Int32(s.groupId), - TotalOfGames: proto.Int32(s.totalRound), - BaseScore: proto.Int32(s.BaseScore), - PlayerNum: proto.Int(s.playerNum), - DBGameFree: s.dbGameFree, - Platform: s.limitPlatform.IdStr, + Platform: args.S.limitPlatform.IdStr, + SceneId: int32(args.S.sceneId), + GameId: int32(args.S.gameId), + GameMode: int32(args.S.gameMode), + SceneMode: int32(args.S.sceneMode), + ReplayCode: args.S.replayCode, + DBGameFree: args.S.dbGameFree, + TotalOfGames: args.S.totalRound, + PlayerNum: int32(args.S.playerNum), + Creator: args.S.creator, + BaseScore: args.S.BaseScore, + Custom: args.S.CustomParam, + Match: args.S.MatchParam, + Params: args.S.params, } - if s.RoomConfig != nil { - for _, v := range s.RoomConfig.GetCost() { - msg.Items = append(msg.Items, &server_proto.Item{ - Id: v.GetItemId(), - Num: v.GetItemNum(), - }) + if args.S.GetRoomTypeId() != 0 { + cfg := PlatformMgrSingleton.GetConfig(args.S.limitPlatform.IdStr).RoomConfig[args.S.GetRoomTypeId()] + if cfg != nil { + for _, v := range cfg.GetReward() { + msg.Items = append(msg.Items, &server_proto.Item{ + Id: v.GetItemId(), + Num: v.GetItemNum(), + }) + } + for _, v := range cfg.GetCost() { + msg.CostItems = append(msg.CostItems, &server_proto.Item{ + Id: v.GetItemId(), + Num: v.GetItemNum(), + }) + } } } - if s.IsCoinScene() { - if sp, ok := s.sp.(*ScenePolicyData); ok { - msg.EnterAfterStart = proto.Bool(sp.EnterAfterStart) - } + if sp, ok := args.S.sp.(*ScenePolicyData); ok { + msg.EnterAfterStart = proto.Bool(sp.EnterAfterStart) } // 象棋游戏添加段位配置 - if s.dbGameFree != nil && s.dbGameFree.GameDif == common.GameDifChess { - msg.ChessRank = ChessRankMgrSington.GetChessRankArr(s.limitPlatform.Name, int32(s.gameId)) + if args.S.dbGameFree != nil && srvdata.GameFreeMgr.IsGameDif(int32(args.S.gameId), common.GameDifChess) { + msg.ChessRank = ChessRankMgrSington.GetChessRankArr(args.S.limitPlatform.Name, int32(args.S.gameId)) } - proto.SetDefaults(msg) this.Send(int(server_proto.SSPacketID_PACKET_WG_CREATESCENE), msg) - logger.Logger.Trace("WGCreateScene:", msg) + logger.Logger.Tracef("WGCreateScene: %v", msg) } func (this *GameSession) DelScene(s *Scene) { diff --git a/worldsrv/matchscenemgr.go b/worldsrv/matchscenemgr.go index c2c38cf..11b6528 100644 --- a/worldsrv/matchscenemgr.go +++ b/worldsrv/matchscenemgr.go @@ -1,6 +1,7 @@ package main import ( + "mongo.games.com/game/srvdata" "mongo.games.com/goserver/core/logger" "mongo.games.com/game/common" @@ -46,18 +47,24 @@ func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scen nextNeed = tm.gmd.MatchPromotion[round] } } - // 建房参数 - // 比赛唯一索引,是否决赛,第几轮,本轮总人数,下一轮总人数,赛制类型 - params := []int64{tm.SortId, int64(finals), int64(round), int64(curPlayerNum), int64(nextNeed), int64(tm.gmd.MatchType)} + rule := srvdata.PBDB_GameRuleMgr.GetData(tm.dbGameFree.GetGameRule()) scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ RoomId: sceneId, SceneMode: common.SceneMode_Match, - Params: params, + Params: common.CopySliceInt32ToInt64(rule.GetParams()), Platform: limitPlatform, GF: tm.dbGameFree, + MatchParam: &server.MatchParam{ + MatchId: tm.TMId, + MatchSortId: tm.SortId, + IsFinals: finals == 1, + CurrRound: round, + CurrPlayerNum: curPlayerNum, + NextPlayerNum: nextNeed, + MatchType: tm.gmd.MatchType, + }, }) if scene != nil { - scene.matchId = tm.SortId return scene } return nil @@ -153,7 +160,7 @@ func (ms *MatchSceneMgr) PlayerLeave(p *Player, reason int) bool { if p == nil || p.scene == nil { return true } - if p.scene.matchId == 0 { + if p.scene.MatchSortId == 0 { return true } p.scene.PlayerLeave(p, reason) @@ -182,7 +189,7 @@ func (ms *MatchSceneMgr) AudienceEnter(p *Player, id int32, roomId int, exclude func (ms *MatchSceneMgr) MatchStop(tm *TmMatch) { if SceneMgrSingleton.scenes != nil && tm != nil { for _, scene := range SceneMgrSingleton.scenes { - if scene.IsMatchScene() && scene.matchId == tm.SortId { + if scene.IsMatchScene() && scene.MatchSortId == tm.SortId { scene.SendGameDestroy(false) } } diff --git a/worldsrv/scene.go b/worldsrv/scene.go index d4af7f6..de9b098 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -18,7 +18,6 @@ import ( "mongo.games.com/game/proto" hallproto "mongo.games.com/game/protocol/gamehall" serverproto "mongo.games.com/game/protocol/server" - webapiproto "mongo.games.com/game/protocol/webapi" "mongo.games.com/game/srvdata" ) @@ -39,73 +38,51 @@ type PlayerGameCtx struct { totalConvertibleFlow int64 //进房时玩家身上的总流水 } -// MatchParams 比赛场配置 -type MatchParams struct { - MatchId int64 // 比赛场id -} - -// CustomParams 房卡场配置 -type CustomParams struct { - RoomType *webapiproto.RoomType // 房卡场房间类型id - RoomConfig *webapiproto.RoomConfig // 房卡场房间配置id - RoomCostType int // 房卡收费方式 -} - // Scene 场景(房间) // todo 结构优化 type Scene struct { - sceneId int // 场景id - gameId int // 游戏id - gameMode int // 游戏模式(玩法) - sceneMode int // 房间模式,参考common.SceneMode_XXX - params []int64 // 场景参数 - playerNum int // 房间最大人数 - robotNum int // 机器人数量 - robotLimit int // 最大限制机器人数量 - preInviteRobNum int // 准备邀请机器人的数量 - creator int32 // 创建者账号id - replayCode string // 回放码 - currRound int32 // 当前第几轮 - totalRound int32 // 总共几轮,小于等于0表示无限轮 - cycleTimes int32 // 循环次数 - deleting bool // 正在删除 - starting bool // 正在开始 - closed bool // 房间已关闭 - force bool // 强制删除 - players map[int32]*Player // 玩家 - audiences map[int32]*Player // 观众 - seats [9]*Player // 座位 - gameSess *GameSession // 所在gameserver - sp ScenePolicy // 场景上的一些业务策略 - createTime time.Time // 创建时间 - lastTime time.Time // 最后活跃时间 - startTime time.Time // 开始时间 - applyTimes map[int32]int32 // 申请坐下次数 - limitPlatform *Platform // 限制平台 - groupId int32 // 组id - hallId int32 // 厅id - dbGameFree *serverproto.DB_GameFree // 场次配置 - gameCtx map[int32]*PlayerGameCtx // 进入房间的环境 - BaseScore int32 // 游戏底分,优先级,创建参数>本地配置>场次配置 - SceneState int32 // 房间当前状态 - State int32 // 当前游戏状态,后期放到ScenePolicy里去处理 - StateTs int64 // 切换到当前状态的时间 - StateSec int32 // 押注状态的秒数 - password string // 密码 - channel []string // 渠道,房卡场有渠道限制 - voice int32 // 是否开启语音 1开启 - - matchId int64 // 比赛场id - fishing int32 // 渔场的鱼潮状态 - GameLog []int32 // 游戏服务器同步的录单 - BankerListNum int32 // 庄家列表数量 - matchParams []int32 // 比赛参数 - matchState int // 比赛状态 - - CustomParams // 房卡场参数 - - csp *CoinScenePool // 所在场景池 - hp *HundredSceneMgr // 百人场房间池 + sceneId int // 场景id + gameId int // 游戏id + gameMode int // 游戏模式(玩法) + sceneMode int // 房间模式,参考common.SceneMode_XXX + params []int64 // 场景参数 + playerNum int // 房间最大人数 + robotNum int // 机器人数量 + robotLimit int // 最大限制机器人数量 + preInviteRobNum int // 准备邀请机器人的数量 + creator int32 // 创建者账号id + replayCode string // 回放码 + currRound int32 // 当前第几轮 + totalRound int32 // 总共几轮,小于等于0表示无限轮 + cycleTimes int32 // 循环次数 + deleting bool // 正在删除 + starting bool // 正在开始 + closed bool // 房间已关闭 + force bool // 强制删除 + players map[int32]*Player // 玩家 + audiences map[int32]*Player // 观众 + seats [9]*Player // 座位 + gameSess *GameSession // 所在gameserver + sp ScenePolicy // 场景上的一些业务策略 + createTime time.Time // 创建时间 + lastTime time.Time // 最后活跃时间 + startTime time.Time // 开始时间 + applyTimes map[int32]int32 // 申请坐下次数 + limitPlatform *Platform // 限制平台 + groupId int32 // 组id + hallId int32 // 厅id + dbGameFree *serverproto.DB_GameFree // 场次配置 + gameCtx map[int32]*PlayerGameCtx // 进入房间的环境 + BaseScore int32 // 游戏底分,优先级,创建参数>本地配置>场次配置 + SceneState int32 // 房间当前状态 + State int32 // 当前游戏状态,后期放到ScenePolicy里去处理 + StateTs int64 // 切换到当前状态的时间 + StateSec int32 // 押注状态的秒数 + Channel []string // 客户端类型 + *serverproto.CustomParam // 房卡场参数 + *serverproto.MatchParam // 比赛场参数 + csp *CoinScenePool // 所在场景池 + hp *HundredSceneMgr // 百人场房间池 } // NewScene 创建房间 @@ -141,15 +118,10 @@ func NewScene(args *CreateSceneParam) *Scene { dbGameFree: args.GF, currRound: 0, totalRound: int32(args.TotalRound), - password: args.Password, - voice: args.Voice, - channel: args.Channel, BaseScore: args.BaseScore, - CustomParams: CustomParams{ - RoomType: args.RoomType, - RoomConfig: args.RoomConfig, - RoomCostType: args.RoomCostType, - }, + Channel: args.Channel, + CustomParam: args.CustomParam, + MatchParam: args.MatchParam, } // 最大房间人数 if s.playerNum <= 0 { @@ -165,9 +137,6 @@ func NewScene(args *CreateSceneParam) *Scene { if s.cycleTimes <= 0 { s.cycleTimes = 1 } - if s.totalRound <= 0 { - s.totalRound = 1 - } s.lastTime = s.createTime s.replayCode = SceneMgrSingleton.AllocReplayCode() @@ -837,15 +806,15 @@ func (this *Scene) GetSceneName() string { func (this *Scene) RandRobotCnt() { if this.dbGameFree != nil { - numrng := this.dbGameFree.GetRobotNumRng() - if len(numrng) >= 2 { - if numrng[1] == numrng[0] { - this.robotLimit = int(numrng[0]) + number := this.dbGameFree.GetRobotNumRng() + if len(number) >= 2 { + if number[1] == number[0] { + this.robotLimit = int(number[0]) } else { - if numrng[1] < numrng[0] { - numrng[1], numrng[0] = numrng[0], numrng[1] + if number[1] < number[0] { + number[1], number[0] = number[0], number[1] } - this.robotLimit = int(numrng[1]) //int(numrng[0] + rand.Int31n(numrng[1]-numrng[0]) + 1) + this.robotLimit = int(number[1]) //int(number[0] + rand.Int31n(number[1]-number[0]) + 1) } } return @@ -973,10 +942,10 @@ func (this *Scene) TryForceDeleteMatchInfo() { if len(this.players) == 0 { return } - if this.matchId == 0 { + if this.MatchSortId == 0 { return } - if players, exist := TournamentMgr.players[this.matchId]; exist { + if players, exist := TournamentMgr.players[this.MatchSortId]; exist { for _, player := range this.players { if player != nil && !player.IsRob { if TournamentMgr.IsMatching(player.SnId) { @@ -990,8 +959,8 @@ func (this *Scene) TryForceDeleteMatchInfo() { // CanAudience 是否允许观战 func (this *Scene) CanAudience() bool { switch { - case this.matchId > 0: // 比赛场 - tm := TournamentMgr.GetTm(this.matchId) + case this.GetMatchSortId() > 0: // 比赛场 + tm := TournamentMgr.GetTm(this.GetMatchSortId()) if tm != nil { return tm.gmd.GetAudienceSwitch() == 1 } diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 2453f51..e381210 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -155,7 +155,7 @@ func (m *SceneMgr) GetScenesByGameFreeId(gameFreeId int32) []*Scene { func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene { var scenes []*Scene for _, value := range m.scenes { - if value.matchId == sortId { + if value.MatchSortId == sortId { s := m.GetScene(value.sceneId) if s != nil { scenes = append(scenes, value) @@ -223,7 +223,7 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode isContinue := false if snId != 0 { for _, p := range s.players { - if p.SnId == int32(snId) { + if p.SnId == snId { isContinue = true break } @@ -347,7 +347,7 @@ func (m *SceneMgr) FindRoomList(args *FindRoomParam) []*Scene { if len(args.Channel) > 0 { has := false for _, vv := range args.Channel { - if slices.Contains(v.channel, vv) { + if slices.Contains(v.Channel, vv) { has = true break } @@ -367,23 +367,20 @@ func (m *SceneMgr) FindRoomList(args *FindRoomParam) []*Scene { } type CreateSceneParam struct { - CreateId int32 // 创建者id - RoomId int // 房间id - SceneMode int // 公共,私人,赛事 - CycleTimes int // 循环次数 - TotalRound int // 总轮数 - Params []int64 // 房间参数 - GS *GameSession - Platform *Platform - GF *serverproto.DB_GameFree - PlayerNum int32 // 玩家最大数量 - Password string - Voice int32 // 1开启 - Channel []string - RoomType *webapiproto.RoomType - RoomConfig *webapiproto.RoomConfig - BaseScore int32 - RoomCostType int + CreateId int32 // 创建者id + RoomId int // 房间id + SceneMode int // 公共,私人,赛事 + CycleTimes int // 循环次数 + TotalRound int // 总轮数 + Params []int64 // 房间参数 + GS *GameSession // 游戏服务 + Platform *Platform // 所在平台 + GF *serverproto.DB_GameFree // 场次配置 + PlayerNum int32 // 玩家最大数量 + BaseScore int32 // 底分 + Channel []string // 客户端类型,允许查看的客户端类型 + *serverproto.CustomParam // 房卡场参数 + *serverproto.MatchParam // 比赛场参数 } // CreateScene 创建房间 @@ -409,7 +406,9 @@ func (m *SceneMgr) CreateScene(args *CreateSceneParam) *Scene { } m.scenes[args.RoomId] = s // 添加到游戏服记录中 - args.GS.AddScene(s) + args.GS.AddScene(&AddSceneParam{ + S: s, + }) logger.Logger.Infof("SceneMgr NewScene Platform:%v %+v", args.Platform.IdStr, args) // 创建水池 @@ -443,7 +442,7 @@ func (m *SceneMgr) DestroyScene(sceneId int, isCompleted bool) { s.gameSess.DelScene(s) s.OnClose() delete(m.scenes, s.sceneId) - delete(m.password, s.password) + delete(m.password, s.GetPassword()) logger.Logger.Infof("(this *SceneMgr) DestroyScene, SceneId=%v", sceneId) } diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 130ab55..75f4cc6 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -117,11 +117,18 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba } func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player) bool { + if roomConfig == nil { + return false + } return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*model.Item) {}) } func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { - return spd.costEnough(s.RoomCostType, s.playerNum, s.RoomConfig, p, func(items []*model.Item) { + roomConfig := PlatformMgrSingleton.GetConfig(p.Platform).RoomConfig[s.GetRoomConfigId()] + if roomConfig == nil { + return false + } + return spd.costEnough(int(roomConfig.GetCostType()), s.playerNum, roomConfig, p, func(items []*model.Item) { BagMgrSingleton.AddItemsV2(&model.AddItemParam{ P: p.PlayerData, Change: items, @@ -130,7 +137,7 @@ func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { Remark: "竞技馆进房费用", GameId: int64(s.gameId), GameFreeId: int64(s.dbGameFree.GetId()), - RoomConfigId: s.RoomConfig.GetId(), + RoomConfigId: roomConfig.GetId(), }) }) } From 9ea57766a41fe594c5c0d0b5c5d898b17e085073 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 28 Aug 2024 18:18:36 +0800 Subject: [PATCH 44/63] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E5=9C=BA=E5=AF=B9?= =?UTF-8?q?=E5=B1=80=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/mq/c_customlog.go | 36 +++++++++++++ dbproxy/svc/l_customlog.go | 25 +++++++++ dbproxy/svc/l_gamedetailed.go | 2 + dbproxy/svc/l_gameplayerlistlog.go | 2 + gamesrv/base/logchannel.go | 1 + gamesrv/base/scene.go | 8 +-- gamesrv/tienlen/scenedata_tienlen.go | 74 ++++++++++++++++++++++++-- gamesrv/tienlen/scenepolicy_tienlen.go | 12 +++-- model/customlog.go | 40 ++++++++++++++ model/gamedetailedlog.go | 4 +- model/gameplayerlistlog.go | 9 ++-- mq/keyconf.go | 1 + worldsrv/scenemgr.go | 11 +++- worldsrv/trascate_webapi.go | 3 +- 14 files changed, 209 insertions(+), 19 deletions(-) create mode 100644 dbproxy/mq/c_customlog.go create mode 100644 dbproxy/svc/l_customlog.go create mode 100644 model/customlog.go diff --git a/dbproxy/mq/c_customlog.go b/dbproxy/mq/c_customlog.go new file mode 100644 index 0000000..4ed99c3 --- /dev/null +++ b/dbproxy/mq/c_customlog.go @@ -0,0 +1,36 @@ +package mq + +import ( + "encoding/json" + + "mongo.games.com/goserver/core/broker" + "mongo.games.com/goserver/core/broker/rabbitmq" + + "mongo.games.com/game/dbproxy/svc" + "mongo.games.com/game/model" + "mongo.games.com/game/mq" +) + +func init() { + mq.RegisterSubscriber(mq.DBCustomLog, func(e broker.Event) (err error) { + msg := e.Message() + if msg != nil { + defer func() { + e.Ack() + }() + + var log model.CustomLog + err = json.Unmarshal(msg.Body, &log) + if err != nil { + return + } + + c := svc.DbCustomLogCollection(log.Platform) + if c != nil { + err = c.Insert(log) + } + return + } + return nil + }, broker.Queue(mq.DBCustomLog), broker.DisableAutoAck(), rabbitmq.DurableQueue()) +} diff --git a/dbproxy/svc/l_customlog.go b/dbproxy/svc/l_customlog.go new file mode 100644 index 0000000..d203cf2 --- /dev/null +++ b/dbproxy/svc/l_customlog.go @@ -0,0 +1,25 @@ +package svc + +import ( + "github.com/globalsign/mgo" + "mongo.games.com/game/dbproxy/mongo" + "mongo.games.com/game/model" +) + +func DbCustomLogCollection(plt string) *mongo.Collection { + s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, model.DbCustomLogDBName) + if s != nil { + d, first := s.DB().C(model.DbCustomLogCollName) + if first { + d.EnsureIndex(mgo.Index{Key: []string{"cycleid"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"-startts", "cycleid"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"roomconfigid"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"roomid"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"startts"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"endts"}, Background: true, Sparse: true}) + d.EnsureIndex(mgo.Index{Key: []string{"-endts"}, Background: true, Sparse: true}) + } + return d + } + return nil +} diff --git a/dbproxy/svc/l_gamedetailed.go b/dbproxy/svc/l_gamedetailed.go index 7ed14c7..2d459f8 100644 --- a/dbproxy/svc/l_gamedetailed.go +++ b/dbproxy/svc/l_gamedetailed.go @@ -28,6 +28,8 @@ func GameDetailedLogsCollection(plt string) *mongo.Collection { c_gamedetailed.EnsureIndex(mgo.Index{Key: []string{"matchid"}, Background: true, Sparse: true}) c_gamedetailed.EnsureIndex(mgo.Index{Key: []string{"-ts", "gameid"}, Background: true, Sparse: true}) c_gamedetailed.EnsureIndex(mgo.Index{Key: []string{"-ts", "gamefreeid"}, Background: true, Sparse: true}) + c_gamedetailed.EnsureIndex(mgo.Index{Key: []string{"-ts", "cycleid"}, Background: true, Sparse: true}) + c_gamedetailed.EnsureIndex(mgo.Index{Key: []string{"cycleid"}, Background: true, Sparse: true}) } return c_gamedetailed } diff --git a/dbproxy/svc/l_gameplayerlistlog.go b/dbproxy/svc/l_gameplayerlistlog.go index e897ad8..fcb8d74 100644 --- a/dbproxy/svc/l_gameplayerlistlog.go +++ b/dbproxy/svc/l_gameplayerlistlog.go @@ -41,6 +41,8 @@ func GamePlayerListLogsCollection(plt string) *mongo.Collection { c_gameplayerlistlog.EnsureIndex(mgo.Index{Key: []string{"-ts", "gamefreeid"}, Background: true, Sparse: true}) c_gameplayerlistlog.EnsureIndex(mgo.Index{Key: []string{"-ts", "snid", "gameid"}, Background: true, Sparse: true}) c_gameplayerlistlog.EnsureIndex(mgo.Index{Key: []string{"-ts", "snid", "gamefreeid"}, Background: true, Sparse: true}) + c_gameplayerlistlog.EnsureIndex(mgo.Index{Key: []string{"-ts", "cycleid"}, Background: true, Sparse: true}) + c_gameplayerlistlog.EnsureIndex(mgo.Index{Key: []string{"cycleid"}, Background: true, Sparse: true}) } return c_gameplayerlistlog } diff --git a/gamesrv/base/logchannel.go b/gamesrv/base/logchannel.go index b62cd45..4f77a44 100644 --- a/gamesrv/base/logchannel.go +++ b/gamesrv/base/logchannel.go @@ -54,4 +54,5 @@ func init() { LogChannelSingleton.RegisterLogCName(model.GamePlayerListLogCollName, &model.GamePlayerListLog{}) LogChannelSingleton.RegisterLogCName(model.FriendRecordLogCollName, &model.FriendRecord{}) LogChannelSingleton.RegisterLogCName(model.ItemLogCollName, &model.ItemLog{}) + LogChannelSingleton.RegisterLogCName(mq.DBCustomLog, &model.CustomLog{}) } diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 2d7ec35..4ac97eb 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -1441,6 +1441,7 @@ type GameDetailedParam struct { Trend20Lately string //最近20局开奖结果 CtrlType int PlayerPool map[int]int + CycleId string } // 保存详细游戏日志 @@ -1461,7 +1462,7 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga this.GetDBGameFree().GetGameMode(), this.GetDBGameFree().Id, int32(len(this.Players)), int32(time.Now().Unix()-this.GameNowTime.Unix()), baseScore, gamedetailednote, p.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[int(this.GameId)], trend20Lately, - gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool) + gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool, gameDetailedParam.CycleId) if log != nil { if this.IsMatchScene() { log.MatchId = this.GetMatch().GetMatchSortId() @@ -1478,7 +1479,7 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga this.GetDBGameFree().GetGameMode(), this.GetDBGameFree().Id, int32(len(this.Players)), int32(time.Now().Unix()-this.GameNowTime.Unix()), baseScore, gamedetailednote, this.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[int(this.GameId)], trend20Lately, - gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool) + gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool, gameDetailedParam.CycleId) if log != nil { if this.IsMatchScene() { log.MatchId = this.GetMatch().GetMatchSortId() @@ -1516,6 +1517,7 @@ type SaveGamePlayerListLogParam struct { WinSmallGame int64 //拉霸专用 小游戏奖励 WinTotal int64 //拉霸专用 本局输赢 PlayerName string //玩家名字 + CycleId string // 房卡场对局id } func GetSaveGamePlayerListLogParam(platform, channel, promoter, packageTag, logid string, @@ -1594,7 +1596,7 @@ func (this *Scene) SaveGamePlayerListLog(snid int32, param *SaveGamePlayerListLo this.GameId, baseScore, this.SceneId, int32(this.GetGameMode()), this.GetGameFreeId(), param.TotalIn, param.TotalOut, this.ClubId, this.RoomId, param.TaxCoin, param.ClubPumpCoin, roomType, param.BetAmount, param.WinAmountNoAnyTax, this.KeyGameId, Name, this.GetDBGameFree().GetGameClass(), - param.IsFirstGame, this.GetMatch().GetMatchSortId(), int64(this.GetMatch().GetMatchType()), param.IsFree, param.WinSmallGame, param.WinTotal) + param.IsFirstGame, this.GetMatch().GetMatchSortId(), int64(this.GetMatch().GetMatchType()), param.IsFree, param.WinSmallGame, param.WinTotal, param.CycleId) if log != nil { LogChannelSingleton.WriteLog(log) } diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index 6b8c890..f5c8548 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -27,6 +27,11 @@ type BilledInfo struct { Score int64 // 结算后积分 } +type Item struct { + Id int32 + Num int64 +} + // 房间上的额外数据 type TienLenSceneData struct { *base.Scene //场景 @@ -65,14 +70,17 @@ type TienLenSceneData struct { BilledList map[int32]*[]*BilledInfo // 多轮结算记录, 玩家id:每局结算记录 RoundEndTime []int64 // 每局结束时间 RoundLogId []string // 每局牌局记录id + CustomLogSave bool // 是否已经保存日志 + PlayerAward map[int32]*[]*model.Item // 房卡场最终奖励 } func NewTienLenSceneData(s *base.Scene) *TienLenSceneData { sceneEx := &TienLenSceneData{ - Scene: s, - poker: rule.NewPoker(), - players: make(map[int32]*TienLenPlayerData), - BilledList: map[int32]*[]*BilledInfo{}, + Scene: s, + poker: rule.NewPoker(), + players: make(map[int32]*TienLenPlayerData), + BilledList: map[int32]*[]*BilledInfo{}, + PlayerAward: make(map[int32]*[]*model.Item), } sceneEx.Clear() return sceneEx @@ -282,6 +290,7 @@ func (this *TienLenSceneData) OnPlayerLeave(p *base.Player, reason int) { } func (this *TienLenSceneData) SceneDestroy(force bool) { + this.SaveCustomLog() //销毁房间 this.Scene.Destroy(force) } @@ -2093,3 +2102,60 @@ func (this *TienLenSceneData) SendFirstGiveTimeItem(p *base.Player) { p.SendToClient(int(tienlen.TienLenPacketID_PACKET_SCTienLenFirstGiveItemItem), pack) } } + +// SaveCustomLog 保存竞技馆对局记录 +func (this *TienLenSceneData) SaveCustomLog() { + if this.CustomLogSave || !this.IsCustom() { + return + } + this.CustomLogSave = true + state := int32(0) + if len(this.RoundEndTime) < int(this.TotalOfGames) { + state = 1 + } + log := &model.CustomLog{ + CycleId: this.CycleID, + RoomConfigId: this.GetCustom().GetRoomConfigId(), + RoomId: this.SceneId, + StartTs: this.GameStartTime.Unix(), + EndTs: time.Now().Unix(), + State: state, + GameFreeId: this.GetGameFreeId(), + TotalRound: this.TotalOfGames, + Password: this.GetCustom().GetPassword(), + CostType: this.GetCustom().GetCostType(), + Voice: this.GetCustom().GetVoice(), + } + for snid := range this.BilledList { + var items []*model.Item + if this.PlayerAward[snid] != nil { + items = *this.PlayerAward[snid] + } + log.SnId = append(log.SnId, model.PlayerInfo{ + SnId: snid, + Awards: items, + }) + } + + sort.Slice(log.SnId, func(i, j int) bool { + p1 := base.PlayerMgrSington.GetPlayerBySnId(log.SnId[i].SnId) + p2 := base.PlayerMgrSington.GetPlayerBySnId(log.SnId[j].SnId) + return p1.GetCoin() > p2.GetCoin() + }) + + for k, v := range this.RoundEndTime { + score := make([]int64, len(this.BilledList)) + for kk, vv := range log.SnId { + if k < len(*this.BilledList[vv.SnId]) { + score[kk] = (*this.BilledList[vv.SnId])[k].ChangeScore + } + } + log.List = append(log.List, model.RoundInfo{ + Round: int32(k + 1), + Ts: v, + Score: score, + LogId: this.RoundLogId[k], + }) + } + base.LogChannelSingleton.WriteLog(log) +} diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 5b8ce7b..1117595 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -2617,11 +2617,13 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { GameId: int64(sceneEx.GameId), GameFreeId: int64(sceneEx.GetGameFreeId()), }) + sceneEx.PlayerAward[p.SnId] = &items } } } s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenCycleBilled), packBilled, 0) s.SyncSceneState(common.SceneStateEnd) + sceneEx.SaveCustomLog() } } @@ -2673,10 +2675,11 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { }) // 保存玩家游戏记录 - sceneEx.SaveGamePlayerListLog(o_player.UserId, - base.GetSaveGamePlayerListLogParam(o_player.Platform, o_player.Channel, o_player.Promoter, - o_player.PackageTag, sceneEx.recordId, o_player.InviterId, totalin, totalout, o_player.BillTaxCoin, - 0, 0, o_player.GainCoin+o_player.BombCoin, validBet, validFlow, o_player.IsFirst, o_player.IsLeave)) + param := base.GetSaveGamePlayerListLogParam(o_player.Platform, o_player.Channel, o_player.Promoter, + o_player.PackageTag, sceneEx.recordId, o_player.InviterId, totalin, totalout, o_player.BillTaxCoin, + 0, 0, o_player.GainCoin+o_player.BombCoin, validBet, validFlow, o_player.IsFirst, o_player.IsLeave) + param.CycleId = sceneEx.CycleID + sceneEx.SaveGamePlayerListLog(o_player.UserId, param) } } if isSave { @@ -2685,6 +2688,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { Trend20Lately: "", CtrlType: sceneEx.ctrlType, PlayerPool: tienlenType.PlayerPool, + CycleId: sceneEx.CycleID, }) } } diff --git a/model/customlog.go b/model/customlog.go new file mode 100644 index 0000000..08e6a27 --- /dev/null +++ b/model/customlog.go @@ -0,0 +1,40 @@ +package model + +import ( + "github.com/globalsign/mgo/bson" +) + +var ( + DbCustomLogDBName = "log" + DbCustomLogCollName = "log_custom" +) + +type PlayerInfo struct { + SnId int32 // 玩家id + Awards []*Item // 奖品 +} + +type RoundInfo struct { + Round int32 // 第几局 + Ts int64 // 结算时间 + Score []int64 // 分数 + LogId string // 牌局记录id +} + +type CustomLog struct { + Id bson.ObjectId `bson:"_id"` + Platform string `bson:"-"` + CycleId string // 本轮id,多局游戏属于同一轮 + RoomConfigId int32 // 房间配置id + GameFreeId int32 // 场次id + TotalRound int32 // 总局数 + PlayerNum int32 // 最大人数 + Password string // 密码 + CostType int32 // 付费方式 1房主 2AA + Voice int32 // 是否开启语音 1开启 + RoomId int32 // 房间id + SnId []PlayerInfo // 所有玩家 + List []RoundInfo // 对局记录 + StartTs, EndTs int64 // 开始,结束时间 + State int32 // 0正常结束 1后台中途解散 +} diff --git a/model/gamedetailedlog.go b/model/gamedetailedlog.go index 6ab0260..d822146 100644 --- a/model/gamedetailedlog.go +++ b/model/gamedetailedlog.go @@ -66,7 +66,8 @@ func NewGameDetailedLog() *GameDetailedLog { } func NewGameDetailedLogEx(logid string, gameid, sceneid, gamemode, gamefreeid, playercount, gametiming, gamebasebet int32, - gamedetailednote string, platform string, clubId int32, clubRoom string, cpCtx CoinPoolCtx, ver int32, trend20Lately string, ctrlType int, playerPool map[int]int) *GameDetailedLog { + gamedetailednote string, platform string, clubId int32, clubRoom string, cpCtx CoinPoolCtx, ver int32, + trend20Lately string, ctrlType int, playerPool map[int]int, cycleId string) *GameDetailedLog { cl := NewGameDetailedLog() cl.LogId = logid cl.GameId = gameid @@ -88,6 +89,7 @@ func NewGameDetailedLogEx(logid string, gameid, sceneid, gamemode, gamefreeid, p cl.Ts = time.Now().Unix() cl.CtrlType = ctrlType cl.PlayerPool = playerPool + cl.CycleId = cycleId return cl } diff --git a/model/gameplayerlistlog.go b/model/gameplayerlistlog.go index baa5201..4bbd768 100644 --- a/model/gameplayerlistlog.go +++ b/model/gameplayerlistlog.go @@ -52,9 +52,10 @@ type GamePlayerListLog struct { MatchId int64 MatchType int64 //0.普通场 1.锦标赛 2.冠军赛 3.vip专属 Ts int32 - IsFree bool //拉霸专用 是否免费 - WinSmallGame int64 //拉霸专用 小游戏奖励 - WinTotal int64 //拉霸专用 输赢 + IsFree bool //拉霸专用 是否免费 + WinSmallGame int64 //拉霸专用 小游戏奖励 + WinTotal int64 //拉霸专用 输赢 + CycleId string // 本轮id,打一轮有多局 } func NewGamePlayerListLog() *GamePlayerListLog { @@ -64,7 +65,7 @@ func NewGamePlayerListLog() *GamePlayerListLog { func NewGamePlayerListLogEx(snid int32, gamedetailedlogid string, platform, channel, promoter, packageTag string, gameid, baseScore, sceneid, gamemode, gamefreeid int32, totalin, totalout int64, clubId int32, clubRoom string, taxCoin, pumpCoin int64, roomType int32, betAmount, winAmountNoAnyTax int64, key, name string, gameClass int32, isFirst bool, matchid, matchType int64, - isFree bool, winSmallGame, winTotal int64) *GamePlayerListLog { + isFree bool, winSmallGame, winTotal int64, cycleId string) *GamePlayerListLog { cl := NewGamePlayerListLog() cl.SnId = snid cl.GameDetailedLogId = gamedetailedlogid diff --git a/mq/keyconf.go b/mq/keyconf.go index 833871a..87943a5 100644 --- a/mq/keyconf.go +++ b/mq/keyconf.go @@ -23,4 +23,5 @@ const ( const ( DBVipGiftLog = "db_vipgift" + DBCustomLog = "db_customlog" // 房卡场对局记录 ) diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index e381210..982790b 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -168,7 +168,7 @@ func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene { // MarshalAllRoom 获取房间列表 // 返回 房间列表,总页数,总条数 func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode, clubId, sceneMode, sceneId int, - gameFreeId, snId int32, start, end, pageSize int32) ([]*webapiproto.RoomInfo, int32, int32) { + gameFreeId, snId int32, isCustom bool, roomConfigId int32, start, end, pageSize int32) ([]*webapiproto.RoomInfo, int32, int32) { roomInfo := make([]*webapiproto.RoomInfo, 0, len(m.scenes)) var isNeedFindAll = false if model.GameParamData.IsFindRoomByGroup && platform != "" && snId != 0 && gameId == 0 && @@ -183,7 +183,9 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode ((s.gameId == gameId && s.gameMode == gameMode) || gameId == 0) && (s.sceneId == sceneId || sceneId == 0) && (s.groupId == int32(groupId) || groupId == 0) && (s.dbGameFree.GetId() == gameFreeId || gameFreeId == 0) && - (s.sceneMode == sceneMode || sceneMode == -1)) || isNeedFindAll { + (s.sceneMode == sceneMode || sceneMode == -1)) || isNeedFindAll && + ((s.IsCustom() && isCustom) || !isCustom) && + (s.GetRoomConfigId() == roomConfigId || roomConfigId == 0) { var platformName string if s.limitPlatform != nil { platformName = s.limitPlatform.IdStr @@ -204,6 +206,11 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode CreateTime: s.createTime.Unix(), BaseScore: s.dbGameFree.BaseScore, GameFreeId: s.dbGameFree.GetId(), + MaxRound: s.totalRound, + Password: s.GetPassword(), + CostType: s.GetCostType(), + Voice: s.GetVoice(), + CurrRound: s.currRound, } if s.starting { si.Start = 1 diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 8751c71..75efbcd 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -1720,7 +1720,8 @@ func init() { start := (pageNo - 1) * pageSize end := pageNo * pageSize roomList, count, roomSum := SceneMgrSingleton.MarshalAllRoom(msg.GetPlatform(), int(msg.GetGroupId()), int(msg.GetGameId()), - int(msg.GetGameMode()), int(msg.GetClubId()), int(msg.GetRoomType()), int(msg.GetSceneId()), msg.GamefreeId, msg.GetSnId(), start, end, pageSize) + int(msg.GetGameMode()), int(msg.GetClubId()), int(msg.GetRoomType()), int(msg.GetSceneId()), + msg.GamefreeId, msg.GetSnId(), msg.GetIsCustom() == 1, msg.GetRoomConfigId(), start, end, pageSize) if count < pageNo { pageNo = 1 } From 49c2d8baac42cf6f9526685ebcf5d9585d48c0b3 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 29 Aug 2024 09:00:58 +0800 Subject: [PATCH 45/63] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E5=9C=BA=E6=88=BF?= =?UTF-8?q?=E9=97=B4id=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/constant.go b/common/constant.go index 9302ef2..cadbc44 100644 --- a/common/constant.go +++ b/common/constant.go @@ -171,8 +171,8 @@ func IsDaZhong(gameId int) bool { // 房间编号区间 const ( - PrivateSceneStartId = 10000000 - PrivateSceneMaxId = 99999999 + PrivateSceneStartId = 100000 + PrivateSceneMaxId = 999999 MatchSceneStartId = 100000000 MatchSceneMaxId = 199999999 HundredSceneStartId = 200000000 From 3bff2c17f3650732f8e9e5c54daadd3d7eff7488 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 29 Aug 2024 14:28:54 +0800 Subject: [PATCH 46/63] review --- common/constant.go | 11 + gamesrv/tienlen/scenepolicy_tienlen.go | 3 + worldsrv/action_game.go | 4 +- worldsrv/coinscenepool_local.go | 4 +- worldsrv/hundredscenemgr.go | 1 - worldsrv/player.go | 11 - worldsrv/playersingleadjust.go | 273 --------------- worldsrv/playgamenum.go | 47 --- worldsrv/scene.go | 446 +++++++++++-------------- worldsrv/scenemgr.go | 2 +- worldsrv/trascate_webapi.go | 4 +- 11 files changed, 221 insertions(+), 585 deletions(-) delete mode 100644 worldsrv/playersingleadjust.go delete mode 100644 worldsrv/playgamenum.go diff --git a/common/constant.go b/common/constant.go index cadbc44..625d141 100644 --- a/common/constant.go +++ b/common/constant.go @@ -876,3 +876,14 @@ const ( SceneStateStart = 1 // 开始 SceneStateEnd = 2 // 结束 ) + +const ( + // PlayerHistoryModel . + PlayerHistoryModel = iota + 1 + + // BIGWIN_HISTORY_MODEL . + BIGWIN_HISTORY_MODEL + + // GameHistoryModel . + GameHistoryModel +) diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 1117595..2c52a0f 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -148,6 +148,9 @@ func (this *ScenePolicyTienLen) OnPlayerLeave(s *base.Scene, p *base.Player, rea } sceneEx.OnPlayerLeave(p, reason) s.FirePlayerEvent(p, base.PlayerEventLeave, []int64{int64(reason)}) + if s.IsCustom() && len(s.Players) == 0 { + s.Destroy(true) + } } // 玩家掉线 diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 88488a4..603710c 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -229,7 +229,7 @@ func (this *CSReturnRoomHandler) Process(s *netlib.Session, packetid int, data i pack.GameId = proto.Int(scene.gameId) pack.ModeType = proto.Int(scene.gameMode) pack.Params = common.CopySliceInt64ToInt32(scene.params) - pack.HallId = proto.Int32(scene.hallId) + pack.HallId = proto.Int32(scene.dbGameFree.GetId()) gameVers := srvdata.GetGameVers(p.PackageID) if ver, ok := gameVers[fmt.Sprintf("%v,%v", scene.gameId, p.Channel)]; ok { pack.MinApkVer = proto.Int32(ver.MinApkVer) @@ -872,7 +872,7 @@ func (this *CSCreateRoomHandler) ProcessLocalGame(s *netlib.Session, packetid in //创建房间 csp = CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, dbGameFree.GetId()) - roomId = SceneMgrSingleton.GenOneCoinSceneId() + roomId = SceneMgrSingleton.GenOnePrivateSceneId() if roomId == common.RANDID_INVALID { code = gamehall.OpResultCode_Game_OPRC_AllocRoomIdFailed_Game logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameId:%v sceneId == -1 ", p.SnId, gameId) diff --git a/worldsrv/coinscenepool_local.go b/worldsrv/coinscenepool_local.go index 6ec2898..39cd9c6 100644 --- a/worldsrv/coinscenepool_local.go +++ b/worldsrv/coinscenepool_local.go @@ -219,7 +219,7 @@ func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene { baseScore = common.RandInt32Slice(dbCreateRoom.GetBetRange()) } if baseScore == 0 { - logger.Logger.Tracef("CoinScenePool CreateLocalGameNewScene failed! baseScore==0") + logger.Logger.Tracef("CoinScenePool CreateLocalGameNewScene failed! BaseScore==0") return nil } scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{ @@ -284,7 +284,7 @@ func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene { BaseScore: baseScore, }) if scene != nil { - logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v baseScore:%v randIdx:%v", scene.gameId, scene.dbGameFree.GetSceneType(), baseScore, randIdx) + logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v BaseScore:%v randIdx:%v", scene.gameId, scene.dbGameFree.GetSceneType(), baseScore, randIdx) } } } diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index e7e5d77..2766caa 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -212,7 +212,6 @@ func (this *HundredSceneMgr) CreateNewScene(id, groupId int32, limitPlatform *Pl }) if scene != nil { logger.Logger.Infof("Create hundred scene %v-%v success.", gameId, sceneId) - scene.hallId = id scene.hp = this return scene } else { diff --git a/worldsrv/player.go b/worldsrv/player.go index 2ecf0cc..654d23a 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -1667,17 +1667,6 @@ func (this *Player) MarshalData() (d []byte, e error) { return } -func (this *Player) MarshalSingleAdjustData(gamefreeid int32) (d []byte, e error) { - if this.IsRob { - return - } - sa := PlayerSingleAdjustMgr.GetSingleAdjust(this.Platform, this.SnId, gamefreeid) - if sa != nil { - d, e = netlib.Gob.Marshal(sa) - } - return -} - // UnmarshalData 更新玩家数据 // 例如游戏服数据同步 func (this *Player) UnmarshalData(data []byte, scene *Scene) { diff --git a/worldsrv/playersingleadjust.go b/worldsrv/playersingleadjust.go deleted file mode 100644 index e59a3ad..0000000 --- a/worldsrv/playersingleadjust.go +++ /dev/null @@ -1,273 +0,0 @@ -package main - -import ( - "github.com/globalsign/mgo/bson" - "mongo.games.com/game/model" - "mongo.games.com/game/protocol/server" - "mongo.games.com/game/protocol/webapi" - "mongo.games.com/goserver/core/basic" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/module" - "mongo.games.com/goserver/core/task" - "time" -) - -type PlayerSingleAdjustManager struct { - AdjustData map[uint64]*model.PlayerSingleAdjust - dirtyList map[uint64]bool - cacheDirtyList map[uint64]bool //缓存待删除数据 -} - -var PlayerSingleAdjustMgr = &PlayerSingleAdjustManager{ - AdjustData: make(map[uint64]*model.PlayerSingleAdjust), - dirtyList: make(map[uint64]bool), - cacheDirtyList: make(map[uint64]bool), -} - -func (this *PlayerSingleAdjustManager) WebData(msg *webapi.ASSinglePlayerAdjust, p *Player) (sa *webapi.PlayerSingleAdjust) { - psa := model.WebSingleAdjustToModel(msg.PlayerSingleAdjust) - switch msg.Opration { - case 1: - this.AddNewSingleAdjust(psa) - case 2: - this.EditSingleAdjust(psa) - case 3: - this.DeleteSingleAdjust(psa.Platform, psa.SnId, psa.GameFreeId) - case 4: - sa = this.WebGetSingleAdjust(psa.Platform, psa.SnId, psa.GameFreeId) - return - } - //同步到游服 - if p != nil { - if p.scene != nil && p.scene.dbGameFree.Id == psa.GameFreeId { - gss := GameSessMgrSington.GetGameServerSess(int(psa.GameId)) - pack := &server.WGSingleAdjust{ - SceneId: int32(p.scene.sceneId), - Option: msg.Opration, - PlayerSingleAdjust: model.MarshalSingleAdjust(psa), - } - for _, gs := range gss { - gs.Send(int(server.SSPacketID_PACKET_WG_SINGLEADJUST), pack) - } - } - if p.miniScene != nil { - for _, game := range p.miniScene { - if game.dbGameFree.Id == psa.GameFreeId { - gss := GameSessMgrSington.GetGameServerSess(int(psa.GameId)) - pack := &server.WGSingleAdjust{ - SceneId: int32(game.sceneId), - Option: msg.Opration, - PlayerSingleAdjust: model.MarshalSingleAdjust(psa), - } - for _, gs := range gss { - gs.Send(int(server.SSPacketID_PACKET_WG_SINGLEADJUST), pack) - } - break - } - } - } - } - return -} - -func (this *PlayerSingleAdjustManager) IsSingleAdjustPlayer(snid int32, gameFreeId int32) (*model.PlayerSingleAdjust, bool) { - key := uint64(snid)<<32 + uint64(gameFreeId) - if data, ok := this.AdjustData[key]; ok { - if data.CurTime < data.TotalTime { - return data, true - } - } - return nil, false -} -func (this *PlayerSingleAdjustManager) AddAdjustCount(snid int32, gameFreeId int32) { - key := uint64(snid)<<32 + uint64(gameFreeId) - if ad, ok := this.AdjustData[key]; ok { - ad.CurTime++ - this.dirtyList[key] = true - } -} -func (this *PlayerSingleAdjustManager) GetSingleAdjust(platform string, snid, gameFreeId int32) *model.PlayerSingleAdjust { - key := uint64(snid)<<32 + uint64(gameFreeId) - if psa, ok := this.AdjustData[key]; ok { - return psa - } - return nil -} -func (this *PlayerSingleAdjustManager) WebGetSingleAdjust(platform string, snid, gameFreeId int32) *webapi.PlayerSingleAdjust { - key := uint64(snid)<<32 + uint64(gameFreeId) - if psa, ok := this.AdjustData[key]; ok { - return &webapi.PlayerSingleAdjust{ - Id: psa.Id.Hex(), - Platform: psa.Platform, - GameFreeId: psa.GameFreeId, - SnId: psa.SnId, - Mode: psa.Mode, - TotalTime: psa.TotalTime, - CurTime: psa.CurTime, - BetMin: psa.BetMin, - BetMax: psa.BetMax, - BankerLoseMin: psa.BankerLoseMin, - BankerWinMin: psa.BankerWinMin, - CardMin: psa.CardMin, - CardMax: psa.CardMax, - Priority: psa.Priority, - WinRate: psa.WinRate, - GameId: psa.GameId, - GameMode: psa.GameMode, - Operator: psa.Operator, - CreateTime: psa.CreateTime, - UpdateTime: psa.UpdateTime, - } - } - return nil -} -func (this *PlayerSingleAdjustManager) AddNewSingleAdjust(psa *model.PlayerSingleAdjust) *model.PlayerSingleAdjust { - if psa != nil { - key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId) - psa.Id = bson.NewObjectId() - psa.CreateTime = time.Now().Unix() - psa.UpdateTime = time.Now().Unix() - - this.AdjustData[key] = psa - logger.Logger.Trace("SinglePlayerAdjust new:", psa) - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.AddNewSingleAdjust(psa) - }), nil, "AddNewSingleAdjust").StartByFixExecutor("AddNewSingleAdjust") - } - return psa -} -func (this *PlayerSingleAdjustManager) EditSingleAdjust(psa *model.PlayerSingleAdjust) { - if psa != nil { - var inGame bool - psa.UpdateTime = time.Now().Unix() - for key, value := range this.AdjustData { - if value.Id == psa.Id { - var tempKey = key - if psa.GameFreeId != value.GameFreeId { - delete(this.AdjustData, key) - delete(this.dirtyList, key) - tempKey = uint64(psa.SnId)<<32 + uint64(psa.GameFreeId) - } - this.AdjustData[tempKey] = psa - this.dirtyList[tempKey] = true - inGame = true - break - } - } - logger.Logger.Trace("SinglePlayerAdjust edit:", *psa) - if !inGame { - //不在游戏 直接更新库 - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.EditSingleAdjust(psa) - }), nil, "EditSingleAdjust").StartByFixExecutor("EditSingleAdjust") - } - } -} -func (this *PlayerSingleAdjustManager) DeleteSingleAdjust(platform string, snid, gameFreeId int32) { - key := uint64(snid)<<32 + uint64(gameFreeId) - if _, ok := this.AdjustData[key]; ok { - delete(this.AdjustData, key) - delete(this.dirtyList, key) - } - logger.Logger.Trace("SinglePlayerAdjust delete:", snid, gameFreeId) - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - return model.DeleteSingleAdjust(&model.PlayerSingleAdjust{SnId: snid, GameFreeId: gameFreeId, Platform: platform}) - }), nil, "DeleteSingleAdjust").Start() -} - -func (this *PlayerSingleAdjustManager) ModuleName() string { - return "PlayerSingleAdjustManager" -} -func (this *PlayerSingleAdjustManager) Init() { - //data, err := model.QueryAllSingleAdjust("1") - //if err != nil { - // logger.Logger.Warn("QueryAllSingleAdjust is err:", err) - // return - //} - //if len(data) > 0 { - // for _, psa := range data { - // _, gameType := srvdata.DataMgr.GetGameFreeIds(psa.GameId, psa.GameMode) - // if gameType != common.GameType_Mini { - // key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId) - // this.AdjustData[key] = psa - // } - // } - //} -} - -// 登录加载 -func (this *PlayerSingleAdjustManager) LoadSingleAdjustData(platform string, snid int32) { - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - ret, err := model.QueryAllSingleAdjustByKey(platform, snid) - if err != nil { - return nil - } - return ret - }), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { - if data != nil { - ret := data.([]*model.PlayerSingleAdjust) - for _, psa := range ret { - key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId) - this.AdjustData[key] = psa - } - } - })).StartByFixExecutor("LoadPlayerSingleAdjust") -} - -// 掉线删除 -func (this *PlayerSingleAdjustManager) DelPlayerData(platform string, snid int32) { - for _, psa := range this.AdjustData { - if psa.Platform == platform && psa.SnId == snid { - key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId) - if this.dirtyList[key] { - this.cacheDirtyList[key] = true - } else { - delete(this.AdjustData, key) - } - } - } -} -func (this *PlayerSingleAdjustManager) Update() { - if len(this.dirtyList) == 0 { - return - } - var syncArr []*model.PlayerSingleAdjust - for key, _ := range this.dirtyList { - syncArr = append(syncArr, this.AdjustData[key]) - delete(this.dirtyList, key) - } - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - var saveArr [2][]uint64 - for _, value := range syncArr { - err := model.EditSingleAdjust(value) - if err != nil { - logger.Logger.Error("PlayerSingleAdjustManager edit ", err) - saveArr[0] = append(saveArr[0], uint64(value.SnId)<<32+uint64(value.GameFreeId)) - } else { - saveArr[1] = append(saveArr[1], uint64(value.SnId)<<32+uint64(value.GameFreeId)) - } - } - return saveArr - }), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { - if saveArr, ok := data.([2][]uint64); ok { - //失败处理 - for _, key := range saveArr[0] { - this.dirtyList[key] = true - } - //成功处理 - for _, key := range saveArr[1] { - if this.cacheDirtyList[key] { - delete(this.cacheDirtyList, key) - delete(this.AdjustData, key) - } - } - } - return - })).StartByFixExecutor("PlayerSingleAdjustManager") -} -func (this *PlayerSingleAdjustManager) Shutdown() { - module.UnregisteModule(this) -} -func init() { - module.RegisteModule(PlayerSingleAdjustMgr, time.Minute*5, 0) -} diff --git a/worldsrv/playgamenum.go b/worldsrv/playgamenum.go deleted file mode 100644 index 7e26726..0000000 --- a/worldsrv/playgamenum.go +++ /dev/null @@ -1,47 +0,0 @@ -package main - -import ( - "mongo.games.com/game/common" - //"mongo.games.com/game/gamerule/blackjack" - //"mongo.games.com/game/gamerule/dezhoupoker" - //"mongo.games.com/game/gamerule/fivecardstud" - //"mongo.games.com/game/gamerule/omahapoker" -) - -var minPlayGameNum = map[int]int{ - common.GameId_TenHalf: 2, - common.GameId_DezhouPoker: 2, - common.GameId_FiveCardStud: 2, - common.GameId_BlackJack: 1, - //common.GameId_OmahaPoker: omahapoker.MinNumOfPlayer, -} - -var maxPlayGameNum = map[int]int{ - //common.GameId_DezhouPoker: int(dezhoupoker.MaxNumOfPlayer), - //common.GameId_FiveCardStud: int(fivecardstud.MaxNumOfPlayer), - //common.GameId_BlackJack: blackjack.MaxPlayer, - //common.GameId_OmahaPoker: omahapoker.MaxNumOfPlayer, -} - -func GetGameStartMinNum(gameid int) int { - return minPlayGameNum[gameid] -} -func GetGameSuiableNum(gameid int, flag int32) int { - minNum, maxNum := minPlayGameNum[gameid], maxPlayGameNum[gameid] - if flag == MatchTrueManForbid { - if minNum == maxNum { - return minNum - } else { - return maxNum - 1 - } - } else { - if minNum == maxNum { - return minNum - } else { - return maxNum - 2 - } - } -} -func IsRegularNum(gameid int) bool { - return minPlayGameNum[gameid] == maxPlayGameNum[gameid] -} diff --git a/worldsrv/scene.go b/worldsrv/scene.go index de9b098..fd9f401 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -6,7 +6,6 @@ import ( "time" rawproto "google.golang.org/protobuf/proto" - "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/srvlib" @@ -21,35 +20,21 @@ import ( "mongo.games.com/game/srvdata" ) -const ( - // PlayerHistoryModel . - PlayerHistoryModel = iota + 1 - - // BIGWIN_HISTORY_MODEL . - BIGWIN_HISTORY_MODEL - - // GameHistoryModel . - GameHistoryModel -) - type PlayerGameCtx struct { - takeCoin int64 //进房时携带的金币量 - enterTs int64 //进入时间 - totalConvertibleFlow int64 //进房时玩家身上的总流水 + takeCoin int64 //进房时携带的金币量 + enterTs int64 //进入时间 } // Scene 场景(房间) -// todo 结构优化 type Scene struct { sceneId int // 场景id gameId int // 游戏id - gameMode int // 游戏模式(玩法) + gameMode int // 废弃,游戏模式(玩法) sceneMode int // 房间模式,参考common.SceneMode_XXX params []int64 // 场景参数 playerNum int // 房间最大人数 robotNum int // 机器人数量 robotLimit int // 最大限制机器人数量 - preInviteRobNum int // 准备邀请机器人的数量 creator int32 // 创建者账号id replayCode string // 回放码 currRound int32 // 当前第几轮 @@ -66,13 +51,11 @@ type Scene struct { sp ScenePolicy // 场景上的一些业务策略 createTime time.Time // 创建时间 lastTime time.Time // 最后活跃时间 - startTime time.Time // 开始时间 - applyTimes map[int32]int32 // 申请坐下次数 + startTime time.Time // 游戏开始时间 limitPlatform *Platform // 限制平台 groupId int32 // 组id - hallId int32 // 厅id dbGameFree *serverproto.DB_GameFree // 场次配置 - gameCtx map[int32]*PlayerGameCtx // 进入房间的环境 + gameCtx map[int32]*PlayerGameCtx // 进入房间的环境,没有机器人数据 SnId BaseScore int32 // 游戏底分,优先级,创建参数>本地配置>场次配置 SceneState int32 // 房间当前状态 State int32 // 当前游戏状态,后期放到ScenePolicy里去处理 @@ -89,8 +72,6 @@ type Scene struct { func NewScene(args *CreateSceneParam) *Scene { gameId := int(args.GF.GetGameId()) gameMode := int(args.GF.GetGameMode()) - gameFreeId := args.GF.GetId() - sp := GetScenePolicy(gameId, gameMode) if sp == nil { logger.Logger.Errorf("NewScene sp == nil, gameId=%v gameMode=%v", gameId, gameMode) @@ -99,7 +80,6 @@ func NewScene(args *CreateSceneParam) *Scene { s := &Scene{ sceneId: args.RoomId, - hallId: gameFreeId, playerNum: int(args.PlayerNum), creator: args.CreateId, gameId: gameId, @@ -141,7 +121,18 @@ func NewScene(args *CreateSceneParam) *Scene { s.replayCode = SceneMgrSingleton.AllocReplayCode() if s.dbGameFree.GetMatchMode() == 0 { - s.RandRobotCnt() + // 普通匹配设置最大机器人数量 + number := s.dbGameFree.GetRobotNumRng() + if len(number) >= 2 { + if number[1] == number[0] { + s.robotLimit = int(number[0]) + } else { + if number[1] < number[0] { + number[1], number[0] = number[0], number[1] + } + s.robotLimit = int(number[1]) + } + } } s.sp.OnStart(s) return s @@ -178,10 +169,13 @@ func (this *Scene) GetPlayerGameCtx(snid int32) *PlayerGameCtx { } // PlayerEnter 玩家进入场景 -// todo 优化 func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { logger.Logger.Infof("(this *Scene:%v) PlayerEnter(%v, %v) ", this.sceneId, p.SnId, pos) + if this.dbGameFree == nil { + return false + } + // 机器人数量限制 if p.IsRobot() && this.robotLimit != 0 { if this.robotNum+1 > this.robotLimit { @@ -224,15 +218,15 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { } } - p.scene = this - this.players[p.SnId] = p - this.gameSess.AddPlayer(p) - takeCoin := p.Coin leaveCoin := int64(0) gameTimes := rand.Int31n(100) - var matchParams []int32 //排名、段位、假snid、假角色、假皮肤 + if this.IsCustom() { // 房卡场初始1000金币 + takeCoin = 1000 + } + + var matchParams []int32 //排名、段位、假snid、假角色、假皮肤 if this.IsMatchScene() && p.matchCtx != nil { takeCoin = int64(p.matchCtx.grade) matchParams = append(matchParams, p.matchCtx.rank) //排名 @@ -246,108 +240,6 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { matchParams = append(matchParams, p.matchCtx.copySkinId) //假SkinId } - if this.IsCustom() { - takeCoin = 1000 - } - - if p.IsRob && !this.IsMatchScene() && !this.IsCustom() { - if this.dbGameFree != nil { //机器人携带金币动态调整 - gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.dbGameFree.GetId()) - if gps != nil { - dbGameFree := gps.DbGameFree - flag := false - if common.IsLocalGame(this.gameId) { - baseScore := this.BaseScore - arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr - tmpIds := []int32{} - for i := 0; i < len(arrs); i++ { - arr := arrs[i] - if int(arr.GameId) == this.gameId && arr.GameSite == this.dbGameFree.GetSceneType() { - betRange := arr.GetBetRange() - if len(betRange) == 0 { - continue - } - for j := 0; j < len(betRange); j++ { - if betRange[j] == baseScore && len(arr.GetGoldRange()) > 0 && arr.GetGoldRange()[0] != 0 { - tmpIds = append(tmpIds, arr.GetId()) - break - } - } - } - } - if len(tmpIds) > 0 { - randId := common.RandInt32Slice(tmpIds) - crData := srvdata.PBDB_CreateroomMgr.GetData(randId) - if crData != nil { - goldRange := crData.GetGoldRange() - if len(goldRange) == 2 { - takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), int64(goldRange[1])) - flag = true - } else if len(goldRange) == 1 { - takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), 2*int64(goldRange[0])) - flag = true - } - leaveCoin = int64(goldRange[0]) - for _, id := range tmpIds { - tmp := srvdata.PBDB_CreateroomMgr.GetData(id).GetGoldRange() - if int64(tmp[0]) < leaveCoin && tmp[0] != 0 { - leaveCoin = int64(tmp[0]) - } - } - } - } else { - logger.Logger.Warn("gameId: ", this.gameId, " gameSite: ", this.dbGameFree.GetSceneType(), " baseScore: ", baseScore) - } - if leaveCoin > takeCoin { - logger.Logger.Warn("robotSnId: ", p.SnId, " baseScore: ", baseScore, " takeCoin: ", takeCoin, " leaveCoin: ", leaveCoin) - } - if takeCoin > p.Coin { - p.Coin = takeCoin - } - } - - if !flag { - takerng := dbGameFree.GetRobotTakeCoin() - if len(takerng) >= 2 && takerng[1] > takerng[0] { - if takerng[0] < dbGameFree.GetLimitCoin() { - takerng[0] = dbGameFree.GetLimitCoin() - } - takeCoin = int64(common.RandInt(int(takerng[0]), int(takerng[1]))) - } else { - maxlimit := int64(dbGameFree.GetMaxCoinLimit()) - if maxlimit != 0 && p.Coin > maxlimit { - logger.Logger.Trace("Player coin:", p.Coin) - //在下限和上限之间随机,并对其的100的整数倍 - takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) - logger.Logger.Trace("Take coin:", takeCoin) - } - if maxlimit == 0 && this.IsCoinScene() { - maxlimit = int64(common.RandInt(10, 50)) * int64(dbGameFree.GetLimitCoin()) - takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit))) - logger.Logger.Trace("Take coin:", takeCoin) - } - } - takeCoin = takeCoin / 100 * 100 - //离场金币 - leaverng := dbGameFree.GetRobotLimitCoin() - if len(leaverng) >= 2 { - leaveCoin = int64(leaverng[0] + rand.Int63n(leaverng[1]-leaverng[0])) - } - } - - // 象棋积分 - chessScore := dbGameFree.GetChessScoreParams() - if len(chessScore) == 2 { - p.ChessGrade = int64(common.RandInt(int(chessScore[0]), int(chessScore[1]))) - } - - if takeCoin > p.Coin { - p.Coin = takeCoin - } - } - } - } - if p.IsRob { this.robotNum++ p.RobotRandName() @@ -356,95 +248,180 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { p.RandRobotPetSkillLevel() name := this.GetSceneName() logger.Logger.Tracef("(this *Scene) PlayerEnter(%v) robot(%v) robotlimit(%v)", name, this.robotNum, this.robotLimit) + + if !this.IsMatchScene() && !this.IsCustom() { + flag := false + // 本地游戏机器人携带金币 + if common.IsLocalGame(this.gameId) { + baseScore := this.BaseScore + arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr + var tmpIds []int32 + for i := 0; i < len(arrs); i++ { + arr := arrs[i] + if int(arr.GameId) == this.gameId && arr.GameSite == this.dbGameFree.GetSceneType() { + betRange := arr.GetBetRange() + if len(betRange) == 0 { + continue + } + for j := 0; j < len(betRange); j++ { + if betRange[j] == baseScore && len(arr.GetGoldRange()) > 0 && arr.GetGoldRange()[0] != 0 { + tmpIds = append(tmpIds, arr.GetId()) + break + } + } + } + } + if len(tmpIds) > 0 { + randId := common.RandInt32Slice(tmpIds) + crData := srvdata.PBDB_CreateroomMgr.GetData(randId) + if crData != nil { + goldRange := crData.GetGoldRange() + if len(goldRange) == 2 { + takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), int64(goldRange[1])) + flag = true + } else if len(goldRange) == 1 { + takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), 2*int64(goldRange[0])) + flag = true + } + leaveCoin = int64(goldRange[0]) + for _, id := range tmpIds { + tmp := srvdata.PBDB_CreateroomMgr.GetData(id).GetGoldRange() + if int64(tmp[0]) < leaveCoin && tmp[0] != 0 { + leaveCoin = int64(tmp[0]) + } + } + } + } else { + logger.Logger.Warn("gameId: ", this.gameId, " gameSite: ", this.dbGameFree.GetSceneType(), " BaseScore: ", baseScore) + } + if leaveCoin > takeCoin { + logger.Logger.Warn("robotSnId: ", p.SnId, " BaseScore: ", baseScore, " takeCoin: ", takeCoin, " leaveCoin: ", leaveCoin) + } + if takeCoin > p.Coin { + p.Coin = takeCoin + } + } + + // 非本地游戏机器人携带金币 + if !flag { + takerng := this.dbGameFree.GetRobotTakeCoin() + if len(takerng) >= 2 && takerng[1] > takerng[0] { + if takerng[0] < this.dbGameFree.GetLimitCoin() { + takerng[0] = this.dbGameFree.GetLimitCoin() + } + takeCoin = int64(common.RandInt(int(takerng[0]), int(takerng[1]))) + } else { + maxlimit := int64(this.dbGameFree.GetMaxCoinLimit()) + if maxlimit != 0 && p.Coin > maxlimit { + logger.Logger.Trace("Player coin:", p.Coin) + //在下限和上限之间随机,并对其的100的整数倍 + takeCoin = int64(common.RandInt(int(this.dbGameFree.GetLimitCoin()), int(maxlimit))) + logger.Logger.Trace("Take coin:", takeCoin) + } + if maxlimit == 0 && this.IsCoinScene() { + maxlimit = int64(common.RandInt(10, 50)) * int64(this.dbGameFree.GetLimitCoin()) + takeCoin = int64(common.RandInt(int(this.dbGameFree.GetLimitCoin()), int(maxlimit))) + logger.Logger.Trace("Take coin:", takeCoin) + } + } + takeCoin = takeCoin / 100 * 100 + //离场金币 + leaverng := this.dbGameFree.GetRobotLimitCoin() + if len(leaverng) >= 2 { + leaveCoin = leaverng[0] + rand.Int63n(leaverng[1]-leaverng[0]) + } + } + + // 象棋积分 + chessScore := this.dbGameFree.GetChessScoreParams() + if len(chessScore) == 2 { + p.ChessGrade = int64(common.RandInt(int(chessScore[0]), int(chessScore[1]))) + } + + if takeCoin > p.Coin { + p.Coin = takeCoin + } + } } data, err := p.MarshalData() - if err == nil { - var gateSid int64 - if p.gateSess != nil { - if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil { - sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0) - gateSid = sessionId.Get() - } - } - msg := &serverproto.WGPlayerEnter{ - Sid: proto.Int64(p.sid), - SnId: proto.Int32(p.SnId), - GateSid: proto.Int64(gateSid), - SceneId: proto.Int(this.sceneId), - PlayerData: data, - IsLoaded: proto.Bool(ischangeroom), - IParams: p.MarshalIParam(), - SParams: p.MarshalSParam(), - CParams: p.MarshalCParam(), - } - p.takeCoin = takeCoin - p.sceneCoin = takeCoin - p.enterts = time.Now() - - if !p.IsRob { //保存下进入时的环境 - this.gameCtx[p.SnId] = &PlayerGameCtx{ - takeCoin: p.takeCoin, - enterTs: p.enterts.Unix(), - totalConvertibleFlow: p.TotalConvertibleFlow, - } - this.lastTime = time.Now() - } - msg.TakeCoin = proto.Int64(takeCoin) - msg.ExpectLeaveCoin = proto.Int64(leaveCoin) - msg.ExpectGameTimes = proto.Int32(gameTimes) - msg.Pos = proto.Int(p.pos) - if matchParams != nil { - for _, param := range matchParams { - msg.MatchParams = append(msg.MatchParams, param) - } - } - - // 道具 - dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform) - if dbItemArr != nil { - msg.Items = make(map[int32]int64) - for _, dbItem := range dbItemArr { - msg.Items[dbItem.Id] = 0 - itemInfo := BagMgrSingleton.GetItem(p.SnId, dbItem.Id) - if itemInfo != nil { - msg.Items[dbItem.Id] = itemInfo.ItemNum - } - } - } - - // 排位积分 - ret := RankMgrSingleton.GetPlayerSeason(p.SnId) - if ret != nil && ret.PlayerRankSeason != nil { - msg.RankScore = make(map[int32]int64) - for k, v := range ret.RankType { - if v != nil { - msg.RankScore[k] = v.Score - } - } - } - - if p.IsRobot() { - msg.RankScore = make(map[int32]int64) - rankScore := this.dbGameFree.GetRankScoreParams() - if len(rankScore) == 2 { - switch { - case this.dbGameFree.GameDif == common.GameDifTienlen: - msg.RankScore[tienlen.RankType] = int64(common.RandInt(int(rankScore[0]), int(rankScore[1]))) - } - } - } - - proto.SetDefaults(msg) - this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_PLAYERENTER), msg) - logger.Logger.Tracef("SSPacketID_PACKET_WG_PLAYERENTER Scene:%v ;PlayerEnter(%v, %v)", this.sceneId, p.SnId, pos) - FirePlayerEnterScene(p, this) - return true - } else { - logger.Logger.Warnf("(this *Scene:%v) PlayerEnter(%v, %v) Marshal player data error %v", this.sceneId, p.SnId, pos, err) - this.DelPlayer(p) + if err != nil { + logger.Logger.Errorf("Scene PlayerEnter MarshalData failed, err:%v", err) return false } + + var gateSid int64 + if p.gateSess != nil { + if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil { + sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0) + gateSid = sessionId.Get() + } + } + msg := &serverproto.WGPlayerEnter{ + Sid: proto.Int64(p.sid), + GateSid: proto.Int64(gateSid), + SceneId: proto.Int(this.sceneId), + PlayerData: data, + TakeCoin: takeCoin, + IsLoaded: proto.Bool(ischangeroom), + IsQM: false, + ExpectLeaveCoin: leaveCoin, + ExpectGameTimes: gameTimes, + IParams: p.MarshalIParam(), + SParams: p.MarshalSParam(), + CParams: p.MarshalCParam(), + SnId: proto.Int32(p.SnId), + Pos: int32(p.pos), + MatchParams: matchParams, + } + // 道具 + msg.Items = make(map[int32]int64) + dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform) + for _, dbItem := range dbItemArr { + msg.Items[dbItem.Id] = 0 + itemInfo := BagMgrSingleton.GetItem(p.SnId, dbItem.Id) + if itemInfo != nil { + msg.Items[dbItem.Id] = itemInfo.ItemNum + } + } + // 排位积分 + ret := RankMgrSingleton.GetPlayerSeason(p.SnId) + if ret != nil && ret.PlayerRankSeason != nil { + msg.RankScore = make(map[int32]int64) + for k, v := range ret.RankType { + if v != nil { + msg.RankScore[k] = v.Score + } + } + } + if p.IsRobot() { + msg.RankScore = make(map[int32]int64) + rankScore := this.dbGameFree.GetRankScoreParams() + if len(rankScore) == 2 { + switch { + case this.dbGameFree.GameDif == common.GameDifTienlen: + msg.RankScore[tienlen.RankType] = int64(common.RandInt(int(rankScore[0]), int(rankScore[1]))) + } + } + } + this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_PLAYERENTER), msg) + logger.Logger.Tracef("SSPacketID_PACKET_WG_PLAYERENTER Scene:%v ;PlayerEnter(%v, %v)", this.sceneId, p.SnId, pos) + + p.scene = this + p.takeCoin = takeCoin + p.sceneCoin = takeCoin + p.enterts = time.Now() + this.players[p.SnId] = p + if !p.IsRob { //保存下进入时的环境 + this.gameCtx[p.SnId] = &PlayerGameCtx{ + takeCoin: p.takeCoin, + enterTs: p.enterts.Unix(), + } + this.lastTime = time.Now() + } + this.gameSess.AddPlayer(p) + FirePlayerEnterScene(p, this) + return true } func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool { @@ -476,7 +453,6 @@ func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool { PlayerData: data, TakeCoin: takeCoin, IsLoaded: proto.Bool(ischangeroom), - IsQM: false, IParams: p.MarshalIParam(), SParams: p.MarshalSParam(), CParams: p.MarshalCParam(), @@ -674,6 +650,9 @@ func (this *Scene) GetAudienceCnt() int { // IsFull 是否满人 // 不包含观众 func (this *Scene) IsFull() bool { + if this.playerNum == 0 { + return false + } return this.GetPlayerCnt() >= this.playerNum } @@ -717,15 +696,7 @@ func (this *Scene) SendToGame(packetId int, pack interface{}) bool { return false } -func (this *Scene) SendToClient(packetId int, pack interface{}, excludeId int32) { - for v, value := range this.players { - if v == excludeId { - continue - } - value.SendToClient(packetId, pack) - } -} - +// IsLongTimeInactive 房间是否长时间没有活动 func (this *Scene) IsLongTimeInactive() bool { tNow := time.Now() // 房间没有真人,没有观众,长时间没有真人进出房间 @@ -765,7 +736,7 @@ func (this *Scene) IsHundredScene() bool { // IsPrivateScene 私人房间 func (this *Scene) IsPrivateScene() bool { - return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId || this.sceneMode == common.SceneMode_Private + return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId } // IsCustom 房卡场房间 @@ -804,23 +775,6 @@ func (this *Scene) GetSceneName() string { return "[unknow scene name]" } -func (this *Scene) RandRobotCnt() { - if this.dbGameFree != nil { - number := this.dbGameFree.GetRobotNumRng() - if len(number) >= 2 { - if number[1] == number[0] { - this.robotLimit = int(number[0]) - } else { - if number[1] < number[0] { - number[1], number[0] = number[0], number[1] - } - this.robotLimit = int(number[1]) //int(number[0] + rand.Int31n(number[1]-number[0]) + 1) - } - } - return - } -} - func (this *Scene) IsPlatform(platform string) bool { if platform == "0" || platform == this.limitPlatform.IdStr { return true diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 982790b..2c6e824 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -493,7 +493,7 @@ func (m *SceneMgr) OnMiniTimer() { logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) s.SendGameDestroy(false) } - if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp != nil && s.csp.GetRoomNum() > int(s.dbGameFree.GetCreateRoomNum()) { + if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp != nil && s.csp.GetRoomNum(common.SceneMode_Public) > int(s.dbGameFree.GetCreateRoomNum()) { logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId) s.SendGameDestroy(false) } diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 75efbcd..7106457 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -662,7 +662,7 @@ func init() { //gameid := 112 switch int(historyModel) { - case PlayerHistoryModel: // 历史记录 + case common.PlayerHistoryModel: // 历史记录 task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { var genPlayerHistoryInfo = func(logid string, gameid int32, spinID, username string, isFree bool, createdTime, totalBetValue, totalPriceValue, totalBonusValue, multiple int64, player *qpapi.PlayerHistoryInfo) { player.SpinID = proto.String(spinID) @@ -728,7 +728,7 @@ func init() { } }), "CSGetPlayerHistoryHandlerWorld").Start() return common.ResponseTag_TransactYield, pack - case GameHistoryModel: + case common.GameHistoryModel: task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { var genGameHistoryInfo = func(gameNumber string, createdTime, multiple int64, hash string, gamehistory *qpapi.GameHistoryInfo) { From 33eab3f5bc517de0fdb12ab8308f2f491a5bf800 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 29 Aug 2024 16:30:08 +0800 Subject: [PATCH 47/63] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E5=88=97=E8=A1=A8=E5=8F=98=E6=9B=B4=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 15 +++++++ worldsrv/action_game.go | 2 + worldsrv/cachedata.go | 2 + worldsrv/horseracelamp.go | 2 +- worldsrv/playermgr.go | 21 +++++----- worldsrv/playernotify.go | 79 +++++++++++++++++++++++++++++++++++++ worldsrv/scene.go | 45 +++++++++++++++++++++ worldsrv/scenepolicydata.go | 12 ++++-- 8 files changed, 163 insertions(+), 15 deletions(-) create mode 100644 worldsrv/playernotify.go diff --git a/common/constant.go b/common/constant.go index 625d141..77c7b8d 100644 --- a/common/constant.go +++ b/common/constant.go @@ -887,3 +887,18 @@ const ( // GameHistoryModel . GameHistoryModel ) + +type ListOpType int // 列表操作类型 + +const ( + ListModify ListOpType = 1 // 修改 + ListAdd ListOpType = 2 // 增加 + ListDel ListOpType = 3 // 减少 + ListFind ListOpType = 4 // 查询 +) + +type NotifyType int // 通知类型 + +const ( + NotifyPrivateRoomList NotifyType = 1 // 私人房间列表 +) diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index ee8f584..d53bca5 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1410,6 +1410,8 @@ func CSTouchTypeHandler(s *netlib.Session, packetId int, data interface{}, sid i return nil } + PlayerNotifySingle.AddTime(p.SnId, common.NotifyPrivateRoomList, time.Second*15) + return nil } diff --git a/worldsrv/cachedata.go b/worldsrv/cachedata.go index 76ab4b5..dd13cdb 100644 --- a/worldsrv/cachedata.go +++ b/worldsrv/cachedata.go @@ -113,6 +113,7 @@ func (this *CacheDataManager) CacheBillNumber(billNo int, platform string) { key := fmt.Sprintf("BillNo-%v-%v", billNo, platform) this.addCacheData(AfterHour, key, key) } + func (this *CacheDataManager) CacheBillCheck(billNo int, platform string) bool { key := fmt.Sprintf("BillNo-%v-%v", billNo, platform) if _, ok := this.HourCache.Load(key); ok { @@ -121,6 +122,7 @@ func (this *CacheDataManager) CacheBillCheck(billNo int, platform string) bool { return false } } + func (this *CacheDataManager) ClearCacheBill(billNo int, platform string) { key := fmt.Sprintf("BillNo-%v-%v", billNo, platform) this.HourCache.Delete(key) diff --git a/worldsrv/horseracelamp.go b/worldsrv/horseracelamp.go index 85a23e2..bdef8f5 100644 --- a/worldsrv/horseracelamp.go +++ b/worldsrv/horseracelamp.go @@ -400,7 +400,7 @@ func (this *HorseRaceLampMgr) BroadcastHorseRaceLampMsg(horseRaceLamp *HorseRace if len(horseRaceLamp.Target) == 0 { PlayerMgrSington.BroadcastMessageToPlatform(horseRaceLamp.Platform, int(message.MSGPacketID_PACKET_SC_NOTICE), rawpack) } else { - PlayerMgrSington.BroadcastMessageToTarget(horseRaceLamp.Platform, horseRaceLamp.Target, int(message.MSGPacketID_PACKET_SC_NOTICE), rawpack) + PlayerMgrSington.BroadcastMessageToTarget(horseRaceLamp.Target, int(message.MSGPacketID_PACKET_SC_NOTICE), rawpack) } } diff --git a/worldsrv/playermgr.go b/worldsrv/playermgr.go index 9ee00c9..73a1678 100644 --- a/worldsrv/playermgr.go +++ b/worldsrv/playermgr.go @@ -426,20 +426,19 @@ func (this *PlayerMgr) BroadcastMessageToGroup(packetid int, rawpack interface{} } // BroadcastMessageToTarget 给某些玩家发消息 -func (this *PlayerMgr) BroadcastMessageToTarget(platform string, target []int32, packetid int, rawpack interface{}) { - players := this.playerOfPlatform[platform] +func (this *PlayerMgr) BroadcastMessageToTarget(target []int32, packetid int, rawpack interface{}) { mgs := make(map[*netlib.Session][]*srvproto.MCSessionUnion) - for _, p := range players { - if p != nil && p.gateSess != nil && p.IsOnLine() /*&& p.Platform == platform*/ { - if common.InSliceInt32(target, p.SnId) { - mgs[p.gateSess] = append(mgs[p.gateSess], &srvproto.MCSessionUnion{ - Mccs: &srvproto.MCClientSession{ - SId: proto.Int64(p.sid), - }, - }) - } + for _, v := range target { + d := this.snidMap[v] + if d != nil && d.gateSess != nil && d.IsOnLine() { + mgs[d.gateSess] = append(mgs[d.gateSess], &srvproto.MCSessionUnion{ + Mccs: &srvproto.MCClientSession{ + SId: proto.Int64(d.sid), + }, + }) } } + for gateSess, v := range mgs { if gateSess != nil && len(v) != 0 { pack, err := common.CreateMulticastPacket(packetid, rawpack, v...) diff --git a/worldsrv/playernotify.go b/worldsrv/playernotify.go new file mode 100644 index 0000000..64db7bf --- /dev/null +++ b/worldsrv/playernotify.go @@ -0,0 +1,79 @@ +package main + +import ( + "time" + + "mongo.games.com/game/common" +) + +func init() { + ClockMgrSington.RegisteSinker(PlayerNotifySingle) +} + +var PlayerNotifySingle = &PlayerNotify{ + players: make(map[int32]map[int32]*PlayerNotifyInfo), +} + +type PlayerNotifyInfo struct { + SnId int32 // 玩家id + Ts int64 // 失效时间戳 +} + +type PlayerNotify struct { + BaseClockSinker + players map[int32]map[int32]*PlayerNotifyInfo // 消息类型:玩家id:玩家信息 +} + +func (p *PlayerNotify) InterestClockEvent() int { + return 1 << CLOCK_EVENT_MINUTE +} + +func (p *PlayerNotify) OnMiniTimer() { + now := time.Now() + for _, v := range p.players { + var ids []int32 + for k, vv := range v { + if vv == nil || vv.Ts <= now.Unix() { + ids = append(ids, k) + } + } + for _, id := range ids { + delete(v, id) + } + } +} + +// AddTime 延长某个类型消息的通知时间 +// snid 玩家id +// tp 消息类型 +// d 延长时间 +func (p *PlayerNotify) AddTime(snid int32, tp common.NotifyType, d time.Duration) { + if _, ok := p.players[int32(tp)]; !ok { + p.players[int32(tp)] = make(map[int32]*PlayerNotifyInfo) + } + p.players[int32(tp)][snid] = &PlayerNotifyInfo{ + SnId: snid, + Ts: time.Now().Add(d).Unix(), + } +} + +// GetPlayers 获取某个类型消息的玩家id +// tp 消息类型 +func (p *PlayerNotify) GetPlayers(tp common.NotifyType) []int32 { + now := time.Now() + var ret []int32 + for k, v := range p.players[int32(tp)] { + if v == nil || v.Ts <= now.Unix() { + continue + } + ret = append(ret, k) + } + return ret +} + +// SendToClient 发送消息给客户端 +// tp 消息类型 +func (p *PlayerNotify) SendToClient(tp common.NotifyType, packetId int, pack interface{}) { + ids := p.GetPlayers(tp) + PlayerMgrSington.BroadcastMessageToTarget(ids, packetId, pack) +} diff --git a/worldsrv/scene.go b/worldsrv/scene.go index fd9f401..bd5e0eb 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -15,6 +15,7 @@ import ( "mongo.games.com/game/gamerule/tienlen" "mongo.games.com/game/model" "mongo.games.com/game/proto" + "mongo.games.com/game/protocol/gamehall" hallproto "mongo.games.com/game/protocol/gamehall" serverproto "mongo.games.com/game/protocol/server" "mongo.games.com/game/srvdata" @@ -923,3 +924,47 @@ func (this *Scene) CanAudience() bool { return true } } + +func (this *Scene) ProtoPrivateRoom() *gamehall.PrivateRoomInfo { + if !this.IsCustom() { + return nil + } + needPassword := int32(0) + if this.GetPassword() != "" { + needPassword = int32(1) + } + ret := &gamehall.PrivateRoomInfo{ + GameFreeId: this.dbGameFree.GetId(), + GameId: int32(this.gameId), + RoomTypeId: this.RoomTypeId, + RoomConfigId: this.RoomConfigId, + RoomId: int32(this.sceneId), + NeedPassword: needPassword, + CurrRound: this.currRound, + MaxRound: this.totalRound, + CurrNum: int32(this.GetPlayerCnt()), + MaxPlayer: int32(this.playerNum), + CreateTs: this.createTime.Unix(), + State: this.SceneState, + } + for _, v := range this.players { + ret.Players = append(ret.Players, &gamehall.PrivatePlayerInfo{ + SnId: v.SnId, + Name: v.Name, + UseRoleId: v.GetRoleId(), + }) + } + return ret +} + +// NotifyPrivateRoom 通知私人房列表变更 +func (this *Scene) NotifyPrivateRoom(tp common.ListOpType) { + if this.IsCustom() { + pack := &gamehall.SCGetPrivateRoomList{ + Tp: int32(tp), + Datas: []*gamehall.PrivateRoomInfo{this.ProtoPrivateRoom()}, + } + PlayerNotifySingle.SendToClient(common.NotifyPrivateRoomList, int(gamehall.GameHallPacketID_PACKET_SC_GETPRIVATEROOMLIST), pack) + logger.Logger.Tracef("NotifyPrivateRoom: %v", pack) + } +} diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 75f4cc6..015e7b0 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -22,10 +22,13 @@ func (spd *ScenePolicyData) Init() bool { return true } -func (spd *ScenePolicyData) OnStart(s *Scene) {} +func (spd *ScenePolicyData) OnStart(s *Scene) { + s.NotifyPrivateRoom(common.ListAdd) +} // 场景关闭事件 func (spd *ScenePolicyData) OnStop(s *Scene) { + s.NotifyPrivateRoom(common.ListDel) } // 场景心跳事件 @@ -35,12 +38,12 @@ func (spd *ScenePolicyData) OnTick(s *Scene) { // 玩家进入事件 func (spd *ScenePolicyData) OnPlayerEnter(s *Scene, p *Player) { - + s.NotifyPrivateRoom(common.ListModify) } // 玩家离开事件 func (spd *ScenePolicyData) OnPlayerLeave(s *Scene, p *Player) { - + s.NotifyPrivateRoom(common.ListModify) } // 系统维护关闭事件 @@ -52,8 +55,10 @@ func (spd *ScenePolicyData) OnSceneState(s *Scene, state int) { s.SceneState = int32(state) switch state { case common.SceneStateWaite: + s.NotifyPrivateRoom(common.ListModify) case common.SceneStateStart: + s.NotifyPrivateRoom(common.ListModify) if s.IsCustom() { for _, v := range s.players { spd.CostPayment(s, v) @@ -61,6 +66,7 @@ func (spd *ScenePolicyData) OnSceneState(s *Scene, state int) { } case common.SceneStateEnd: + s.NotifyPrivateRoom(common.ListModify) } } From a77cfa41dda7a864eae87621f31ae7eae1648adc Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 29 Aug 2024 16:54:30 +0800 Subject: [PATCH 48/63] =?UTF-8?q?=E7=A6=BB=E5=BC=80=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E9=94=99=E8=AF=AF=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_game.go | 42 +++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/gamesrv/action/action_game.go b/gamesrv/action/action_game.go index 4245e12..344fa6e 100644 --- a/gamesrv/action/action_game.go +++ b/gamesrv/action/action_game.go @@ -293,10 +293,48 @@ func CSRoomEvent(s *netlib.Session, packetid int, data interface{}, sid int64) e return nil } +func CSDestroyRoom(s *netlib.Session, packetid int, data interface{}, sid int64) error { + logger.Logger.Trace("CSDestroyRoomHandler Process recv ", data) + p := base.PlayerMgrSington.GetPlayer(sid) + if p == nil { + logger.Logger.Warn("CSDestroyRoomHandler p == nil") + return nil + } + scene := p.GetScene() + if scene == nil { + logger.Logger.Warn("CSDestroyRoomHandler p.GetScene() == nil") + return nil + } + if !scene.HasPlayer(p) { + return nil + } + + pack := &gamehall.SCDestroyRoom{ + RoomId: scene.SceneId, + OpRetCode: gamehall.OpResultCode_Game_OPRC_Error_Game, + } + send := func() { + p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_DESTROYROOM), pack) + logger.Logger.Tracef("SCDestroyRoom: %v", pack) + } + + if scene.Creator != p.SnId { + logger.Logger.Warn("CSDestroyRoomHandler s.creator != p.AccountId") + send() + return nil + } + // 房卡场开始后不能解散 + if scene.IsCustom() && scene.NumOfGames > 0 { + send() + return nil + } + scene.Destroy(true) + return nil +} + func init() { // 房间创建者解散房间 - common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_DESTROYROOM), &CSDestroyRoomHandler{}) - netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_DESTROYROOM), &CSDestroyRoomPacketFactory{}) + common.Register(int(gamehall.GameHallPacketID_PACKET_CS_DESTROYROOM), &gamehall.CSDestroyRoom{}, CSDestroyRoom) // 离开或暂离房间 common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_LEAVEROOM), &CSLeaveRoomHandler{}) From fa57f5e8e632ae708119701930bf6a35798ebe51 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 14:49:55 +0800 Subject: [PATCH 49/63] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E7=8E=A9=E5=AE=B6?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/slice.go | 16 ++++ dbproxy/svc/u_playergamedata.go | 71 ++++++++++++++ gamesrv/base/player.go | 37 ++++--- gamesrv/base/scene.go | 4 +- gamesrv/tienlen/scenepolicy_tienlen.go | 14 +-- model/player.go | 7 ++ model/playergamedata.go | 56 +++++++++++ worldsrv/player.go | 17 +++- worldsrv/playerinfo.go | 128 +++++++++++++++++++++++++ 9 files changed, 328 insertions(+), 22 deletions(-) create mode 100644 dbproxy/svc/u_playergamedata.go create mode 100644 model/playergamedata.go create mode 100644 worldsrv/playerinfo.go diff --git a/common/slice.go b/common/slice.go index 4fc046f..cfc077f 100644 --- a/common/slice.go +++ b/common/slice.go @@ -452,6 +452,22 @@ func SliceValueWeight(sl []int, index int) float64 { return float64(value) / float64(totle) } +func GetMapKeys[K comparable, V any](data map[K]V) []K { + var ret []K + for k := range data { + ret = append(ret, k) + } + return ret +} + +func GetMapValues[K comparable, V any](data map[K]V) []V { + var ret []V + for _, v := range data { + ret = append(ret, v) + } + return ret +} + type Int32Slice []int32 func (p Int32Slice) Len() int { return len(p) } diff --git a/dbproxy/svc/u_playergamedata.go b/dbproxy/svc/u_playergamedata.go new file mode 100644 index 0000000..f3dc288 --- /dev/null +++ b/dbproxy/svc/u_playergamedata.go @@ -0,0 +1,71 @@ +package svc + +import ( + "errors" + "net/rpc" + + "github.com/globalsign/mgo" + "github.com/globalsign/mgo/bson" + + "mongo.games.com/game/dbproxy/mongo" + "mongo.games.com/game/model" +) + +var ( + PlayerGameDataDBName = "user" + PlayerGameDataCollName = "user_gamedata" + PlayerGameDataColError = errors.New("PlayerGameData collection open failed") + PlayerGameDataSvcSingle = &PlayerGameDataSvc{} +) + +func PlayerGameDataCollection(plt string) *mongo.Collection { + s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, PlayerGameDataDBName) + if s != nil { + c, first := s.DB().C(PlayerGameDataCollName) + if first { + c.EnsureIndex(mgo.Index{Key: []string{"snid", "id"}, Unique: true, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"id"}, Background: true, Sparse: true}) + } + return c + } + + return nil +} + +func init() { + rpc.Register(PlayerGameDataSvcSingle) +} + +type PlayerGameDataSvc struct{} + +func (p *PlayerGameDataSvc) Save(req *model.PlayerGameSaveReq, b *bool) error { + c := PlayerGameDataCollection(req.Platform) + if c == nil { + return PlayerGameDataColError + } + + for _, v := range req.Data { + _, err := c.Upsert(bson.M{"snid": v.SnId, "id": v.Id}, v) + if err != nil { + return err + } + } + *b = true + + return nil +} + +func (p *PlayerGameDataSvc) Find(req *model.PlayerGameDataFindReq, res *model.PlayerGameDataFindRes) error { + c := PlayerGameDataCollection(req.Platform) + if c == nil { + return PlayerGameDataColError + } + + var ret []*model.PlayerGameData + err := c.Find(bson.M{"snid": req.SnId}).All(&ret) + if err != nil { + return err + } + res.Data = ret + return nil +} diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index 721aeef..9b29b76 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -68,8 +68,8 @@ const ( ) type Player struct { - model.PlayerData //po 持久化对象 - ExtraData interface{} //扩展接口 + model.WGPlayerInfo + ExtraData interface{} //具体游戏对局中的玩家扩展信息 gateSess *netlib.Session //所在GateServer的session worldSess *netlib.Session //所在WorldServer的session scene *Scene //当前所在个Scene @@ -141,13 +141,15 @@ func NewPlayer(sid int64, data []byte, ws, gs *netlib.Session) *Player { RankScore: make(map[int32]int64), } - // 需要make的,统一在这里初始化默认值,别的地方就不用再初始化了 - p.PlayerData = model.PlayerData{ - //TotalGameData: make(map[int][]*model.PlayerGameTotal), - GDatas: make(map[string]*model.PlayerGameInfo), - ShopTotal: make(map[int32]*model.ShopTotal), - ShopLastLookTime: make(map[int32]int64), - IsFoolPlayer: make(map[string]bool), + //todo 初始化 + p.WGPlayerInfo = model.WGPlayerInfo{ + PlayerData: &model.PlayerData{ + GDatas: make(map[string]*model.PlayerGameInfo), + ShopTotal: make(map[int32]*model.ShopTotal), + ShopLastLookTime: make(map[int32]int64), + IsFoolPlayer: make(map[string]bool), + }, + GameData: make(map[int32]*model.PlayerGameData), } if p.init(data) { @@ -373,7 +375,20 @@ func (this *Player) OnAudienceLeave(reason int) { } func (this *Player) MarshalData(gameid int) (d []byte, e error) { - d, e = netlib.Gob.Marshal(&this.PlayerData) + // 防止参数遗漏 + for k, v := range this.GameData { + if v.SnId == 0 { + v.SnId = this.SnId + } + if v.Platform == "" { + v.Platform = this.Platform + } + if v.Id == 0 { + v.Id = k + } + } + + d, e = netlib.Gob.Marshal(&this.WGPlayerInfo) logger.Logger.Trace("(this *Player) MarshalData(gameid int)") return } @@ -382,7 +397,7 @@ func (this *Player) UnmarshalData(data []byte) bool { if len(data) == 0 { return true } - err := netlib.Gob.Unmarshal(data, &this.PlayerData) + err := netlib.Gob.Unmarshal(data, &this.WGPlayerInfo) if err == nil { this.dirty = true return true diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 4ac97eb..fd3f0f7 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -1984,7 +1984,7 @@ func (this *Scene) TryBillExGameDrop(p *Player) { itemData := srvdata.GameItemMgr.Get(p.Platform, id) if itemData != nil { p.AddItems(&model.AddItemParam{ - P: &p.PlayerData, + P: p.PlayerData, Change: nil, GainWay: common.GainWay_Game, Operator: "system", @@ -2021,7 +2021,7 @@ func (this *Scene) DropCollectBox(p *Player) { if itemData != nil { pack.Items = map[int32]int32{itemData.Id: 1} p.AddItems(&model.AddItemParam{ - P: &p.PlayerData, + P: p.PlayerData, Change: []*model.Item{ { ItemId: itemData.Id, diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 58c5db6..34581f3 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -1803,7 +1803,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(losePlayer.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&losePlayer.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(losePlayer.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if losePlayer.GetWeekCardPrivilege(2) { @@ -1945,7 +1945,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(lastWinPlayer.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&lastWinPlayer.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(lastWinPlayer.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if lastWinPlayer.GetWeekCardPrivilege(2) { @@ -2056,7 +2056,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(playerEx.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(playerEx.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if playerEx.GetWeekCardPrivilege(2) { @@ -2161,7 +2161,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(playerEx.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(playerEx.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if playerEx.GetWeekCardPrivilege(2) { @@ -2310,7 +2310,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(playerEx.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(playerEx.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if playerEx.GetWeekCardPrivilege(2) { @@ -2442,7 +2442,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { // vip加成分 vipScore = int64(math.Ceil(float64(rankScore) * float64(playerEx.VipExtra) / 100.0)) // 角色加成分 - _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(&playerEx.PlayerData, common.RoleAddRankScore) + _, roleAdd = srvdata.RolePetMgrSington.GetRoleAdd(playerEx.PlayerData, common.RoleAddRankScore) roleScore = int64(math.Ceil(float64(rankScore) * float64(roleAdd) / 100.0)) //周卡加成 if playerEx.GetWeekCardPrivilege(2) { @@ -2613,7 +2613,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { } } p.AddItems(&model.AddItemParam{ - P: &p.PlayerData, + P: p.PlayerData, Change: items, GainWay: common.GainWayRoomGain, Operator: "system", diff --git a/model/player.go b/model/player.go index 6f867ea..ca719c8 100644 --- a/model/player.go +++ b/model/player.go @@ -344,6 +344,13 @@ type MatchFreeSignupRec struct { UseTimes int32 //累计使用免费次数 } +// WGPlayerInfo 游戏服玩家信息 +// 大厅玩家信息发送给游戏服 +type WGPlayerInfo struct { + *PlayerData + GameData map[int32]*PlayerGameData // 游戏数据,只允许存储玩家对应某个游戏需要持久化的数据 +} + type PlayerData struct { Id bson.ObjectId `bson:"_id"` AccountId string //账号id diff --git a/model/playergamedata.go b/model/playergamedata.go new file mode 100644 index 0000000..0fd4a07 --- /dev/null +++ b/model/playergamedata.go @@ -0,0 +1,56 @@ +package model + +import ( + "time" + + "mongo.games.com/goserver/core/logger" +) + +type PlayerGameData struct { + Platform string `bson:"-"` + SnId int32 + Id int32 // 游戏id或场次id + Data interface{} // 数据 +} + +type PlayerGameSaveReq struct { + Platform string + Data []*PlayerGameData +} + +func SavePlayerGameData(platform string, data []*PlayerGameData) error { + if rpcCli == nil { + logger.Logger.Error("model.SavePlayerGameData rpcCli == nil") + return nil + } + b := false + err := rpcCli.CallWithTimeout("PlayerGameDataSvc.Save", &PlayerGameSaveReq{Platform: platform, Data: data}, &b, time.Second*30) + if err != nil { + logger.Logger.Error("model.SavePlayerGameData err:%v", err) + return err + } + return nil +} + +type PlayerGameDataFindReq struct { + Platform string + SnId int32 +} + +type PlayerGameDataFindRes struct { + Data []*PlayerGameData +} + +func GetPlayerGameData(platform string, snid int32) ([]*PlayerGameData, error) { + if rpcCli == nil { + logger.Logger.Error("model.GetPlayerGameData rpcCli == nil") + return nil, nil + } + res := &PlayerGameDataFindRes{} + err := rpcCli.CallWithTimeout("PlayerGameDataSvc.Find", &PlayerGameDataFindReq{Platform: platform, SnId: snid}, res, time.Second*30) + if err != nil { + logger.Logger.Error("model.GetPlayerGameData err:%v", err) + return nil, err + } + return res.Data, nil +} diff --git a/worldsrv/player.go b/worldsrv/player.go index 654d23a..874ebae 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -1663,14 +1663,21 @@ func (this *Player) OnLogouted() { } func (this *Player) MarshalData() (d []byte, e error) { - d, e = netlib.Gob.Marshal(this.PlayerData) + data := &model.WGPlayerInfo{ + PlayerData: this.PlayerData, + } + info := PlayerInfoMgrSingle.Players[this.SnId] + if info != nil { + data.GameData = info.GameData + } + d, e = netlib.Gob.Marshal(data) return } // UnmarshalData 更新玩家数据 // 例如游戏服数据同步 func (this *Player) UnmarshalData(data []byte, scene *Scene) { - pd := &model.PlayerData{} + pd := &model.WGPlayerInfo{} if err := netlib.Gob.Unmarshal(data, pd); err != nil { logger.Logger.Warn("Player.SyncData err:", err) return @@ -1687,6 +1694,12 @@ func (this *Player) UnmarshalData(data []byte, scene *Scene) { this.GDatas[v] = d } } + // PlayerInfo 同步 + info := PlayerInfoMgrSingle.Players[this.SnId] + if info == nil { + PlayerInfoMgrSingle.Players[this.SnId] = &PlayerInfo{} + } + info.GameData = pd.GameData this.LastRechargeWinCoin = pd.LastRechargeWinCoin oldRecharge := int64(0) diff --git a/worldsrv/playerinfo.go b/worldsrv/playerinfo.go new file mode 100644 index 0000000..850c073 --- /dev/null +++ b/worldsrv/playerinfo.go @@ -0,0 +1,128 @@ +package main + +import ( + "strconv" + + "mongo.games.com/goserver/core/basic" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/task" + + "mongo.games.com/game/common" + "mongo.games.com/game/model" + "mongo.games.com/game/worldsrv/internal" +) + +/* +玩家信息加载,缓存,持久化,缓存释放 +*/ + +func init() { + internal.RegisterPlayerLoad(PlayerInfoMgrSingle) +} + +var PlayerInfoMgrSingle = &PlayerInfoMgr{ + Players: make(map[int32]*PlayerInfo), +} + +type AllPlayerInfo struct { + GameData []*model.PlayerGameData +} + +// PlayerInfo 玩家信息 +type PlayerInfo struct { + GameData map[int32]*model.PlayerGameData // 游戏数据 +} + +type PlayerInfoMgr struct { + Players map[int32]*PlayerInfo +} + +func (p *PlayerInfoMgr) Load(platform string, snid int32, player any) *internal.PlayerLoadReplay { + var err error + allPlayerInfo := &AllPlayerInfo{ + GameData: make([]*model.PlayerGameData, 0), + } + // 游戏数据 + gameData, err := model.GetPlayerGameData(platform, snid) + if err != nil { + logger.Logger.Errorf("GetPlayerGameData snid:%v error: %v", snid, err) + goto here + } + allPlayerInfo.GameData = gameData + // ... + +here: + return &internal.PlayerLoadReplay{ + Platform: platform, + Snid: snid, + Err: err, + Data: allPlayerInfo, + } +} + +func (p *PlayerInfoMgr) Callback(player any, ret *internal.PlayerLoadReplay) { + if ret.Err != nil { + return + } + data, ok := ret.Data.(*AllPlayerInfo) + if !ok { + return + } + info := &PlayerInfo{ + GameData: make(map[int32]*model.PlayerGameData), + } + + // 游戏数据 + for _, v := range data.GameData { + info.GameData[v.Id] = v + } + // ... + + p.Players[ret.Snid] = info +} + +func (p *PlayerInfoMgr) LoadAfter(platform string, snid int32) *internal.PlayerLoadReplay { + return nil +} + +func (p *PlayerInfoMgr) CallbackAfter(ret *internal.PlayerLoadReplay) { + +} + +func (p *PlayerInfoMgr) Save(platform string, snid int32, isSync, force bool) { + var err error + f := func() { + data, ok := p.Players[snid] + if !ok { + return + } + + // 游戏数据 + err = model.SavePlayerGameData(platform, common.GetMapValues(data.GameData)) + if err != nil { + logger.Logger.Errorf("SavePlayerGameData snid:%v error: %v", snid, err) + } + // ... + } + + cf := func() { + + } + + if isSync { + f() + cf() + return + } + + task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { + f() + return nil + }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { + cf() + }), "SavePlayerInfo").StartByFixExecutor("SnId:" + strconv.Itoa(int(snid))) +} + +func (p *PlayerInfoMgr) Release(platform string, snid int32) { + delete(p.Players, snid) +} From 18a884da4342bd5a203aefa132606e7175bd73cd Mon Sep 17 00:00:00 2001 From: tomas Date: Fri, 30 Aug 2024 15:59:55 +0800 Subject: [PATCH 50/63] 11 --- common/constant.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/constant.go b/common/constant.go index 77c7b8d..a9de6f5 100644 --- a/common/constant.go +++ b/common/constant.go @@ -93,7 +93,7 @@ const ( GameId_Clawdoll = 608 // 娃娃机 __GameId_ThrGame_Min__ = 700 //################三方类################ GameId_Thr_Dg = 701 //DG Game - GameId_Thr_XHJ = 901 //DG Game + GameId_Thr_XHJ = 901 ///DG Game ) const ( From 9ab3da69a4695435927e9c949ef6cae4bf1b1a4a Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 17:18:06 +0800 Subject: [PATCH 51/63] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8B=89=E9=9C=B8?= =?UTF-8?q?=E6=B8=B8=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 7 +- data/DB_GameFree.dat | Bin 23210 -> 24124 bytes data/DB_GameFree.json | 266 ++++++++++++++++++++++++++++- data/DB_GameRule.dat | Bin 1273 -> 1417 bytes data/DB_GameRule.json | 67 ++++++-- data/DB_GiftCard.dat | Bin 57 -> 57 bytes data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes data/DB_VIPShow.dat | 2 +- data/DB_VIPShow.json | 2 +- data/gameconfig/fortunedragon.json | 10 ++ data/gameconfig/fortunemouse.json | 10 ++ data/gameconfig/fortuneox.json | 10 ++ data/gameconfig/fortunerabbit.json | 10 ++ data/gameconfig/fortunetiger.json | 10 ++ worldsrv/bagmgr.go | 12 -- xlsx/DB_GameFree.xlsx | Bin 63243 -> 65652 bytes xlsx/DB_GameRule.xlsx | Bin 12785 -> 12969 bytes xlsx/DB_VIPShow.xlsx | Bin 14551 -> 14545 bytes 19 files changed, 372 insertions(+), 34 deletions(-) create mode 100644 data/gameconfig/fortunedragon.json create mode 100644 data/gameconfig/fortunemouse.json create mode 100644 data/gameconfig/fortuneox.json create mode 100644 data/gameconfig/fortunerabbit.json create mode 100644 data/gameconfig/fortunetiger.json diff --git a/common/constant.go b/common/constant.go index a9de6f5..3c4f59c 100644 --- a/common/constant.go +++ b/common/constant.go @@ -77,7 +77,12 @@ const ( GameId_IceAge = 304 // 冰河世纪 GameId_TamQuoc = 305 // 百战成神 GameId_Fruits = 306 // 水果拉霸 - GameId_Richblessed = 307 // 多福多财 + GameId_Richblessed = 307 // 多福 + FortuneTiger = 308 // FortuneTiger + FortuneDragon = 309 // FortuneDragon + FortuneRabbit = 310 // FortuneRabbit + FortuneOx = 311 // FortuneOx + FortuneMouse = 312 // FortuneMouse __GameId_Fishing_Min__ = 400 //################捕鱼类################ GameId_HFishing = 401 //欢乐捕鱼 GameId_TFishing = 402 //天天捕鱼 diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index f91cbf96ddf4a88212669a12c826ac2ef671a4fe..10d42c96c3bcf614300371a1a122b24f45367bd7 100644 GIT binary patch delta 641 zcmZ3rm2uA=#tjZpfjJxp|LtZJ;&IC_Dk;rN4arPTEs|n1RM^5~ap41_1G5KX5~D!| zQwJlEw}J5m`wkG}5F?ABfq}s#Mn;BLK-|T|$gqKl@emWUv4O>8!ARMlT#k!p_Am0&|X0s!tl;`jgn delta 53 zcmdn9hjGSn!05p^`D3i&eEZlF?#flqsX-#0e%$h6WRlDKVKCOnjxwWMVQ|k`c%;oNUVo;IUwc}We?Cj_|4@6yQ5+4BNnb$4i*%L!yJrm0N6o5gYQ5c2y+O`qhJpL<-s0M QV&_-{^yn96E(Y2{0AnINH2?qr literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUwf4%*Cq@i+fPr!3lOp!`eqIT(KN1V28jAhA9L)0B8`*Ltqa8`M4~;19dn! SAe7iS76Co_g_(^9Dv4W}xuJHf8}PsPKe^ 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 bs1RvE|7J1&7v%j^2I&DSqCJW@@pkU7mEbfw delta 53874 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

    wJ%#O?E@PpjF&zab`;-yZFEnQ0c> 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 KK=t-t;{O0!^p-RL diff --git a/xlsx/DB_VIPShow.xlsx b/xlsx/DB_VIPShow.xlsx index 7a8b23db8cb78a95ff222ad94842765daf72d035..5e3be2e2107d0750b358d19289d4ca27b47a0dbf 100644 GIT binary patch delta 2914 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 delta 2916 zcmZ8jXHb(17EM4P^w4|ny@gN}L0af&K%|QhkSe_sdJRQCkS0YClp+h#vMPZ&FuYge%v{8=H8ie=iG7sS^vfwFxjAia3Bh30P~_d&HCk;lS74< z1qh|;2xGf?7zgAVn&TVo`)fw1 z$E;)V+z5`oblxHxJ181MTO9kM`Wxq`q)K~Z&n3%jf9*MC9@4D%@=Ot%Pc>Cy**R?8a5WWJQK)xMa??Hi$1nKWu2+3@D@omUcq4{Qg` z7r>=xH~ChFzkR%?Tq}p{kRlgPQxh^FZS63ld&_LZUN?LP+`BTLV|txg)zpqCqaK720_%_DvDHI<;+1YFVG7U$(vz`Y~y9ZaL^3IjshiKz3#^{U=MxH+OV=* ztd3_DLVU&NwNW3qh}~^Atxb-eyKvO{sX7V=F^i#Jn6WXw8bBM|C{3>;e5p~`>_@(1 zbDPFS)Vy9Oc#NhzOh0_|vS&6%b<5ObF@B>Zk?qv1ySVz`MZPx$`fI@=Ugt55m}(Z< zPrW!Z0dd)@AhNU)MbR7CYg5p)<{NkBlZ~bXx$CYx&qYEU-mPdVE0k&T8Fi5x<&0j) zWhrq_>jZRN?3eJ3-!_!tm_?Uf!l{i1{Y(wxH!}3x-G-Z#fot`;1ccG=Osl`v&Kc&n}NM#hiQ-}}9 zALIL4=8MYp=>LSFyr-jMUcP;~gG+IfnXX$VWsj$+GTT}%@MK6x`1TnCL(NbfLcQ{ygu5&AnhEs7B@=}Rsidpg(X#b2Dm0D`-b~{`h zX0B71!H(t)WI8=0t|CUAdhdv|em2edB=}?I%yOhZTx>*epMh4m&Uxq9Vu{~Bsn@4t zWn-<+hbFG$XeyXzDvxf0u(v9yjdy^c(9vW1tXwE|2bm>G&ALaepH)%gyw@#r#C`}k z){8N3@~n!b*g9pV-CtmX=5P)*BE_3T8uJL#Bw9G6YX{GJ#Wzz&LiO6IiM}q0yI;*d zWLXM&D>n>gE(21oVIg``T2;*9s)_#HW4h=e7xF#w4C*u;2E1_ORPb>9J>xt7#*>_lXp$6XuA)=ib&J zI=lPmKu{LAJ%1LNej#3i2z^cT2}8TXhd;7Y2W5nHi8G`-G+~X+4)m2Foq@zZ4HknL zc5eulw&Y|{eD0RXSLnGcY$Jnt(B1c-EAxq$Z3+*J{!nifk{Zm%;1uwuLdxKL0hb|j z!xc{CK=L{rf3*Vy-Y(MX&SepWs8+$9Puw*h2sz5D;gM5j$iY>M7mRE^z-_e=O(iUQ z$SABa^?O+w_4wDYu%9re$O|q|{d@8Eduz9gHb~D0JbPl*kS|0;Mh3c2> zZLWbp^uKN*%v&zhFTl&i&(G_3Dj}DA=jGYE%UVJkqv*{@nByTV61sKB+H}P~985+1 zQ>TTqyzdlLclR}%vv$uZnMPuwLt+(!ivrwwaJcU!hbb7@Q@yOx0;GK|IAnoNzaFF4 zH*6ZKC0jWI5~_NLE*!JZm45G3*q4txJ=E6_;G5Oa6oiUf#VWn76A+LbvC+1&L)Ir2 zBZuNWA?wMnj1-GrVH6zJJ_J6azHQ;SYI|S2*drCTu27sFX4iOoR`AI>G9fw-Z}bf> zzOH6B%_3lH)!qX7dd^+>O!B(%TNENz1DehgNfyEW(TBws9ZuICGl-YxC`<1Gpaq_H zpY2ac`RcUb+yq1DHOKG8cK6`ok(trXQNTlwy3JGYR8Y6P8R=rM1IDAC$YeL63^h>< zc=|qsl5vhHuPrfhQZ3BA$?MS^+3+not+ikmmXW!4PBB*zSN_=KbaQXJMYRP_Qrrul zdH<;co6r+9mGl5C`%qXhMd9071CE&7dvd1#FtXzH8u*I!g#7s=zS~+QpwfEwxWt;> zG03j_;neo=()M&cTeQ{)+K+is#n|G=hDzl2QkI_f4)NVRk$>8@^Ii$4c^PI|)27{(Y5%_7C2)#ryC6W7Ma(z81x-BD zx+g7KmfvhX$h=lYD?@+#US{IY<83M*hDOAlOcFqQUT9ZSpZ2@7ViHg1o{7yMxnn+k5uKr>p;1x6gi3F-wOW*WEoMG From 74efab000e8ebbfe732c905156e690a6d97a1db5 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 17:18:06 +0800 Subject: [PATCH 52/63] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8B=89=E9=9C=B8?= =?UTF-8?q?=E6=B8=B8=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 7 +- data/DB_GameFree.dat | Bin 23210 -> 24124 bytes data/DB_GameFree.json | 266 ++++++++++++++++++++++++++++- data/DB_GameRule.dat | Bin 1273 -> 1417 bytes data/DB_GameRule.json | 67 ++++++-- data/DB_GiftCard.dat | Bin 57 -> 57 bytes data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes data/DB_VIPShow.dat | 2 +- data/DB_VIPShow.json | 2 +- data/gameconfig/fortunedragon.json | 10 ++ data/gameconfig/fortunemouse.json | 10 ++ data/gameconfig/fortuneox.json | 10 ++ data/gameconfig/fortunerabbit.json | 10 ++ data/gameconfig/fortunetiger.json | 10 ++ worldsrv/bagmgr.go | 12 -- xlsx/DB_GameFree.xlsx | Bin 63243 -> 65652 bytes xlsx/DB_GameRule.xlsx | Bin 12785 -> 12969 bytes xlsx/DB_VIPShow.xlsx | Bin 14551 -> 14545 bytes 19 files changed, 372 insertions(+), 34 deletions(-) create mode 100644 data/gameconfig/fortunedragon.json create mode 100644 data/gameconfig/fortunemouse.json create mode 100644 data/gameconfig/fortuneox.json create mode 100644 data/gameconfig/fortunerabbit.json create mode 100644 data/gameconfig/fortunetiger.json diff --git a/common/constant.go b/common/constant.go index 77c7b8d..97273a0 100644 --- a/common/constant.go +++ b/common/constant.go @@ -77,7 +77,12 @@ const ( GameId_IceAge = 304 // 冰河世纪 GameId_TamQuoc = 305 // 百战成神 GameId_Fruits = 306 // 水果拉霸 - GameId_Richblessed = 307 // 多福多财 + GameId_Richblessed = 307 // 多福 + FortuneTiger = 308 // FortuneTiger + FortuneDragon = 309 // FortuneDragon + FortuneRabbit = 310 // FortuneRabbit + FortuneOx = 311 // FortuneOx + FortuneMouse = 312 // FortuneMouse __GameId_Fishing_Min__ = 400 //################捕鱼类################ GameId_HFishing = 401 //欢乐捕鱼 GameId_TFishing = 402 //天天捕鱼 diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index f91cbf96ddf4a88212669a12c826ac2ef671a4fe..10d42c96c3bcf614300371a1a122b24f45367bd7 100644 GIT binary patch delta 641 zcmZ3rm2uA=#tjZpfjJxp|LtZJ;&IC_Dk;rN4arPTEs|n1RM^5~ap41_1G5KX5~D!| zQwJlEw}J5m`wkG}5F?ABfq}s#Mn;BLK-|T|$gqKl@emWUv4O>8!ARMlT#k!p_Am0&|X0s!tl;`jgn delta 53 zcmdn9hjGSn!05p^`D3i&eEZlF?#flqsX-#0e%$h6WRlDKVKCOnjxwWMVQ|k`c%;oNUVo;IUwc}We?Cj_|4@6yQ5+4BNnb$4i*%L!yJrm0N6o5gYQ5c2y+O`qhJpL<-s0M QV&_-{^yn96E(Y2{0AnINH2?qr literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUwf4%*Cq@i+fPr!3lOp!`eqIT(KN1V28jAhA9L)0B8`*Ltqa8`M4~;19dn! SAe7iS76Co_g_(^9Dv4W}xuJHf8}PsPKe^ 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 bs1RvE|7J1&7v%j^2I&DSqCJW@@pkU7mEbfw delta 53874 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

    wJ%#O?E@PpjF&zab`;-yZFEnQ0c> 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 KK=t-t;{O0!^p-RL diff --git a/xlsx/DB_VIPShow.xlsx b/xlsx/DB_VIPShow.xlsx index 7a8b23db8cb78a95ff222ad94842765daf72d035..5e3be2e2107d0750b358d19289d4ca27b47a0dbf 100644 GIT binary patch delta 2914 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 delta 2916 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 From 0ba53df8ec96580f2683dbed185287d715de51a1 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 17:29:11 +0800 Subject: [PATCH 53/63] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8B=89=E9=9C=B8?= =?UTF-8?q?=E6=B8=B8=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/common/constant.go b/common/constant.go index 3c4f59c..c43faf4 100644 --- a/common/constant.go +++ b/common/constant.go @@ -78,11 +78,11 @@ const ( GameId_TamQuoc = 305 // 百战成神 GameId_Fruits = 306 // 水果拉霸 GameId_Richblessed = 307 // 多福 - FortuneTiger = 308 // FortuneTiger - FortuneDragon = 309 // FortuneDragon - FortuneRabbit = 310 // FortuneRabbit - FortuneOx = 311 // FortuneOx - FortuneMouse = 312 // FortuneMouse + GameId_FortuneTiger = 308 // FortuneTiger + GameId_FortuneDragon = 309 // FortuneDragon + GameId_FortuneRabbit = 310 // FortuneRabbit + GameId_FortuneOx = 311 // FortuneOx + GameId_FortuneMouse = 312 // FortuneMouse __GameId_Fishing_Min__ = 400 //################捕鱼类################ GameId_HFishing = 401 //欢乐捕鱼 GameId_TFishing = 402 //天天捕鱼 From 89bdfac420287dfdbd0d71ac1729060463932513 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 17:29:11 +0800 Subject: [PATCH 54/63] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8B=89=E9=9C=B8?= =?UTF-8?q?=E6=B8=B8=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/common/constant.go b/common/constant.go index 97273a0..5794f0f 100644 --- a/common/constant.go +++ b/common/constant.go @@ -78,11 +78,11 @@ const ( GameId_TamQuoc = 305 // 百战成神 GameId_Fruits = 306 // 水果拉霸 GameId_Richblessed = 307 // 多福 - FortuneTiger = 308 // FortuneTiger - FortuneDragon = 309 // FortuneDragon - FortuneRabbit = 310 // FortuneRabbit - FortuneOx = 311 // FortuneOx - FortuneMouse = 312 // FortuneMouse + GameId_FortuneTiger = 308 // FortuneTiger + GameId_FortuneDragon = 309 // FortuneDragon + GameId_FortuneRabbit = 310 // FortuneRabbit + GameId_FortuneOx = 311 // FortuneOx + GameId_FortuneMouse = 312 // FortuneMouse __GameId_Fishing_Min__ = 400 //################捕鱼类################ GameId_HFishing = 401 //欢乐捕鱼 GameId_TFishing = 402 //天天捕鱼 From b7d4efb7a6a208187e3fa2c187873d41ae1e7c85 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 30 Aug 2024 18:52:11 +0800 Subject: [PATCH 55/63] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {worldsrv => common}/clock.go | 47 ++++++------ gamesrv/action/action_server.go | 32 ++++----- gamesrv/base/scene_mgr.go | 99 +++++--------------------- gamesrv/base/scene_policy.go | 7 -- gamesrv/tienlen/scenepolicy_tienlen.go | 10 ++- worldsrv/awardlogmgr.go | 4 +- worldsrv/cachedata.go | 7 +- worldsrv/permitmgr.go | 6 +- worldsrv/platformmgr.go | 6 +- worldsrv/player.go | 4 +- worldsrv/playermgr.go | 6 +- worldsrv/playernotify.go | 6 +- worldsrv/qmflowmgr.go | 7 +- worldsrv/rankmatch.go | 7 +- worldsrv/scenemgr.go | 8 +-- worldsrv/tournament.go | 4 +- worldsrv/transact_daytimechange.go | 12 ++-- worldsrv/welfmgr.go | 6 +- 18 files changed, 108 insertions(+), 170 deletions(-) rename {worldsrv => common}/clock.go (77%) diff --git a/worldsrv/clock.go b/common/clock.go similarity index 77% rename from worldsrv/clock.go rename to common/clock.go index 63b3ea6..fc00b79 100644 --- a/worldsrv/clock.go +++ b/common/clock.go @@ -1,27 +1,26 @@ -package main +package common import ( "time" - "mongo.games.com/game/common" "mongo.games.com/goserver/core/module" ) -var ClockMgrSington = &ClockMgr{ +var ClockMgrSingleton = &ClockMgr{ LastHour: -1, LastDay: -1, Notifying: false, } const ( - CLOCK_EVENT_SECOND int = iota - CLOCK_EVENT_MINUTE - CLOCK_EVENT_HOUR - CLOCK_EVENT_DAY - CLOCK_EVENT_WEEK - CLOCK_EVENT_MONTH - CLOCK_EVENT_SHUTDOWN - CLOCK_EVENT_MAX + ClockEventSecond int = iota + ClockEventMinute + ClockEventHour + ClockEventDay + ClockEventWeek + ClockEventMonth + ClockEventShutdown + ClockEventMax ) type ClockSinker interface { @@ -38,7 +37,7 @@ type ClockSinker interface { type BaseClockSinker struct { } -func (s *BaseClockSinker) InterestClockEvent() int { return (1 << CLOCK_EVENT_MAX) - 1 } +func (s *BaseClockSinker) InterestClockEvent() int { return (1 << ClockEventMax) - 1 } func (s *BaseClockSinker) OnSecTimer() {} func (s *BaseClockSinker) OnMiniTimer() {} func (s *BaseClockSinker) OnHourTimer() {} @@ -48,7 +47,7 @@ func (s *BaseClockSinker) OnMonthTimer() {} func (s *BaseClockSinker) OnShutdown() {} type ClockMgr struct { - sinkers [CLOCK_EVENT_MAX][]ClockSinker + sinkers [ClockEventMax][]ClockSinker LastTickTime time.Time LastMonth time.Month LastWeek int @@ -60,9 +59,9 @@ type ClockMgr struct { LastFiveMin int } -func (this *ClockMgr) RegisteSinker(sinker ClockSinker) { +func (this *ClockMgr) RegisterSinker(sinker ClockSinker) { interest := sinker.InterestClockEvent() - for i := 0; i < CLOCK_EVENT_MAX; i++ { + for i := 0; i < ClockEventMax; i++ { if (1< Date: Mon, 2 Sep 2024 10:08:23 +0800 Subject: [PATCH 56/63] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/tienlen/scenepolicy_tienlen.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 1140eb4..5e654e1 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -148,9 +148,6 @@ func (this *ScenePolicyTienLen) OnPlayerLeave(s *base.Scene, p *base.Player, rea } sceneEx.OnPlayerLeave(p, reason) s.FirePlayerEvent(p, base.PlayerEventLeave, []int64{int64(reason)}) - if s.IsCustom() && len(s.Players) == 0 { - s.Destroy(true) - } } // 玩家掉线 @@ -606,6 +603,9 @@ func (this *SceneBaseStateTienLen) OnTick(s *base.Scene) { s.RandRobotCnt() s.SetTimerRandomRobot(s.GetRobotTime()) } + if s.IsCustom() && len(s.Players) == 0 { + s.Destroy(true) + } } // 发送玩家操作情况 @@ -2570,9 +2570,6 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { sceneEx.RoundEndTime = append(sceneEx.RoundEndTime, time.Now().Unix()) sceneEx.RoundLogId = append(sceneEx.RoundLogId, sceneEx.recordId) if sceneEx.NumOfGames >= int(sceneEx.TotalOfGames) { - sceneEx.BilledList = make(map[int32]*[]*BilledInfo) - sceneEx.RoundEndTime = sceneEx.RoundEndTime[:0] - sceneEx.RoundLogId = sceneEx.RoundLogId[:0] packBilled := &tienlen.SCTienLenCycleBilled{} for snid, billedList := range sceneEx.BilledList { info := &tienlen.TienLenCycleBilledInfo{ @@ -2636,6 +2633,9 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { logger.Logger.Tracef("SCTienLenCycleBilled: %v", packBilled) s.SyncSceneState(common.SceneStateEnd) sceneEx.SaveCustomLog() + sceneEx.BilledList = make(map[int32]*[]*BilledInfo) + sceneEx.RoundEndTime = sceneEx.RoundEndTime[:0] + sceneEx.RoundLogId = sceneEx.RoundLogId[:0] } } From 9f490a7aca0e4177a461a1f79bb7833fa9f91681 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 11:05:45 +0800 Subject: [PATCH 57/63] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/logchannel.go | 3 +++ gamesrv/tienlen/scenedata_tienlen.go | 1 + gamesrv/tienlen/scenepolicy_tienlen.go | 2 +- model/customlog.go | 33 +++++++++++--------------- model/gameplayerlistlog.go | 1 + worldsrv/action_game.go | 2 ++ worldsrv/playernotify.go | 3 +++ worldsrv/scenemgr.go | 2 +- 8 files changed, 26 insertions(+), 21 deletions(-) diff --git a/gamesrv/base/logchannel.go b/gamesrv/base/logchannel.go index 4f77a44..de78540 100644 --- a/gamesrv/base/logchannel.go +++ b/gamesrv/base/logchannel.go @@ -3,6 +3,8 @@ package base import ( "reflect" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/model" "mongo.games.com/game/mq" ) @@ -38,6 +40,7 @@ func (c *LogChannel) WriteLog(log interface{}) { if cname == "" { cname = "_null_" } + logger.Logger.Tracef("LogChannel ==> %#v", log) mq.Send(cname, log) } diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index f5c8548..e581d75 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -2114,6 +2114,7 @@ func (this *TienLenSceneData) SaveCustomLog() { state = 1 } log := &model.CustomLog{ + Platform: this.Platform, CycleId: this.CycleID, RoomConfigId: this.GetCustom().GetRoomConfigId(), RoomId: this.SceneId, diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 5e654e1..020508a 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -2608,7 +2608,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { if p != nil { var items []*model.Item for _, v := range packBilled.List[0].Award { - itemData := srvdata.GameItemMgr.Get(p.Platform, p.SnId) + itemData := srvdata.GameItemMgr.Get(p.Platform, v.GetId()) if itemData != nil { items = append(items, &model.Item{ ItemId: v.GetId(), diff --git a/model/customlog.go b/model/customlog.go index 08e6a27..67b82ec 100644 --- a/model/customlog.go +++ b/model/customlog.go @@ -1,9 +1,5 @@ package model -import ( - "github.com/globalsign/mgo/bson" -) - var ( DbCustomLogDBName = "log" DbCustomLogCollName = "log_custom" @@ -22,19 +18,18 @@ type RoundInfo struct { } type CustomLog struct { - Id bson.ObjectId `bson:"_id"` - Platform string `bson:"-"` - CycleId string // 本轮id,多局游戏属于同一轮 - RoomConfigId int32 // 房间配置id - GameFreeId int32 // 场次id - TotalRound int32 // 总局数 - PlayerNum int32 // 最大人数 - Password string // 密码 - CostType int32 // 付费方式 1房主 2AA - Voice int32 // 是否开启语音 1开启 - RoomId int32 // 房间id - SnId []PlayerInfo // 所有玩家 - List []RoundInfo // 对局记录 - StartTs, EndTs int64 // 开始,结束时间 - State int32 // 0正常结束 1后台中途解散 + Platform string `bson:"-"` + CycleId string // 本轮id,多局游戏属于同一轮 + RoomConfigId int32 // 房间配置id + GameFreeId int32 // 场次id + TotalRound int32 // 总局数 + PlayerNum int32 // 最大人数 + Password string // 密码 + CostType int32 // 付费方式 1房主 2AA + Voice int32 // 是否开启语音 1开启 + RoomId int32 // 房间id + SnId []PlayerInfo // 所有玩家 + List []RoundInfo // 对局记录 + StartTs, EndTs int64 // 开始,结束时间 + State int32 // 0正常结束 1后台中途解散 } diff --git a/model/gameplayerlistlog.go b/model/gameplayerlistlog.go index 4bbd768..4441b2d 100644 --- a/model/gameplayerlistlog.go +++ b/model/gameplayerlistlog.go @@ -99,6 +99,7 @@ func NewGamePlayerListLogEx(snid int32, gamedetailedlogid string, platform, chan cl.Time = tNow cl.MatchId = matchid cl.MatchType = matchType + cl.CycleId = cycleId return cl } diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index d53bca5..a080fc6 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1348,6 +1348,8 @@ func CSGetPrivateRoomListHandler(s *netlib.Session, packetId int, data interface return nil } + PlayerNotifySingle.AddTime(p.SnId, common.NotifyPrivateRoomList, time.Second*15) + pack := &gamehall.SCGetPrivateRoomList{} scenes := SceneMgrSingleton.FindRoomList(&FindRoomParam{ Platform: p.Platform, diff --git a/worldsrv/playernotify.go b/worldsrv/playernotify.go index 7999b8e..e944769 100644 --- a/worldsrv/playernotify.go +++ b/worldsrv/playernotify.go @@ -3,6 +3,8 @@ package main import ( "time" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/common" ) @@ -76,4 +78,5 @@ func (p *PlayerNotify) GetPlayers(tp common.NotifyType) []int32 { func (p *PlayerNotify) SendToClient(tp common.NotifyType, packetId int, pack interface{}) { ids := p.GetPlayers(tp) PlayerMgrSington.BroadcastMessageToTarget(ids, packetId, pack) + logger.Logger.Tracef("PlayerNotify SendToClient tp:%v ids:%v", tp, ids) } diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 4938b49..864f2ca 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -85,7 +85,7 @@ func (m *SceneMgr) GenOneMatchSceneId() int { func (m *SceneMgr) GenPassword() string { for i := 0; i < 100; i++ { - s := strconv.Itoa(common.RandInt(10000, 100000)) + s := strconv.Itoa(common.RandInt(100000, 1000000)) if _, ok := m.password[s]; !ok { m.password[s] = struct{}{} return s From 04a0772415850ef732d37a6d46117977085bc985 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 14:35:10 +0800 Subject: [PATCH 58/63] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scene.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/worldsrv/scene.go b/worldsrv/scene.go index bd5e0eb..cba5275 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -422,6 +422,7 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { } this.gameSess.AddPlayer(p) FirePlayerEnterScene(p, this) + this.sp.OnPlayerEnter(this, p) return true } @@ -507,6 +508,8 @@ func (this *Scene) lastScene(p *Player) { } func (this *Scene) DelPlayer(p *Player) bool { + FirePlayerLeaveScene(p, this) + this.sp.OnPlayerLeave(this, p) if p.scene != this { roomId := 0 if p.scene != nil { From 26db8f4b21924dbaf2efcd80a6b67ff557871e69 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 14:55:18 +0800 Subject: [PATCH 59/63] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamerule/tienlen/constants.go | 1 + gamesrv/tienlen/scenepolicy_tienlen.go | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/gamerule/tienlen/constants.go b/gamerule/tienlen/constants.go index 24ff3bc..024f6a2 100644 --- a/gamerule/tienlen/constants.go +++ b/gamerule/tienlen/constants.go @@ -29,6 +29,7 @@ const ( TIenLenTianhuTimeout = time.Second * 2 // 天胡动画时长 TienLenHandNotExceedTimeLimit = time.Second * 3 //玩家没有牌可以接上家的牌,出牌时间上限 TienLenHandAutoStateTimeOut = time.Second * 1 //玩家托管出牌时间上限 + TienLenCustomWaiteStatTimeout = time.Millisecond * 1500 ) // 场景状态 diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 020508a..b679abd 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -914,10 +914,12 @@ func (this *SceneWaitStartStateTienLen) OnTick(s *base.Scene) { } } if sceneEx.IsCustom() { - if sceneEx.CanStart() { - s.ChangeSceneState(rule.TienLenSceneStateHandCard) - } else { - s.ChangeSceneState(rule.TienLenSceneStateWaitPlayer) + if time.Now().Sub(sceneEx.StateStartTime) > rule.TienLenCustomWaiteStatTimeout { + if sceneEx.CanStart() { + s.ChangeSceneState(rule.TienLenSceneStateHandCard) + } else { + s.ChangeSceneState(rule.TienLenSceneStateWaitPlayer) + } } } } From 00dcc3199f2b3dd1bb753958888dde3b67a3d3ef Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 16:13:23 +0800 Subject: [PATCH 60/63] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E4=B8=BB=E4=BB=98=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/tienlen/scenepolicy_tienlen.go | 2 +- worldsrv/action_game.go | 4 ++ worldsrv/bagmgr.go | 2 +- worldsrv/scenepolicydata.go | 66 +++++++++++++++++++++++--- worldsrv/trascate_webapi.go | 26 +++++++--- 5 files changed, 84 insertions(+), 16 deletions(-) diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index b679abd..a64bbd5 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -825,7 +825,7 @@ func (this *SceneWaitStartStateTienLen) OnEnter(s *base.Scene) { if sceneEx, ok := s.GetExtraData().(*TienLenSceneData); ok { sceneEx.Clear() sceneEx.SetGaming(false) - this.BroadcastRoomState(s, this.GetState()) + this.BroadcastRoomState(s, this.GetState(), int64(sceneEx.NumOfGames)) logger.Logger.Trace("(this *SceneWaitStartStateTienLen) OnEnter", this.GetState()) } } diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index a080fc6..7785ce8 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1319,6 +1319,10 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ return nil } + if cfg.GetCostType() == 1 { + sp.CostPayment(scene, p) + } + pack = &gamehall.SCCreatePrivateRoom{ OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, GameFreeId: msg.GetGameFreeId(), diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index 497c69d..acb0556 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -450,7 +450,7 @@ func (this *BagMgr) AddItem(p *Player, itemId, itemNum int64, add int64, gainWay return this.AddItems(p, []*Item{{ItemId: int32(itemId), ItemNum: itemNum}}, add, gainWay, operator, remark, gameId, gameFreeId, noLog, params...) } -func (this *BagMgr) AddItemsOffline(platform string, snid int32, addItems []*Item, gainWay int32, operator, remark string, +func (this *BagMgr) AddItemsOffline(platform string, snid int32, addItems []*model.Item, gainWay int32, operator, remark string, gameId, gameFreeId int64, noLog bool, callback func(err error)) { var findPlayer *model.PlayerBaseInfo task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 015e7b0..2aa2754 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -2,6 +2,8 @@ package main import ( "math" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/common" "mongo.games.com/game/model" hallproto "mongo.games.com/game/protocol/gamehall" @@ -29,6 +31,10 @@ func (spd *ScenePolicyData) OnStart(s *Scene) { // 场景关闭事件 func (spd *ScenePolicyData) OnStop(s *Scene) { s.NotifyPrivateRoom(common.ListDel) + // 房主付费,房间没有玩就解散了,返还房主建房费用 + if s.IsCustom() && s.GetCostType() == 1 && s.currRound == 0 { + spd.GiveCostPayment(s, s.creator) + } } // 场景心跳事件 @@ -60,8 +66,10 @@ func (spd *ScenePolicyData) OnSceneState(s *Scene, state int) { case common.SceneStateStart: s.NotifyPrivateRoom(common.ListModify) if s.IsCustom() { - for _, v := range s.players { - spd.CostPayment(s, v) + if s.GetCostType() == 2 { + for _, v := range s.players { + spd.CostPayment(s, v) + } } } @@ -85,13 +93,13 @@ func (spd *ScenePolicyData) CanEnter(s *Scene, p *Player) int { return 0 } -func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player, f func(items []*model.Item)) bool { +func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, snid int32, f func(items []*model.Item)) bool { isEnough := true var items []*model.Item if costType == 1 { // 房主 for _, v := range roomConfig.GetCost() { - if item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()); item == nil || item.ItemNum < v.GetItemNum() { + if item := BagMgrSingleton.GetItem(snid, v.GetItemId()); item == nil || item.ItemNum < v.GetItemNum() { isEnough = false break } else { @@ -105,7 +113,7 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba // AA for _, v := range roomConfig.GetCost() { n := int64(math.Ceil(float64(v.GetItemNum()) / float64(playerNum))) - if item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()); item == nil || item.ItemNum < n { + if item := BagMgrSingleton.GetItem(snid, v.GetItemId()); item == nil || item.ItemNum < n { isEnough = false break } else { @@ -126,7 +134,7 @@ func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *weba if roomConfig == nil { return false } - return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*model.Item) {}) + return spd.costEnough(costType, playerNum, roomConfig, p.SnId, func(items []*model.Item) {}) } func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { @@ -134,7 +142,10 @@ func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { if roomConfig == nil { return false } - return spd.costEnough(int(roomConfig.GetCostType()), s.playerNum, roomConfig, p, func(items []*model.Item) { + return spd.costEnough(int(roomConfig.GetCostType()), s.playerNum, roomConfig, p.SnId, func(items []*model.Item) { + for _, v := range items { + v.ItemNum = -v.ItemNum + } BagMgrSingleton.AddItemsV2(&model.AddItemParam{ P: p.PlayerData, Change: items, @@ -148,6 +159,47 @@ func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { }) } +// GiveCostPayment 退房费 +func (spd *ScenePolicyData) GiveCostPayment(s *Scene, snid int32) bool { + roomConfig := PlatformMgrSingleton.GetConfig(s.limitPlatform.IdStr).RoomConfig[s.GetRoomConfigId()] + if roomConfig == nil { + return false + } + + if roomConfig.GetCostType() != 1 { // 只有房主付费才有返还 + return false + } + + var items []*model.Item + for _, v := range roomConfig.GetCost() { + items = append(items, &model.Item{ + ItemId: v.GetItemId(), + ItemNum: v.GetItemNum(), + }) + } + + p := PlayerMgrSington.GetPlayerBySnId(snid) + if p != nil { + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: items, + GainWay: common.GainWayRoomCost, + Operator: "system", + Remark: "竞技场房间费用返还", + GameId: int64(s.gameId), + GameFreeId: int64(s.dbGameFree.GetId()), + NoLog: false, + RoomConfigId: roomConfig.GetId(), + }) + } else { + BagMgrSingleton.AddItemsOffline(s.limitPlatform.IdStr, snid, items, common.GainWayRoomCost, "system", + "竞技场费用返还", int64(s.gameId), int64(s.dbGameFree.GetId()), false, func(err error) { + logger.Logger.Errorf("竞技场房间费用返还失败, err: %v", err) + }) + } + return false +} + func (spd *ScenePolicyData) GetBetState() int32 { return spd.BetState } diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 7106457..454fedd 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -3375,19 +3375,25 @@ func init() { } addvcoin := msg.NeedNum jPrice := msg.JPrice - var items []*Item + var items []*model.Item //V卡 if addvcoin > 0 { - items = append(items, &Item{ItemId: common.ItemIDVCard, ItemNum: int64(addvcoin)}) + items = append(items, &model.Item{ItemId: common.ItemIDVCard, ItemNum: int64(addvcoin)}) } //金券 if jPrice > 0 { - items = append(items, &Item{ItemId: common.ItemIDJCard, ItemNum: int64(jPrice)}) + items = append(items, &model.Item{ItemId: common.ItemIDJCard, ItemNum: int64(jPrice)}) } remark := fmt.Sprintf("兑换撤单 %v-%v", msg.GoodsId, msg.Name) if player != nil { // 在线 - if _, code, _ := BagMgrSingleton.AddItems(player, items, 0, common.GainWay_Exchange, "system", remark, 0, 0, false); code != bag.OpResultCode_OPRC_Sucess { // 领取失败 + if _, code, _ := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: player.PlayerData, + Change: items, + GainWay: common.GainWay_Exchange, + Operator: "system", + Remark: remark, + }); code != bag.OpResultCode_OPRC_Sucess { // 领取失败 logger.Logger.Errorf("UpExchangeStatus AddItems err", code) pack.Msg = "AddItems err" return common.ResponseTag_ParamError, pack @@ -3744,9 +3750,9 @@ func init() { pack.Msg = "参数错误" return common.ResponseTag_ParamError, pack } - var items []*Item + var items []*model.Item for _, info := range msg.ItemInfo { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: info.ItemId, // 物品id ItemNum: info.ItemNum, // 数量 ObtainTime: time.Now().Unix(), @@ -3755,7 +3761,13 @@ func init() { p := PlayerMgrSington.GetPlayerBySnId(msg.GetSnid()) if p != nil { //获取道具Id - BagMgrSingleton.AddItems(p, items, 0, msg.GetTypeId(), "system", msg.GetRemark(), 0, 0, false) + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: items, + GainWay: msg.GetTypeId(), + Operator: "system", + Remark: msg.GetRemark(), + }) pack.Tag = webapiproto.TagCode_SUCCESS pack.Msg = "AddItem success" return common.ResponseTag_Ok, pack From 151a739dab201f7bbbb9cdf49647248a52cf2917 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 16:25:46 +0800 Subject: [PATCH 61/63] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scene.go | 6 ++++++ worldsrv/scenemgr.go | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/worldsrv/scene.go b/worldsrv/scene.go index cba5275..333f90e 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -135,6 +135,12 @@ func NewScene(args *CreateSceneParam) *Scene { } } } + if s.MatchParam == nil { + s.MatchParam = new(serverproto.MatchParam) + } + if s.CustomParam == nil { + s.CustomParam = new(serverproto.CustomParam) + } s.sp.OnStart(s) return s } diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 864f2ca..42c33e6 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -155,7 +155,7 @@ func (m *SceneMgr) GetScenesByGameFreeId(gameFreeId int32) []*Scene { func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene { var scenes []*Scene for _, value := range m.scenes { - if value.MatchSortId == sortId { + if value.GetMatchSortId() == sortId { s := m.GetScene(value.sceneId) if s != nil { scenes = append(scenes, value) From d2c5c4f1599d81ad5832931912b4416225a7ea52 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 17:31:45 +0800 Subject: [PATCH 62/63] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E7=A4=BC=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/l_jybuser.go | 6 ++++-- model/jyb.go | 2 +- worldsrv/hundredscenemgr.go | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dbproxy/svc/l_jybuser.go b/dbproxy/svc/l_jybuser.go index efa1a00..a8dc343 100644 --- a/dbproxy/svc/l_jybuser.go +++ b/dbproxy/svc/l_jybuser.go @@ -156,10 +156,12 @@ func upJybUser(cjybuse, cjyb *mongo.Collection, snId, codeType int32, plt, useCo if jybuser.JybInfos == nil { jybuser.JybInfos = make(map[string]int32) } else if _, exist := jybuser.JybInfos[jybuseerid]; exist { // 该类型礼包玩家已经领取过 - return model.ErrJYBPlCode + if ret.CodeType != 3 { + return model.ErrJYBPlCode + } } - jybuser.JybInfos[jybuseerid] = 1 + jybuser.JybInfos[jybuseerid]++ err = cjybuse.Update(bson.M{"_id": jybuser.JybUserId}, bson.D{{"$set", bson.D{{"jybinfos", jybuser.JybInfos}}}}) if err != nil { diff --git a/model/jyb.go b/model/jyb.go index c365ef4..78b60f0 100644 --- a/model/jyb.go +++ b/model/jyb.go @@ -53,7 +53,7 @@ type JybInfo struct { JybId bson.ObjectId `bson:"_id"` // 礼包ID Platform string //平台 Name string // 礼包名称 - CodeType int32 // 礼包类型 1 通用 2 特殊 + CodeType int32 // 礼包类型 1 通用 2专属(自动生成兑换码,每个玩家领一个) 3活动(自动生产兑换码,每个兑换码领一个) StartTime int64 // 开始时间 Unix EndTime int64 // 结束时间 Content string // 礼包内容 diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index 2766caa..70c59e0 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -346,7 +346,7 @@ func (this *HundredSceneMgr) ModuleName() string { } func (this *HundredSceneMgr) Init() { - this.TryCreateRoom() + //this.TryCreateRoom() } func (this *HundredSceneMgr) Update() { From 05a54af2db8c5218d6fdf4a9720e87f690864ae9 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Mon, 2 Sep 2024 17:31:45 +0800 Subject: [PATCH 63/63] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E7=A4=BC=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/l_jybuser.go | 6 ++++-- model/config.go | 4 ++-- model/jyb.go | 2 +- worldsrv/hundredscenemgr.go | 2 +- worldsrv/shopmgr.go | 30 +++++++++++++++--------------- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/dbproxy/svc/l_jybuser.go b/dbproxy/svc/l_jybuser.go index efa1a00..a8dc343 100644 --- a/dbproxy/svc/l_jybuser.go +++ b/dbproxy/svc/l_jybuser.go @@ -156,10 +156,12 @@ func upJybUser(cjybuse, cjyb *mongo.Collection, snId, codeType int32, plt, useCo if jybuser.JybInfos == nil { jybuser.JybInfos = make(map[string]int32) } else if _, exist := jybuser.JybInfos[jybuseerid]; exist { // 该类型礼包玩家已经领取过 - return model.ErrJYBPlCode + if ret.CodeType != 3 { + return model.ErrJYBPlCode + } } - jybuser.JybInfos[jybuseerid] = 1 + jybuser.JybInfos[jybuseerid]++ err = cjybuse.Update(bson.M{"_id": jybuser.JybUserId}, bson.D{{"$set", bson.D{{"jybinfos", jybuser.JybInfos}}}}) if err != nil { diff --git a/model/config.go b/model/config.go index bd47bb1..0ccec47 100644 --- a/model/config.go +++ b/model/config.go @@ -34,7 +34,7 @@ const ( type ShopInfo struct { Id int32 // 商品ID - Page int32 // 页面 1,金币页面 2,钻石页面 3,道具页面 + Page int32 // 页面 1,金币页面 2,钻石页面 3,道具页面 4,房卡 Order int32 // 排序 页面内商品的位置排序 Location []int32 // 显示位置 第1位,竖版大厅 第2位,Tienlen1级选场 第3位,捕鱼1级选场 Picture string // 图片id @@ -44,7 +44,7 @@ type ShopInfo struct { AdTime int32 // 观看几次广告 RepeatTimes int32 // 领取次数 CoolingTime []int32 // 观看冷却时间 - Type int32 // 获得类型 1,金币 2,钻石 3,道具类型 + Type int32 // 获得类型 1,金币 2,钻石 3,道具类型 4,房卡 Amount int64 // 获得数量 AddArea []int32 // 加送百分比(比如加送10%,就配置110) ItemId int32 // 获得道具ID diff --git a/model/jyb.go b/model/jyb.go index c365ef4..78b60f0 100644 --- a/model/jyb.go +++ b/model/jyb.go @@ -53,7 +53,7 @@ type JybInfo struct { JybId bson.ObjectId `bson:"_id"` // 礼包ID Platform string //平台 Name string // 礼包名称 - CodeType int32 // 礼包类型 1 通用 2 特殊 + CodeType int32 // 礼包类型 1 通用 2专属(自动生成兑换码,每个玩家领一个) 3活动(自动生产兑换码,每个兑换码领一个) StartTime int64 // 开始时间 Unix EndTime int64 // 结束时间 Content string // 礼包内容 diff --git a/worldsrv/hundredscenemgr.go b/worldsrv/hundredscenemgr.go index 2766caa..70c59e0 100644 --- a/worldsrv/hundredscenemgr.go +++ b/worldsrv/hundredscenemgr.go @@ -346,7 +346,7 @@ func (this *HundredSceneMgr) ModuleName() string { } func (this *HundredSceneMgr) Init() { - this.TryCreateRoom() + //this.TryCreateRoom() } func (this *HundredSceneMgr) Update() { diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index 5cce9b1..a296bee 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -63,6 +63,8 @@ const ( ShopTypeCoin = iota + 1 // 金币 ShopTypeDiamond // 钻石 ShopTypeItem // 道具 + ShopTypeFangKa // 房卡 + ShopTypeMax ) // 兑换商品状态 @@ -539,10 +541,10 @@ func (this *ShopMgr) shopAddItem(p *Player, shopInfo *model.ShopInfo, vipShopId // createOrder 保存购买记录 func (this *ShopMgr) createOrder(p *Player, shopInfo *model.ShopInfo, costNum int64, amount [3]int32) { - if shopInfo.Type < ShopTypeCoin && shopInfo.Type > ShopTypeItem { - logger.Logger.Errorf("createOrder err: type = %v", shopInfo.Type) - return - } + //if shopInfo.Type < ShopTypeCoin && shopInfo.Type >= ShopTypeMax { + // logger.Logger.Errorf("createOrder err: type = %v", shopInfo.Type) + // return + //} task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { dbShop := model.NewDbShop(p.Platform, shopInfo.Page, amount[:], "sys", 0, shopInfo.ConstType, int32(costNum), @@ -1228,17 +1230,15 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, amount[ShopTypeDiamond-1] = int32(addTotal) var itemInfo []model.ItemInfo var webItemInfo []*webapi_proto.ItemInfo - if shopInfo.AddItemInfo != nil { - for _, info := range shopInfo.AddItemInfo { - itemInfo = append(itemInfo, model.ItemInfo{ - ItemId: info.ItemId, - ItemNum: int64(info.ItemNum), - }) - webItemInfo = append(webItemInfo, &webapi_proto.ItemInfo{ - ItemId: info.ItemId, - ItemNum: info.ItemNum, - }) - } + for _, info := range shopInfo.GetItems() { + itemInfo = append(itemInfo, model.ItemInfo{ + ItemId: info.ItemId, + ItemNum: info.ItemNum, + }) + webItemInfo = append(webItemInfo, &webapi_proto.ItemInfo{ + ItemId: info.ItemId, + ItemNum: info.ItemNum, + }) } dbShop = this.NewDbShop(p, shopInfo.Page, amount[:], ShopConsumeMoney, costNum,