// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.28.1
// 	protoc        v3.20.0--rc2
// source: logic.ext.proto

package pb

import (
	context "context"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

type MemberType int32

const (
	MemberType_GMT_UNKNOWN MemberType = 0 // 未知
	MemberType_GMT_ADMIN   MemberType = 1 // 群主
	MemberType_GMT_MEMBER  MemberType = 2 // 成员
	MemberType_GMT_MANAGE  MemberType = 3 // 管理员
)

// Enum value maps for MemberType.
var (
	MemberType_name = map[int32]string{
		0: "GMT_UNKNOWN",
		1: "GMT_ADMIN",
		2: "GMT_MEMBER",
		3: "GMT_MANAGE",
	}
	MemberType_value = map[string]int32{
		"GMT_UNKNOWN": 0,
		"GMT_ADMIN":   1,
		"GMT_MEMBER":  2,
		"GMT_MANAGE":  3,
	}
)

func (x MemberType) Enum() *MemberType {
	p := new(MemberType)
	*p = x
	return p
}

func (x MemberType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (MemberType) Descriptor() protoreflect.EnumDescriptor {
	return file_logic_ext_proto_enumTypes[0].Descriptor()
}

func (MemberType) Type() protoreflect.EnumType {
	return &file_logic_ext_proto_enumTypes[0]
}

func (x MemberType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use MemberType.Descriptor instead.
func (MemberType) EnumDescriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{0}
}

type AllMemberBannedType int32

const (
	AllMemberBannedType_UNKNOWN_All_Member_Banned AllMemberBannedType = 0 // 未知
	AllMemberBannedType_YES_All_Member_Banned     AllMemberBannedType = 1 // 是-全员禁言
	AllMemberBannedType_NOT_All_Member_Banned     AllMemberBannedType = 2 // 否-全员禁言
)

// Enum value maps for AllMemberBannedType.
var (
	AllMemberBannedType_name = map[int32]string{
		0: "UNKNOWN_All_Member_Banned",
		1: "YES_All_Member_Banned",
		2: "NOT_All_Member_Banned",
	}
	AllMemberBannedType_value = map[string]int32{
		"UNKNOWN_All_Member_Banned": 0,
		"YES_All_Member_Banned":     1,
		"NOT_All_Member_Banned":     2,
	}
)

func (x AllMemberBannedType) Enum() *AllMemberBannedType {
	p := new(AllMemberBannedType)
	*p = x
	return p
}

func (x AllMemberBannedType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (AllMemberBannedType) Descriptor() protoreflect.EnumDescriptor {
	return file_logic_ext_proto_enumTypes[1].Descriptor()
}

func (AllMemberBannedType) Type() protoreflect.EnumType {
	return &file_logic_ext_proto_enumTypes[1]
}

func (x AllMemberBannedType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use AllMemberBannedType.Descriptor instead.
func (AllMemberBannedType) EnumDescriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{1}
}

type AllAddFriendType int32

const (
	AllAddFriendType_UNKNOWN_All_Add_Friend AllAddFriendType = 0 // 未知
	AllAddFriendType_YES_All_Add_Friend     AllAddFriendType = 1 // 是-允许加好友
	AllAddFriendType_NOT_All_Add_Friend     AllAddFriendType = 2 // 否-禁止加好友
)

// Enum value maps for AllAddFriendType.
var (
	AllAddFriendType_name = map[int32]string{
		0: "UNKNOWN_All_Add_Friend",
		1: "YES_All_Add_Friend",
		2: "NOT_All_Add_Friend",
	}
	AllAddFriendType_value = map[string]int32{
		"UNKNOWN_All_Add_Friend": 0,
		"YES_All_Add_Friend":     1,
		"NOT_All_Add_Friend":     2,
	}
)

func (x AllAddFriendType) Enum() *AllAddFriendType {
	p := new(AllAddFriendType)
	*p = x
	return p
}

func (x AllAddFriendType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (AllAddFriendType) Descriptor() protoreflect.EnumDescriptor {
	return file_logic_ext_proto_enumTypes[2].Descriptor()
}

func (AllAddFriendType) Type() protoreflect.EnumType {
	return &file_logic_ext_proto_enumTypes[2]
}

func (x AllAddFriendType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use AllAddFriendType.Descriptor instead.
func (AllAddFriendType) EnumDescriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{2}
}

type RegisterDeviceReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Type          int32  `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"`                                       // 设备类型
	Brand         string `protobuf:"bytes,3,opt,name=brand,proto3" json:"brand,omitempty"`                                      // 厂商
	Model         string `protobuf:"bytes,4,opt,name=model,proto3" json:"model,omitempty"`                                      // 机型
	SystemVersion string `protobuf:"bytes,5,opt,name=system_version,json=systemVersion,proto3" json:"system_version,omitempty"` // 系统版本
	SdkVersion    string `protobuf:"bytes,6,opt,name=sdk_version,json=sdkVersion,proto3" json:"sdk_version,omitempty"`          // sdk版本号
}

func (x *RegisterDeviceReq) Reset() {
	*x = RegisterDeviceReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RegisterDeviceReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RegisterDeviceReq) ProtoMessage() {}

func (x *RegisterDeviceReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_proto_msgTypes[0]
	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 RegisterDeviceReq.ProtoReflect.Descriptor instead.
func (*RegisterDeviceReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{0}
}

func (x *RegisterDeviceReq) GetType() int32 {
	if x != nil {
		return x.Type
	}
	return 0
}

func (x *RegisterDeviceReq) GetBrand() string {
	if x != nil {
		return x.Brand
	}
	return ""
}

func (x *RegisterDeviceReq) GetModel() string {
	if x != nil {
		return x.Model
	}
	return ""
}

func (x *RegisterDeviceReq) GetSystemVersion() string {
	if x != nil {
		return x.SystemVersion
	}
	return ""
}

func (x *RegisterDeviceReq) GetSdkVersion() string {
	if x != nil {
		return x.SdkVersion
	}
	return ""
}

type RegisterDeviceResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	DeviceId int64 `protobuf:"varint,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id
}

func (x *RegisterDeviceResp) Reset() {
	*x = RegisterDeviceResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RegisterDeviceResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RegisterDeviceResp) ProtoMessage() {}

func (x *RegisterDeviceResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 RegisterDeviceResp.ProtoReflect.Descriptor instead.
func (*RegisterDeviceResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{1}
}

func (x *RegisterDeviceResp) GetDeviceId() int64 {
	if x != nil {
		return x.DeviceId
	}
	return 0
}

type SendMessageReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ReceiverType       ReceiverType `protobuf:"varint,1,opt,name=receiver_type,json=receiverType,proto3,enum=pb.ReceiverType" json:"receiver_type,omitempty"` // 接收者类型,1:user;2:group
	ReceiverId         int64        `protobuf:"varint,2,opt,name=receiver_id,json=receiverId,proto3" json:"receiver_id,omitempty"`                            // 用户id或者群组id
	ToUserIds          []int64      `protobuf:"varint,3,rep,packed,name=to_user_ids,json=toUserIds,proto3" json:"to_user_ids,omitempty"`                      // 需要@的用户id列表
	MessageType        MessageType  `protobuf:"varint,4,opt,name=message_type,json=messageType,proto3,enum=pb.MessageType" json:"message_type,omitempty"`     // 消息类型
	MessageContent     []byte       `protobuf:"bytes,5,opt,name=message_content,json=messageContent,proto3" json:"message_content,omitempty"`                 // 消息内容
	SendTime           int64        `protobuf:"varint,6,opt,name=send_time,json=sendTime,proto3" json:"send_time,omitempty"`                                  // 消息发送时间戳,精确到毫秒
	IsPersist          bool         `protobuf:"varint,7,opt,name=is_persist,json=isPersist,proto3" json:"is_persist,omitempty"`                               // 是否将消息持久化到数据库
	MessageContentBack string       `protobuf:"bytes,8,opt,name=message_content_back,json=messageContentBack,proto3" json:"message_content_back,omitempty"`
}

func (x *SendMessageReq) Reset() {
	*x = SendMessageReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SendMessageReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SendMessageReq) ProtoMessage() {}

func (x *SendMessageReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 SendMessageReq.ProtoReflect.Descriptor instead.
func (*SendMessageReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{2}
}

func (x *SendMessageReq) GetReceiverType() ReceiverType {
	if x != nil {
		return x.ReceiverType
	}
	return ReceiverType_RT_UNKNOWN
}

func (x *SendMessageReq) GetReceiverId() int64 {
	if x != nil {
		return x.ReceiverId
	}
	return 0
}

func (x *SendMessageReq) GetToUserIds() []int64 {
	if x != nil {
		return x.ToUserIds
	}
	return nil
}

func (x *SendMessageReq) GetMessageType() MessageType {
	if x != nil {
		return x.MessageType
	}
	return MessageType_MT_UNKNOWN
}

func (x *SendMessageReq) GetMessageContent() []byte {
	if x != nil {
		return x.MessageContent
	}
	return nil
}

func (x *SendMessageReq) GetSendTime() int64 {
	if x != nil {
		return x.SendTime
	}
	return 0
}

func (x *SendMessageReq) GetIsPersist() bool {
	if x != nil {
		return x.IsPersist
	}
	return false
}

func (x *SendMessageReq) GetMessageContentBack() string {
	if x != nil {
		return x.MessageContentBack
	}
	return ""
}

type SendMessageResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Seq int64 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` // 消息序列号
}

func (x *SendMessageResp) Reset() {
	*x = SendMessageResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SendMessageResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SendMessageResp) ProtoMessage() {}

func (x *SendMessageResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 SendMessageResp.ProtoReflect.Descriptor instead.
func (*SendMessageResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{3}
}

func (x *SendMessageResp) GetSeq() int64 {
	if x != nil {
		return x.Seq
	}
	return 0
}

type RecallMessageReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ReceiverType       ReceiverType `protobuf:"varint,1,opt,name=receiver_type,json=receiverType,proto3,enum=pb.ReceiverType" json:"receiver_type,omitempty"` // 接收者类型,1:user;2:group
	ReceiverId         int64        `protobuf:"varint,2,opt,name=receiver_id,json=receiverId,proto3" json:"receiver_id,omitempty"`                            // 用户id或者群组id
	ToUserIds          []int64      `protobuf:"varint,3,rep,packed,name=to_user_ids,json=toUserIds,proto3" json:"to_user_ids,omitempty"`                      // 需要@的用户id列表
	MessageType        MessageType  `protobuf:"varint,4,opt,name=message_type,json=messageType,proto3,enum=pb.MessageType" json:"message_type,omitempty"`     // 消息类型
	MessageContent     []byte       `protobuf:"bytes,5,opt,name=message_content,json=messageContent,proto3" json:"message_content,omitempty"`                 // 消息内容
	SendTime           int64        `protobuf:"varint,6,opt,name=send_time,json=sendTime,proto3" json:"send_time,omitempty"`                                  // 消息发送时间戳,精确到毫秒
	IsPersist          bool         `protobuf:"varint,7,opt,name=is_persist,json=isPersist,proto3" json:"is_persist,omitempty"`                               // 是否将消息持久化到数据库
	MessageContentBack string       `protobuf:"bytes,8,opt,name=message_content_back,json=messageContentBack,proto3" json:"message_content_back,omitempty"`
}

func (x *RecallMessageReq) Reset() {
	*x = RecallMessageReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RecallMessageReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RecallMessageReq) ProtoMessage() {}

func (x *RecallMessageReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 RecallMessageReq.ProtoReflect.Descriptor instead.
func (*RecallMessageReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{4}
}

func (x *RecallMessageReq) GetReceiverType() ReceiverType {
	if x != nil {
		return x.ReceiverType
	}
	return ReceiverType_RT_UNKNOWN
}

func (x *RecallMessageReq) GetReceiverId() int64 {
	if x != nil {
		return x.ReceiverId
	}
	return 0
}

func (x *RecallMessageReq) GetToUserIds() []int64 {
	if x != nil {
		return x.ToUserIds
	}
	return nil
}

func (x *RecallMessageReq) GetMessageType() MessageType {
	if x != nil {
		return x.MessageType
	}
	return MessageType_MT_UNKNOWN
}

func (x *RecallMessageReq) GetMessageContent() []byte {
	if x != nil {
		return x.MessageContent
	}
	return nil
}

func (x *RecallMessageReq) GetSendTime() int64 {
	if x != nil {
		return x.SendTime
	}
	return 0
}

func (x *RecallMessageReq) GetIsPersist() bool {
	if x != nil {
		return x.IsPersist
	}
	return false
}

func (x *RecallMessageReq) GetMessageContentBack() string {
	if x != nil {
		return x.MessageContentBack
	}
	return ""
}

type RecallMessageResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Seq int64 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` // 消息序列号
}

func (x *RecallMessageResp) Reset() {
	*x = RecallMessageResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *RecallMessageResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RecallMessageResp) ProtoMessage() {}

func (x *RecallMessageResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 RecallMessageResp.ProtoReflect.Descriptor instead.
func (*RecallMessageResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{5}
}

func (x *RecallMessageResp) GetSeq() int64 {
	if x != nil {
		return x.Seq
	}
	return 0
}

type SendRedPacketReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ReceiverType       ReceiverType `protobuf:"varint,1,opt,name=receiver_type,json=receiverType,proto3,enum=pb.ReceiverType" json:"receiver_type,omitempty"` // 接收者类型,1:user;2:group
	ReceiverId         int64        `protobuf:"varint,2,opt,name=receiver_id,json=receiverId,proto3" json:"receiver_id,omitempty"`                            // 用户id或者群组id
	MessageType        MessageType  `protobuf:"varint,3,opt,name=message_type,json=messageType,proto3,enum=pb.MessageType" json:"message_type,omitempty"`     // 消息类型
	MessageContent     []byte       `protobuf:"bytes,4,opt,name=message_content,json=messageContent,proto3" json:"message_content,omitempty"`                 // 消息内容
	SendTime           int64        `protobuf:"varint,5,opt,name=send_time,json=sendTime,proto3" json:"send_time,omitempty"`                                  // 消息发送时间戳,精确到毫秒
	ToUserIds          []int64      `protobuf:"varint,6,rep,packed,name=to_user_ids,json=toUserIds,proto3" json:"to_user_ids,omitempty"`                      // 红包给到哪些用户(专属红包)
	MessageContentBack string       `protobuf:"bytes,7,opt,name=message_content_back,json=messageContentBack,proto3" json:"message_content_back,omitempty"`
}

func (x *SendRedPacketReq) Reset() {
	*x = SendRedPacketReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SendRedPacketReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SendRedPacketReq) ProtoMessage() {}

func (x *SendRedPacketReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 SendRedPacketReq.ProtoReflect.Descriptor instead.
func (*SendRedPacketReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{6}
}

func (x *SendRedPacketReq) GetReceiverType() ReceiverType {
	if x != nil {
		return x.ReceiverType
	}
	return ReceiverType_RT_UNKNOWN
}

func (x *SendRedPacketReq) GetReceiverId() int64 {
	if x != nil {
		return x.ReceiverId
	}
	return 0
}

func (x *SendRedPacketReq) GetMessageType() MessageType {
	if x != nil {
		return x.MessageType
	}
	return MessageType_MT_UNKNOWN
}

func (x *SendRedPacketReq) GetMessageContent() []byte {
	if x != nil {
		return x.MessageContent
	}
	return nil
}

func (x *SendRedPacketReq) GetSendTime() int64 {
	if x != nil {
		return x.SendTime
	}
	return 0
}

func (x *SendRedPacketReq) GetToUserIds() []int64 {
	if x != nil {
		return x.ToUserIds
	}
	return nil
}

func (x *SendRedPacketReq) GetMessageContentBack() string {
	if x != nil {
		return x.MessageContentBack
	}
	return ""
}

type SendRedPacketResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Seq int64 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` // 消息序列号
}

func (x *SendRedPacketResp) Reset() {
	*x = SendRedPacketResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SendRedPacketResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SendRedPacketResp) ProtoMessage() {}

func (x *SendRedPacketResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 SendRedPacketResp.ProtoReflect.Descriptor instead.
func (*SendRedPacketResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{7}
}

func (x *SendRedPacketResp) GetSeq() int64 {
	if x != nil {
		return x.Seq
	}
	return 0
}

type PushRoomReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	RoomId         int64       `protobuf:"varint,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`                                    // 房间id
	MessageType    MessageType `protobuf:"varint,2,opt,name=message_type,json=messageType,proto3,enum=pb.MessageType" json:"message_type,omitempty"` // 消息类型
	MessageContent []byte      `protobuf:"bytes,3,opt,name=message_content,json=messageContent,proto3" json:"message_content,omitempty"`             // 消息内容
	SendTime       int64       `protobuf:"varint,4,opt,name=send_time,json=sendTime,proto3" json:"send_time,omitempty"`                              // 消息发送时间戳,精确到毫秒
	IsPersist      bool        `protobuf:"varint,5,opt,name=is_persist,json=isPersist,proto3" json:"is_persist,omitempty"`                           // 是否将消息持久化
	IsPriority     bool        `protobuf:"varint,6,opt,name=is_priority,json=isPriority,proto3" json:"is_priority,omitempty"`                        // 是否优先推送
}

func (x *PushRoomReq) Reset() {
	*x = PushRoomReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *PushRoomReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PushRoomReq) ProtoMessage() {}

func (x *PushRoomReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 PushRoomReq.ProtoReflect.Descriptor instead.
func (*PushRoomReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{8}
}

func (x *PushRoomReq) GetRoomId() int64 {
	if x != nil {
		return x.RoomId
	}
	return 0
}

func (x *PushRoomReq) GetMessageType() MessageType {
	if x != nil {
		return x.MessageType
	}
	return MessageType_MT_UNKNOWN
}

func (x *PushRoomReq) GetMessageContent() []byte {
	if x != nil {
		return x.MessageContent
	}
	return nil
}

func (x *PushRoomReq) GetSendTime() int64 {
	if x != nil {
		return x.SendTime
	}
	return 0
}

func (x *PushRoomReq) GetIsPersist() bool {
	if x != nil {
		return x.IsPersist
	}
	return false
}

func (x *PushRoomReq) GetIsPriority() bool {
	if x != nil {
		return x.IsPriority
	}
	return false
}

type AddFriendReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	FriendId    int64  `protobuf:"varint,1,opt,name=friend_id,json=friendId,proto3" json:"friend_id,omitempty"` // 用户id
	Remarks     string `protobuf:"bytes,2,opt,name=remarks,proto3" json:"remarks,omitempty"`                    // 备注
	Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`            // 描述
}

func (x *AddFriendReq) Reset() {
	*x = AddFriendReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *AddFriendReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AddFriendReq) ProtoMessage() {}

func (x *AddFriendReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 AddFriendReq.ProtoReflect.Descriptor instead.
func (*AddFriendReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{9}
}

func (x *AddFriendReq) GetFriendId() int64 {
	if x != nil {
		return x.FriendId
	}
	return 0
}

func (x *AddFriendReq) GetRemarks() string {
	if x != nil {
		return x.Remarks
	}
	return ""
}

func (x *AddFriendReq) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

type DeleteFriendReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	UserId int64 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id
}

func (x *DeleteFriendReq) Reset() {
	*x = DeleteFriendReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *DeleteFriendReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DeleteFriendReq) ProtoMessage() {}

func (x *DeleteFriendReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 DeleteFriendReq.ProtoReflect.Descriptor instead.
func (*DeleteFriendReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{10}
}

func (x *DeleteFriendReq) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

type AgreeAddFriendReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	UserId  int64  `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id
	Remarks string `protobuf:"bytes,2,opt,name=remarks,proto3" json:"remarks,omitempty"`              // 备注
}

func (x *AgreeAddFriendReq) Reset() {
	*x = AgreeAddFriendReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *AgreeAddFriendReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AgreeAddFriendReq) ProtoMessage() {}

func (x *AgreeAddFriendReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 AgreeAddFriendReq.ProtoReflect.Descriptor instead.
func (*AgreeAddFriendReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{11}
}

func (x *AgreeAddFriendReq) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *AgreeAddFriendReq) GetRemarks() string {
	if x != nil {
		return x.Remarks
	}
	return ""
}

type SetFriendReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	FriendId int64  `protobuf:"varint,1,opt,name=friend_id,json=friendId,proto3" json:"friend_id,omitempty"` // 好友id
	Remarks  string `protobuf:"bytes,2,opt,name=remarks,proto3" json:"remarks,omitempty"`                    // 备注
	Extra    string `protobuf:"bytes,8,opt,name=extra,proto3" json:"extra,omitempty"`                        // 附加字段
}

func (x *SetFriendReq) Reset() {
	*x = SetFriendReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SetFriendReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetFriendReq) ProtoMessage() {}

func (x *SetFriendReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 SetFriendReq.ProtoReflect.Descriptor instead.
func (*SetFriendReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{12}
}

func (x *SetFriendReq) GetFriendId() int64 {
	if x != nil {
		return x.FriendId
	}
	return 0
}

func (x *SetFriendReq) GetRemarks() string {
	if x != nil {
		return x.Remarks
	}
	return ""
}

func (x *SetFriendReq) GetExtra() string {
	if x != nil {
		return x.Extra
	}
	return ""
}

type SetFriendResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	FriendId int64  `protobuf:"varint,1,opt,name=friend_id,json=friendId,proto3" json:"friend_id,omitempty"` // 好友id
	Remarks  string `protobuf:"bytes,2,opt,name=remarks,proto3" json:"remarks,omitempty"`                    // 备注
	Extra    string `protobuf:"bytes,8,opt,name=extra,proto3" json:"extra,omitempty"`                        // 附加字段
}

func (x *SetFriendResp) Reset() {
	*x = SetFriendResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SetFriendResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetFriendResp) ProtoMessage() {}

func (x *SetFriendResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_proto_msgTypes[13]
	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 SetFriendResp.ProtoReflect.Descriptor instead.
func (*SetFriendResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{13}
}

func (x *SetFriendResp) GetFriendId() int64 {
	if x != nil {
		return x.FriendId
	}
	return 0
}

func (x *SetFriendResp) GetRemarks() string {
	if x != nil {
		return x.Remarks
	}
	return ""
}

func (x *SetFriendResp) GetExtra() string {
	if x != nil {
		return x.Extra
	}
	return ""
}

type Friend struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	UserId      int64  `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`               // 用户id
	PhoneNumber string `protobuf:"bytes,2,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` // 电话号码
	Nickname    string `protobuf:"bytes,3,opt,name=nickname,proto3" json:"nickname,omitempty"`                          // 昵称
	Sex         int32  `protobuf:"varint,4,opt,name=sex,proto3" json:"sex,omitempty"`                                   // 性别
	AvatarUrl   string `protobuf:"bytes,5,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"`       // 头像地址
	UserExtra   string `protobuf:"bytes,6,opt,name=user_extra,json=userExtra,proto3" json:"user_extra,omitempty"`       // 用户附加字段
	Remarks     string `protobuf:"bytes,7,opt,name=remarks,proto3" json:"remarks,omitempty"`                            // 备注
	Extra       string `protobuf:"bytes,8,opt,name=extra,proto3" json:"extra,omitempty"`                                // 附加字段
}

func (x *Friend) Reset() {
	*x = Friend{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Friend) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Friend) ProtoMessage() {}

func (x *Friend) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_proto_msgTypes[14]
	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 Friend.ProtoReflect.Descriptor instead.
func (*Friend) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{14}
}

func (x *Friend) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *Friend) GetPhoneNumber() string {
	if x != nil {
		return x.PhoneNumber
	}
	return ""
}

func (x *Friend) GetNickname() string {
	if x != nil {
		return x.Nickname
	}
	return ""
}

func (x *Friend) GetSex() int32 {
	if x != nil {
		return x.Sex
	}
	return 0
}

func (x *Friend) GetAvatarUrl() string {
	if x != nil {
		return x.AvatarUrl
	}
	return ""
}

func (x *Friend) GetUserExtra() string {
	if x != nil {
		return x.UserExtra
	}
	return ""
}

func (x *Friend) GetRemarks() string {
	if x != nil {
		return x.Remarks
	}
	return ""
}

func (x *Friend) GetExtra() string {
	if x != nil {
		return x.Extra
	}
	return ""
}

type GetFriendsResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Friends []*Friend `protobuf:"bytes,1,rep,name=friends,proto3" json:"friends,omitempty"`
}

func (x *GetFriendsResp) Reset() {
	*x = GetFriendsResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[15]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GetFriendsResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetFriendsResp) ProtoMessage() {}

func (x *GetFriendsResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 GetFriendsResp.ProtoReflect.Descriptor instead.
func (*GetFriendsResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{15}
}

func (x *GetFriendsResp) GetFriends() []*Friend {
	if x != nil {
		return x.Friends
	}
	return nil
}

type CreateGroupReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Name         string  `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`                                    // 名称
	AvatarUrl    string  `protobuf:"bytes,2,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"`         // 头像
	Introduction string  `protobuf:"bytes,3,opt,name=introduction,proto3" json:"introduction,omitempty"`                    // 简介
	Extra        string  `protobuf:"bytes,4,opt,name=extra,proto3" json:"extra,omitempty"`                                  // 附加字段
	MemberIds    []int64 `protobuf:"varint,5,rep,packed,name=member_ids,json=memberIds,proto3" json:"member_ids,omitempty"` // 群组成员ID列表
}

func (x *CreateGroupReq) Reset() {
	*x = CreateGroupReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[16]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CreateGroupReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CreateGroupReq) ProtoMessage() {}

func (x *CreateGroupReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 CreateGroupReq.ProtoReflect.Descriptor instead.
func (*CreateGroupReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{16}
}

func (x *CreateGroupReq) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *CreateGroupReq) GetAvatarUrl() string {
	if x != nil {
		return x.AvatarUrl
	}
	return ""
}

func (x *CreateGroupReq) GetIntroduction() string {
	if x != nil {
		return x.Introduction
	}
	return ""
}

func (x *CreateGroupReq) GetExtra() string {
	if x != nil {
		return x.Extra
	}
	return ""
}

func (x *CreateGroupReq) GetMemberIds() []int64 {
	if x != nil {
		return x.MemberIds
	}
	return nil
}

type CreateGroupResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // 群组id
}

func (x *CreateGroupResp) Reset() {
	*x = CreateGroupResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[17]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CreateGroupResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CreateGroupResp) ProtoMessage() {}

func (x *CreateGroupResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_proto_msgTypes[17]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CreateGroupResp.ProtoReflect.Descriptor instead.
func (*CreateGroupResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{17}
}

func (x *CreateGroupResp) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

type UpdateGroupReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId      int64  `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`      // 群组id
	AvatarUrl    string `protobuf:"bytes,2,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像
	Name         string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`                            // 名称
	Introduction string `protobuf:"bytes,4,opt,name=introduction,proto3" json:"introduction,omitempty"`            // 简介
	Extra        string `protobuf:"bytes,5,opt,name=extra,proto3" json:"extra,omitempty"`                          // 附加字段
}

func (x *UpdateGroupReq) Reset() {
	*x = UpdateGroupReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[18]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *UpdateGroupReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpdateGroupReq) ProtoMessage() {}

func (x *UpdateGroupReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 UpdateGroupReq.ProtoReflect.Descriptor instead.
func (*UpdateGroupReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{18}
}

func (x *UpdateGroupReq) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *UpdateGroupReq) GetAvatarUrl() string {
	if x != nil {
		return x.AvatarUrl
	}
	return ""
}

func (x *UpdateGroupReq) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *UpdateGroupReq) GetIntroduction() string {
	if x != nil {
		return x.Introduction
	}
	return ""
}

func (x *UpdateGroupReq) GetExtra() string {
	if x != nil {
		return x.Extra
	}
	return ""
}

type GetGroupReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
}

func (x *GetGroupReq) Reset() {
	*x = GetGroupReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[19]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GetGroupReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetGroupReq) ProtoMessage() {}

func (x *GetGroupReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 GetGroupReq.ProtoReflect.Descriptor instead.
func (*GetGroupReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{19}
}

func (x *GetGroupReq) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

type GetGroupResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Group               *Group              `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
	MemberType          MemberType          `protobuf:"varint,2,opt,name=member_type,json=memberType,proto3,enum=pb.MemberType" json:"member_type,omitempty"`
	GroupUserStatusType GroupUserStatusType `protobuf:"varint,3,opt,name=group_user_status_type,json=groupUserStatusType,proto3,enum=pb.GroupUserStatusType" json:"group_user_status_type,omitempty"`
	GroupNotice         *GroupNotice        `protobuf:"bytes,4,opt,name=group_notice,json=groupNotice,proto3" json:"group_notice,omitempty"` //群公告
}

func (x *GetGroupResp) Reset() {
	*x = GetGroupResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[20]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GetGroupResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetGroupResp) ProtoMessage() {}

func (x *GetGroupResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 GetGroupResp.ProtoReflect.Descriptor instead.
func (*GetGroupResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{20}
}

func (x *GetGroupResp) GetGroup() *Group {
	if x != nil {
		return x.Group
	}
	return nil
}

func (x *GetGroupResp) GetMemberType() MemberType {
	if x != nil {
		return x.MemberType
	}
	return MemberType_GMT_UNKNOWN
}

func (x *GetGroupResp) GetGroupUserStatusType() GroupUserStatusType {
	if x != nil {
		return x.GroupUserStatusType
	}
	return GroupUserStatusType_GROUP_USER_STATUS_NORMAL
}

func (x *GetGroupResp) GetGroupNotice() *GroupNotice {
	if x != nil {
		return x.GroupNotice
	}
	return nil
}

type GroupNotice struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Content     string                 `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"`                                                            //公告内容
	PublishType GroupNoticePublishType `protobuf:"varint,2,opt,name=publish_type,json=publishType,proto3,enum=pb.GroupNoticePublishType" json:"publish_type,omitempty"` // 发布方式
	PublishTime string                 `protobuf:"bytes,3,opt,name=publish_time,json=publishTime,proto3" json:"publish_time,omitempty"`                                 // 发布时间
}

func (x *GroupNotice) Reset() {
	*x = GroupNotice{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[21]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GroupNotice) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GroupNotice) ProtoMessage() {}

func (x *GroupNotice) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_proto_msgTypes[21]
	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 GroupNotice.ProtoReflect.Descriptor instead.
func (*GroupNotice) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{21}
}

func (x *GroupNotice) GetContent() string {
	if x != nil {
		return x.Content
	}
	return ""
}

func (x *GroupNotice) GetPublishType() GroupNoticePublishType {
	if x != nil {
		return x.PublishType
	}
	return GroupNoticePublishType_UNKNOWN_PUBLISH
}

func (x *GroupNotice) GetPublishTime() string {
	if x != nil {
		return x.PublishTime
	}
	return ""
}

type Group struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId           int64  `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`                                   // 群组id
	Name              string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`                                                         // 名称
	AvatarUrl         string `protobuf:"bytes,3,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"`                              // 头像
	Introduction      string `protobuf:"bytes,4,opt,name=introduction,proto3" json:"introduction,omitempty"`                                         // 简介
	UserMum           int32  `protobuf:"varint,5,opt,name=user_mum,json=userMum,proto3" json:"user_mum,omitempty"`                                   // 用户数
	IsAllMemberBanned int32  `protobuf:"varint,6,opt,name=is_all_member_banned,json=isAllMemberBanned,proto3" json:"is_all_member_banned,omitempty"` // 是否全员禁言(1:是 2:否)
	IsAllAddFriend    int32  `protobuf:"varint,10,opt,name=is_all_add_friend,json=isAllAddFriend,proto3" json:"is_all_add_friend,omitempty"`         // 是否允许加好友(1:是 2:否)
	Extra             string `protobuf:"bytes,7,opt,name=extra,proto3" json:"extra,omitempty"`                                                       // 附加字段
	CreateTime        int64  `protobuf:"varint,8,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`                          // 创建时间
	UpdateTime        int64  `protobuf:"varint,9,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`                          // 更新时间
}

func (x *Group) Reset() {
	*x = Group{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[22]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Group) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Group) ProtoMessage() {}

func (x *Group) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 Group.ProtoReflect.Descriptor instead.
func (*Group) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{22}
}

func (x *Group) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *Group) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *Group) GetAvatarUrl() string {
	if x != nil {
		return x.AvatarUrl
	}
	return ""
}

func (x *Group) GetIntroduction() string {
	if x != nil {
		return x.Introduction
	}
	return ""
}

func (x *Group) GetUserMum() int32 {
	if x != nil {
		return x.UserMum
	}
	return 0
}

func (x *Group) GetIsAllMemberBanned() int32 {
	if x != nil {
		return x.IsAllMemberBanned
	}
	return 0
}

func (x *Group) GetIsAllAddFriend() int32 {
	if x != nil {
		return x.IsAllAddFriend
	}
	return 0
}

func (x *Group) GetExtra() string {
	if x != nil {
		return x.Extra
	}
	return ""
}

func (x *Group) GetCreateTime() int64 {
	if x != nil {
		return x.CreateTime
	}
	return 0
}

func (x *Group) GetUpdateTime() int64 {
	if x != nil {
		return x.UpdateTime
	}
	return 0
}

type GetGroupsResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Groups []*Group `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"`
}

func (x *GetGroupsResp) Reset() {
	*x = GetGroupsResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[23]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GetGroupsResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetGroupsResp) ProtoMessage() {}

func (x *GetGroupsResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 GetGroupsResp.ProtoReflect.Descriptor instead.
func (*GetGroupsResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{23}
}

func (x *GetGroupsResp) GetGroups() []*Group {
	if x != nil {
		return x.Groups
	}
	return nil
}

type AddGroupMembersReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId int64   `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`        // 群组id
	UserIds []int64 `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` // 用户id列表
}

func (x *AddGroupMembersReq) Reset() {
	*x = AddGroupMembersReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[24]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *AddGroupMembersReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AddGroupMembersReq) ProtoMessage() {}

func (x *AddGroupMembersReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 AddGroupMembersReq.ProtoReflect.Descriptor instead.
func (*AddGroupMembersReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{24}
}

func (x *AddGroupMembersReq) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *AddGroupMembersReq) GetUserIds() []int64 {
	if x != nil {
		return x.UserIds
	}
	return nil
}

type AddGroupMembersResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	UserIds []int64 `protobuf:"varint,1,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` // 已经在群组的用户id列表
}

func (x *AddGroupMembersResp) Reset() {
	*x = AddGroupMembersResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[25]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *AddGroupMembersResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AddGroupMembersResp) ProtoMessage() {}

func (x *AddGroupMembersResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 AddGroupMembersResp.ProtoReflect.Descriptor instead.
func (*AddGroupMembersResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{25}
}

func (x *AddGroupMembersResp) GetUserIds() []int64 {
	if x != nil {
		return x.UserIds
	}
	return nil
}

type UpdateGroupMemberReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId    int64      `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`                             // 群组id
	UserId     int64      `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`                                // 用户id
	MemberType MemberType `protobuf:"varint,3,opt,name=member_type,json=memberType,proto3,enum=pb.MemberType" json:"member_type,omitempty"` // 成员类型
	Remarks    string     `protobuf:"bytes,4,opt,name=remarks,proto3" json:"remarks,omitempty"`                                             // 备注
	Extra      string     `protobuf:"bytes,5,opt,name=extra,proto3" json:"extra,omitempty"`                                                 // 附加字段
}

func (x *UpdateGroupMemberReq) Reset() {
	*x = UpdateGroupMemberReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[26]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *UpdateGroupMemberReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UpdateGroupMemberReq) ProtoMessage() {}

func (x *UpdateGroupMemberReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 UpdateGroupMemberReq.ProtoReflect.Descriptor instead.
func (*UpdateGroupMemberReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{26}
}

func (x *UpdateGroupMemberReq) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *UpdateGroupMemberReq) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *UpdateGroupMemberReq) GetMemberType() MemberType {
	if x != nil {
		return x.MemberType
	}
	return MemberType_GMT_UNKNOWN
}

func (x *UpdateGroupMemberReq) GetRemarks() string {
	if x != nil {
		return x.Remarks
	}
	return ""
}

func (x *UpdateGroupMemberReq) GetExtra() string {
	if x != nil {
		return x.Extra
	}
	return ""
}

type DeleteGroupMemberReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // 群组id
	UserId  int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`    // 用户id
}

func (x *DeleteGroupMemberReq) Reset() {
	*x = DeleteGroupMemberReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[27]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *DeleteGroupMemberReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DeleteGroupMemberReq) ProtoMessage() {}

func (x *DeleteGroupMemberReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 DeleteGroupMemberReq.ProtoReflect.Descriptor instead.
func (*DeleteGroupMemberReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{27}
}

func (x *DeleteGroupMemberReq) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *DeleteGroupMemberReq) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

type GetGroupMembersReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
	Limit   int64 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"`
}

func (x *GetGroupMembersReq) Reset() {
	*x = GetGroupMembersReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[28]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GetGroupMembersReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetGroupMembersReq) ProtoMessage() {}

func (x *GetGroupMembersReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 GetGroupMembersReq.ProtoReflect.Descriptor instead.
func (*GetGroupMembersReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{28}
}

func (x *GetGroupMembersReq) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *GetGroupMembersReq) GetLimit() int64 {
	if x != nil {
		return x.Limit
	}
	return 0
}

type GetGroupMembersResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Members []*GroupMember `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"`
}

func (x *GetGroupMembersResp) Reset() {
	*x = GetGroupMembersResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[29]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GetGroupMembersResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetGroupMembersResp) ProtoMessage() {}

func (x *GetGroupMembersResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 GetGroupMembersResp.ProtoReflect.Descriptor instead.
func (*GetGroupMembersResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{29}
}

func (x *GetGroupMembersResp) GetMembers() []*GroupMember {
	if x != nil {
		return x.Members
	}
	return nil
}

type GroupMember struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	UserId     int64      `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	Nickname   string     `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"`                                           // 昵称
	Sex        int32      `protobuf:"varint,3,opt,name=sex,proto3" json:"sex,omitempty"`                                                    // 性别
	AvatarUrl  string     `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"`                        // 头像地址
	UserExtra  string     `protobuf:"bytes,5,opt,name=user_extra,json=userExtra,proto3" json:"user_extra,omitempty"`                        // 用户附加字段
	MemberType MemberType `protobuf:"varint,6,opt,name=member_type,json=memberType,proto3,enum=pb.MemberType" json:"member_type,omitempty"` // 成员类型
	Remarks    string     `protobuf:"bytes,7,opt,name=remarks,proto3" json:"remarks,omitempty"`                                             // 备注
	Extra      string     `protobuf:"bytes,8,opt,name=extra,proto3" json:"extra,omitempty"`                                                 // 群组成员附加字段
	Status     int32      `protobuf:"varint,9,opt,name=status,proto3" json:"status,omitempty"`                                              // 状态
}

func (x *GroupMember) Reset() {
	*x = GroupMember{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[30]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GroupMember) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GroupMember) ProtoMessage() {}

func (x *GroupMember) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 GroupMember.ProtoReflect.Descriptor instead.
func (*GroupMember) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{30}
}

func (x *GroupMember) GetUserId() int64 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *GroupMember) GetNickname() string {
	if x != nil {
		return x.Nickname
	}
	return ""
}

func (x *GroupMember) GetSex() int32 {
	if x != nil {
		return x.Sex
	}
	return 0
}

func (x *GroupMember) GetAvatarUrl() string {
	if x != nil {
		return x.AvatarUrl
	}
	return ""
}

func (x *GroupMember) GetUserExtra() string {
	if x != nil {
		return x.UserExtra
	}
	return ""
}

func (x *GroupMember) GetMemberType() MemberType {
	if x != nil {
		return x.MemberType
	}
	return MemberType_GMT_UNKNOWN
}

func (x *GroupMember) GetRemarks() string {
	if x != nil {
		return x.Remarks
	}
	return ""
}

func (x *GroupMember) GetExtra() string {
	if x != nil {
		return x.Extra
	}
	return ""
}

func (x *GroupMember) GetStatus() int32 {
	if x != nil {
		return x.Status
	}
	return 0
}

type SetGroupMemberBannedReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId           int64               `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`                                                               // 群组id
	UserIds           []int64             `protobuf:"varint,2,rep,packed,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"`                                                        // 用户id列表
	IsAllMemberBanned AllMemberBannedType `protobuf:"varint,3,opt,name=is_all_member_banned,json=isAllMemberBanned,proto3,enum=pb.AllMemberBannedType" json:"is_all_member_banned,omitempty"` // 全员禁言(1:是 2:否)
}

func (x *SetGroupMemberBannedReq) Reset() {
	*x = SetGroupMemberBannedReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[31]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SetGroupMemberBannedReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetGroupMemberBannedReq) ProtoMessage() {}

func (x *SetGroupMemberBannedReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 SetGroupMemberBannedReq.ProtoReflect.Descriptor instead.
func (*SetGroupMemberBannedReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{31}
}

func (x *SetGroupMemberBannedReq) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *SetGroupMemberBannedReq) GetUserIds() []int64 {
	if x != nil {
		return x.UserIds
	}
	return nil
}

func (x *SetGroupMemberBannedReq) GetIsAllMemberBanned() AllMemberBannedType {
	if x != nil {
		return x.IsAllMemberBanned
	}
	return AllMemberBannedType_UNKNOWN_All_Member_Banned
}

type SetGroupMemberRemoveBannedReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId       int64   `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`                            // 群组id
	RemoveUserIds []int64 `protobuf:"varint,2,rep,packed,name=remove_user_ids,json=removeUserIds,proto3" json:"remove_user_ids,omitempty"` // 解除用户id列表
}

func (x *SetGroupMemberRemoveBannedReq) Reset() {
	*x = SetGroupMemberRemoveBannedReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[32]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SetGroupMemberRemoveBannedReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetGroupMemberRemoveBannedReq) ProtoMessage() {}

func (x *SetGroupMemberRemoveBannedReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_proto_msgTypes[32]
	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 SetGroupMemberRemoveBannedReq.ProtoReflect.Descriptor instead.
func (*SetGroupMemberRemoveBannedReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{32}
}

func (x *SetGroupMemberRemoveBannedReq) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *SetGroupMemberRemoveBannedReq) GetRemoveUserIds() []int64 {
	if x != nil {
		return x.RemoveUserIds
	}
	return nil
}

type SetGroupMemberBannedResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	IsAllMemberBanned AllMemberBannedType `protobuf:"varint,3,opt,name=is_all_member_banned,json=isAllMemberBanned,proto3,enum=pb.AllMemberBannedType" json:"is_all_member_banned,omitempty"` // 全员禁言(1:是 2:否)
	Members           []*GroupMember      `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"`                                                                               //禁言人员列表
}

func (x *SetGroupMemberBannedResp) Reset() {
	*x = SetGroupMemberBannedResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[33]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SetGroupMemberBannedResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetGroupMemberBannedResp) ProtoMessage() {}

func (x *SetGroupMemberBannedResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 SetGroupMemberBannedResp.ProtoReflect.Descriptor instead.
func (*SetGroupMemberBannedResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{33}
}

func (x *SetGroupMemberBannedResp) GetIsAllMemberBanned() AllMemberBannedType {
	if x != nil {
		return x.IsAllMemberBanned
	}
	return AllMemberBannedType_UNKNOWN_All_Member_Banned
}

func (x *SetGroupMemberBannedResp) GetMembers() []*GroupMember {
	if x != nil {
		return x.Members
	}
	return nil
}

type GetGroupBannedMembersReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId int64 `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
}

func (x *GetGroupBannedMembersReq) Reset() {
	*x = GetGroupBannedMembersReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[34]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GetGroupBannedMembersReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetGroupBannedMembersReq) ProtoMessage() {}

func (x *GetGroupBannedMembersReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 GetGroupBannedMembersReq.ProtoReflect.Descriptor instead.
func (*GetGroupBannedMembersReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{34}
}

func (x *GetGroupBannedMembersReq) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

type GetGroupBannedMembersResp struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Members []*GroupMember `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"`
}

func (x *GetGroupBannedMembersResp) Reset() {
	*x = GetGroupBannedMembersResp{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[35]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *GetGroupBannedMembersResp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetGroupBannedMembersResp) ProtoMessage() {}

func (x *GetGroupBannedMembersResp) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 GetGroupBannedMembersResp.ProtoReflect.Descriptor instead.
func (*GetGroupBannedMembersResp) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{35}
}

func (x *GetGroupBannedMembersResp) GetMembers() []*GroupMember {
	if x != nil {
		return x.Members
	}
	return nil
}

type SetGroupAddFriendReq struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GroupId        int64            `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`                                                   // 群组id
	IsAllAddFriend AllAddFriendType `protobuf:"varint,2,opt,name=is_all_add_friend,json=isAllAddFriend,proto3,enum=pb.AllAddFriendType" json:"is_all_add_friend,omitempty"` // 是否允许加好友(1:是 2:否)
}

func (x *SetGroupAddFriendReq) Reset() {
	*x = SetGroupAddFriendReq{}
	if protoimpl.UnsafeEnabled {
		mi := &file_logic_ext_proto_msgTypes[36]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *SetGroupAddFriendReq) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SetGroupAddFriendReq) ProtoMessage() {}

func (x *SetGroupAddFriendReq) ProtoReflect() protoreflect.Message {
	mi := &file_logic_ext_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 SetGroupAddFriendReq.ProtoReflect.Descriptor instead.
func (*SetGroupAddFriendReq) Descriptor() ([]byte, []int) {
	return file_logic_ext_proto_rawDescGZIP(), []int{36}
}

func (x *SetGroupAddFriendReq) GetGroupId() int64 {
	if x != nil {
		return x.GroupId
	}
	return 0
}

func (x *SetGroupAddFriendReq) GetIsAllAddFriend() AllAddFriendType {
	if x != nil {
		return x.IsAllAddFriend
	}
	return AllAddFriendType_UNKNOWN_All_Add_Friend
}

var File_logic_ext_proto protoreflect.FileDescriptor

var file_logic_ext_proto_rawDesc = []byte{
	0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x12, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x2e,
	0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
	0x6e, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x63, 0x6f, 0x6e,
	0x6e, 0x65, 0x63, 0x74, 0x2e, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9b,
	0x01, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x72, 0x61, 0x6e,
	0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x14,
	0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d,
	0x6f, 0x64, 0x65, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x76,
	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x79,
	0x73, 0x74, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x73,
	0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0a, 0x73, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x31, 0x0a, 0x12,
	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65,
	0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22,
	0xd3, 0x02, 0x0a, 0x0e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
	0x65, 0x71, 0x12, 0x35, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74,
	0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x52,
	0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x63,
	0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x63,
	0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a,
	0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x74, 0x6f,
	0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52,
	0x09, 0x74, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x0c, 0x6d, 0x65,
	0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70,
	0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27,
	0x0a, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
	0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
	0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x5f,
	0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64,
	0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69,
	0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, 0x65, 0x72, 0x73,
	0x69, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63,
	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x12, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
	0x74, 0x42, 0x61, 0x63, 0x6b, 0x22, 0x23, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73,
	0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0xd5, 0x02, 0x0a, 0x10, 0x52,
	0x65, 0x63, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12,
	0x35, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, 0x65,
	0x69, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
	0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
	0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x63,
	0x65, 0x69, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x75, 0x73,
	0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f,
	0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61,
	0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e,
	0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b,
	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6d,
	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e,
	0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d,
	0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d,
	0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18,
	0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74,
	0x12, 0x30, 0x0a, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74,
	0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12,
	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x61,
	0x63, 0x6b, 0x22, 0x25, 0x0a, 0x11, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73,
	0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0xb6, 0x02, 0x0a, 0x10, 0x53, 0x65,
	0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x35,
	0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69,
	0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,
	0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65,
	0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x65,
	0x69, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
	0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70,
	0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d,
	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x65,
	0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20,
	0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74,
	0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65,
	0x12, 0x1e, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18,
	0x06, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73,
	0x12, 0x30, 0x0a, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74,
	0x65, 0x6e, 0x74, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12,
	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x61,
	0x63, 0x6b, 0x22, 0x25, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63,
	0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x22, 0xe0, 0x01, 0x0a, 0x0b, 0x50, 0x75,
	0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f,
	0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d,
	0x49, 0x64, 0x12, 0x32, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79,
	0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65,
	0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61,
	0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
	0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52,
	0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12,
	0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x03, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a,
	0x69, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
	0x52, 0x09, 0x69, 0x73, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69,
	0x73, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08,
	0x52, 0x0a, 0x69, 0x73, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x67, 0x0a, 0x0c,
	0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09,
	0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x08, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d,
	0x61, 0x72, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61,
	0x72, 0x6b, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2a, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46,
	0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72,
	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
	0x64, 0x22, 0x46, 0x0a, 0x11, 0x41, 0x67, 0x72, 0x65, 0x65, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69,
	0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69,
	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12,
	0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x22, 0x5b, 0x0a, 0x0c, 0x53, 0x65, 0x74,
	0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x69,
	0x65, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x72,
	0x69, 0x65, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b,
	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73,
	0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x5c, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x46, 0x72, 0x69,
	0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x72, 0x69, 0x65, 0x6e,
	0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x72, 0x69, 0x65,
	0x6e, 0x64, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14,
	0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65,
	0x78, 0x74, 0x72, 0x61, 0x22, 0xe0, 0x01, 0x0a, 0x06, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12,
	0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x68, 0x6f, 0x6e,
	0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
	0x70, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6e,
	0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e,
	0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61,
	0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61,
	0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72,
	0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73,
	0x65, 0x72, 0x45, 0x78, 0x74, 0x72, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72,
	0x6b, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b,
	0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x36, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x72,
	0x69, 0x65, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a, 0x07, 0x66, 0x72, 0x69,
	0x65, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e,
	0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x07, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x22,
	0x9c, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
	0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72,
	0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74,
	0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x74,
	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74,
	0x72, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12,
	0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20,
	0x03, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x2c,
	0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73,
	0x70, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x98, 0x01, 0x0a,
	0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12,
	0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76,
	0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
	0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a,
	0x0c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f,
	0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x28, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x47, 0x72,
	0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f,
	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49,
	0x64, 0x22, 0xe2, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65,
	0x73, 0x70, 0x12, 0x1f, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72,
	0x6f, 0x75, 0x70, 0x12, 0x2f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79,
	0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65,
	0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
	0x54, 0x79, 0x70, 0x65, 0x12, 0x4c, 0x0a, 0x16, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x75, 0x73,
	0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x55,
	0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x13, 0x67,
	0x72, 0x6f, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79,
	0x70, 0x65, 0x12, 0x32, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x6f, 0x74, 0x69,
	0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72,
	0x6f, 0x75, 0x70, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x52, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70,
	0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70,
	0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
	0x12, 0x3d, 0x0a, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75,
	0x70, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x79,
	0x70, 0x65, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12,
	0x21, 0x0a, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69,
	0x6d, 0x65, 0x22, 0xc8, 0x02, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x19, 0x0a, 0x08,
	0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
	0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61,
	0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e,
	0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19,
	0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6d, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05,
	0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x4d, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x69, 0x73, 0x5f,
	0x61, 0x6c, 0x6c, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65,
	0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x4d, 0x65,
	0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x11, 0x69, 0x73,
	0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x18,
	0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x46,
	0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x07,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x63,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x32, 0x0a,
	0x0d, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x21,
	0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09,
	0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70,
	0x73, 0x22, 0x4a, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d,
	0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70,
	0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70,
	0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02,
	0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x30, 0x0a,
	0x13, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73,
	0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22,
	0xab, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d,
	0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75,
	0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75,
	0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0b,
	0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0e, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70,
	0x65, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a,
	0x07, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
	0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x4a, 0x0a,
	0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62,
	0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69,
	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64,
	0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x12, 0x47, 0x65, 0x74,
	0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12,
	0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69,
	0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74,
	0x22, 0x40, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62,
	0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65,
	0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72,
	0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65,
	0x72, 0x73, 0x22, 0x8b, 0x02, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62,
	0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6e,
	0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e,
	0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61,
	0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61,
	0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72,
	0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73,
	0x65, 0x72, 0x45, 0x78, 0x74, 0x72, 0x61, 0x12, 0x2f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65,
	0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x70,
	0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x6d, 0x65,
	0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x61,
	0x72, 0x6b, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x61, 0x72,
	0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
	0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
	0x22, 0x99, 0x01, 0x0a, 0x17, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d,
	0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08,
	0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
	0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f,
	0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49,
	0x64, 0x73, 0x12, 0x48, 0x0a, 0x14, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6d, 0x65, 0x6d,
	0x62, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42,
	0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x69, 0x73, 0x41, 0x6c, 0x6c,
	0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x22, 0x62, 0x0a, 0x1d,
	0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65,
	0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a,
	0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
	0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f,
	0x76, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
	0x03, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73,
	0x22, 0x8f, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d,
	0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a,
	0x14, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x62,
	0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62,
	0x2e, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64,
	0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, 0x65,
	0x72, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65,
	0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72,
	0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65,
	0x72, 0x73, 0x22, 0x35, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61,
	0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x12, 0x19,
	0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x46, 0x0a, 0x19, 0x47, 0x65, 0x74,
	0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65,
	0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f,
	0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
	0x73, 0x22, 0x72, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64,
	0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f,
	0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x6f,
	0x75, 0x70, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x11, 0x69, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x61,
	0x64, 0x64, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x14, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e,
	0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x69, 0x73, 0x41, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x46,
	0x72, 0x69, 0x65, 0x6e, 0x64, 0x2a, 0x4c, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54,
	0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x4d, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
	0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x4d, 0x54, 0x5f, 0x41, 0x44, 0x4d, 0x49,
	0x4e, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4d, 0x54, 0x5f, 0x4d, 0x45, 0x4d, 0x42, 0x45,
	0x52, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x47, 0x4d, 0x54, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47,
	0x45, 0x10, 0x03, 0x2a, 0x6a, 0x0a, 0x13, 0x41, 0x6c, 0x6c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72,
	0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x55, 0x4e,
	0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72,
	0x5f, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x59, 0x45, 0x53,
	0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x42, 0x61, 0x6e, 0x6e,
	0x65, 0x64, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x6c, 0x6c, 0x5f,
	0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x10, 0x02, 0x2a,
	0x5e, 0x0a, 0x10, 0x41, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x54,
	0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41,
	0x6c, 0x6c, 0x5f, 0x41, 0x64, 0x64, 0x5f, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x10, 0x00, 0x12,
	0x16, 0x0a, 0x12, 0x59, 0x45, 0x53, 0x5f, 0x41, 0x6c, 0x6c, 0x5f, 0x41, 0x64, 0x64, 0x5f, 0x46,
	0x72, 0x69, 0x65, 0x6e, 0x64, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4e, 0x4f, 0x54, 0x5f, 0x41,
	0x6c, 0x6c, 0x5f, 0x41, 0x64, 0x64, 0x5f, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x10, 0x02, 0x32,
	0x81, 0x0a, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x45, 0x78, 0x74, 0x12, 0x3f, 0x0a, 0x0e,
	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x15,
	0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69,
	0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73,
	0x74, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a,
	0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x2e, 0x70,
	0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71,
	0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
	0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x4d,
	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x63, 0x61,
	0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70,
	0x62, 0x2e, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
	0x65, 0x73, 0x70, 0x12, 0x26, 0x0a, 0x08, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x12,
	0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71,
	0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x0d, 0x53,
	0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x14, 0x2e, 0x70,
	0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52,
	0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x64, 0x50,
	0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x09, 0x41, 0x64, 0x64,
	0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x46,
	0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d,
	0x70, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x0e, 0x41, 0x67, 0x72, 0x65, 0x65, 0x41, 0x64, 0x64, 0x46,
	0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x67, 0x72, 0x65, 0x65,
	0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70,
	0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74,
	0x65, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c,
	0x65, 0x74, 0x65, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70,
	0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x46, 0x72,
	0x69, 0x65, 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x46, 0x72, 0x69,
	0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x46,
	0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2b, 0x0a, 0x0a, 0x47, 0x65, 0x74,
	0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70,
	0x74, 0x79, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e,
	0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
	0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
	0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x43,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2c,
	0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x2e,
	0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65,
	0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x08,
	0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65,
	0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x47,
	0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x09, 0x47,
	0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d,
	0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75,
	0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f,
	0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x41,
	0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65,
	0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d,
	0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x11, 0x55, 0x70,
	0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12,
	0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70,
	0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45,
	0x6d, 0x70, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72,
	0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44,
	0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72,
	0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42,
	0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72,
	0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d,
	0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x47,
	0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65,
	0x73, 0x70, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61,
	0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62,
	0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42,
	0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65,
	0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6e,
	0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4b, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f,
	0x75, 0x70, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65,
	0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72,
	0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42,
	0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d,
	0x70, 0x74, 0x79, 0x12, 0x54, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42,
	0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x70,
	0x62, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64,
	0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e,
	0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x4d, 0x65,
	0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x11, 0x53, 0x65, 0x74,
	0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x18,
	0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x46,
	0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d,
	0x70, 0x74, 0x79, 0x42, 0x10, 0x5a, 0x0e, 0x65, 0x67, 0x67, 0x2d, 0x69, 0x6d, 0x2f, 0x70, 0x6b,
	0x67, 0x2f, 0x70, 0x62, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_logic_ext_proto_rawDescOnce sync.Once
	file_logic_ext_proto_rawDescData = file_logic_ext_proto_rawDesc
)

func file_logic_ext_proto_rawDescGZIP() []byte {
	file_logic_ext_proto_rawDescOnce.Do(func() {
		file_logic_ext_proto_rawDescData = protoimpl.X.CompressGZIP(file_logic_ext_proto_rawDescData)
	})
	return file_logic_ext_proto_rawDescData
}

var file_logic_ext_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
var file_logic_ext_proto_msgTypes = make([]protoimpl.MessageInfo, 37)
var file_logic_ext_proto_goTypes = []interface{}{
	(MemberType)(0),                       // 0: pb.MemberType
	(AllMemberBannedType)(0),              // 1: pb.AllMemberBannedType
	(AllAddFriendType)(0),                 // 2: pb.AllAddFriendType
	(*RegisterDeviceReq)(nil),             // 3: pb.RegisterDeviceReq
	(*RegisterDeviceResp)(nil),            // 4: pb.RegisterDeviceResp
	(*SendMessageReq)(nil),                // 5: pb.SendMessageReq
	(*SendMessageResp)(nil),               // 6: pb.SendMessageResp
	(*RecallMessageReq)(nil),              // 7: pb.RecallMessageReq
	(*RecallMessageResp)(nil),             // 8: pb.RecallMessageResp
	(*SendRedPacketReq)(nil),              // 9: pb.SendRedPacketReq
	(*SendRedPacketResp)(nil),             // 10: pb.SendRedPacketResp
	(*PushRoomReq)(nil),                   // 11: pb.PushRoomReq
	(*AddFriendReq)(nil),                  // 12: pb.AddFriendReq
	(*DeleteFriendReq)(nil),               // 13: pb.DeleteFriendReq
	(*AgreeAddFriendReq)(nil),             // 14: pb.AgreeAddFriendReq
	(*SetFriendReq)(nil),                  // 15: pb.SetFriendReq
	(*SetFriendResp)(nil),                 // 16: pb.SetFriendResp
	(*Friend)(nil),                        // 17: pb.Friend
	(*GetFriendsResp)(nil),                // 18: pb.GetFriendsResp
	(*CreateGroupReq)(nil),                // 19: pb.CreateGroupReq
	(*CreateGroupResp)(nil),               // 20: pb.CreateGroupResp
	(*UpdateGroupReq)(nil),                // 21: pb.UpdateGroupReq
	(*GetGroupReq)(nil),                   // 22: pb.GetGroupReq
	(*GetGroupResp)(nil),                  // 23: pb.GetGroupResp
	(*GroupNotice)(nil),                   // 24: pb.GroupNotice
	(*Group)(nil),                         // 25: pb.Group
	(*GetGroupsResp)(nil),                 // 26: pb.GetGroupsResp
	(*AddGroupMembersReq)(nil),            // 27: pb.AddGroupMembersReq
	(*AddGroupMembersResp)(nil),           // 28: pb.AddGroupMembersResp
	(*UpdateGroupMemberReq)(nil),          // 29: pb.UpdateGroupMemberReq
	(*DeleteGroupMemberReq)(nil),          // 30: pb.DeleteGroupMemberReq
	(*GetGroupMembersReq)(nil),            // 31: pb.GetGroupMembersReq
	(*GetGroupMembersResp)(nil),           // 32: pb.GetGroupMembersResp
	(*GroupMember)(nil),                   // 33: pb.GroupMember
	(*SetGroupMemberBannedReq)(nil),       // 34: pb.SetGroupMemberBannedReq
	(*SetGroupMemberRemoveBannedReq)(nil), // 35: pb.SetGroupMemberRemoveBannedReq
	(*SetGroupMemberBannedResp)(nil),      // 36: pb.SetGroupMemberBannedResp
	(*GetGroupBannedMembersReq)(nil),      // 37: pb.GetGroupBannedMembersReq
	(*GetGroupBannedMembersResp)(nil),     // 38: pb.GetGroupBannedMembersResp
	(*SetGroupAddFriendReq)(nil),          // 39: pb.SetGroupAddFriendReq
	(ReceiverType)(0),                     // 40: pb.ReceiverType
	(MessageType)(0),                      // 41: pb.MessageType
	(GroupUserStatusType)(0),              // 42: pb.GroupUserStatusType
	(GroupNoticePublishType)(0),           // 43: pb.GroupNoticePublishType
	(*Empty)(nil),                         // 44: pb.Empty
}
var file_logic_ext_proto_depIdxs = []int32{
	40, // 0: pb.SendMessageReq.receiver_type:type_name -> pb.ReceiverType
	41, // 1: pb.SendMessageReq.message_type:type_name -> pb.MessageType
	40, // 2: pb.RecallMessageReq.receiver_type:type_name -> pb.ReceiverType
	41, // 3: pb.RecallMessageReq.message_type:type_name -> pb.MessageType
	40, // 4: pb.SendRedPacketReq.receiver_type:type_name -> pb.ReceiverType
	41, // 5: pb.SendRedPacketReq.message_type:type_name -> pb.MessageType
	41, // 6: pb.PushRoomReq.message_type:type_name -> pb.MessageType
	17, // 7: pb.GetFriendsResp.friends:type_name -> pb.Friend
	25, // 8: pb.GetGroupResp.group:type_name -> pb.Group
	0,  // 9: pb.GetGroupResp.member_type:type_name -> pb.MemberType
	42, // 10: pb.GetGroupResp.group_user_status_type:type_name -> pb.GroupUserStatusType
	24, // 11: pb.GetGroupResp.group_notice:type_name -> pb.GroupNotice
	43, // 12: pb.GroupNotice.publish_type:type_name -> pb.GroupNoticePublishType
	25, // 13: pb.GetGroupsResp.groups:type_name -> pb.Group
	0,  // 14: pb.UpdateGroupMemberReq.member_type:type_name -> pb.MemberType
	33, // 15: pb.GetGroupMembersResp.members:type_name -> pb.GroupMember
	0,  // 16: pb.GroupMember.member_type:type_name -> pb.MemberType
	1,  // 17: pb.SetGroupMemberBannedReq.is_all_member_banned:type_name -> pb.AllMemberBannedType
	1,  // 18: pb.SetGroupMemberBannedResp.is_all_member_banned:type_name -> pb.AllMemberBannedType
	33, // 19: pb.SetGroupMemberBannedResp.members:type_name -> pb.GroupMember
	33, // 20: pb.GetGroupBannedMembersResp.members:type_name -> pb.GroupMember
	2,  // 21: pb.SetGroupAddFriendReq.is_all_add_friend:type_name -> pb.AllAddFriendType
	3,  // 22: pb.LogicExt.RegisterDevice:input_type -> pb.RegisterDeviceReq
	5,  // 23: pb.LogicExt.SendMessage:input_type -> pb.SendMessageReq
	7,  // 24: pb.LogicExt.RecallMessage:input_type -> pb.RecallMessageReq
	11, // 25: pb.LogicExt.PushRoom:input_type -> pb.PushRoomReq
	9,  // 26: pb.LogicExt.SendRedPacket:input_type -> pb.SendRedPacketReq
	12, // 27: pb.LogicExt.AddFriend:input_type -> pb.AddFriendReq
	14, // 28: pb.LogicExt.AgreeAddFriend:input_type -> pb.AgreeAddFriendReq
	13, // 29: pb.LogicExt.DeleteFriend:input_type -> pb.DeleteFriendReq
	15, // 30: pb.LogicExt.SetFriend:input_type -> pb.SetFriendReq
	44, // 31: pb.LogicExt.GetFriends:input_type -> pb.Empty
	19, // 32: pb.LogicExt.CreateGroup:input_type -> pb.CreateGroupReq
	21, // 33: pb.LogicExt.UpdateGroup:input_type -> pb.UpdateGroupReq
	22, // 34: pb.LogicExt.GetGroup:input_type -> pb.GetGroupReq
	44, // 35: pb.LogicExt.GetGroups:input_type -> pb.Empty
	27, // 36: pb.LogicExt.AddGroupMembers:input_type -> pb.AddGroupMembersReq
	29, // 37: pb.LogicExt.UpdateGroupMember:input_type -> pb.UpdateGroupMemberReq
	30, // 38: pb.LogicExt.DeleteGroupMember:input_type -> pb.DeleteGroupMemberReq
	31, // 39: pb.LogicExt.GetGroupMembers:input_type -> pb.GetGroupMembersReq
	34, // 40: pb.LogicExt.SetGroupBannedMembers:input_type -> pb.SetGroupMemberBannedReq
	35, // 41: pb.LogicExt.SetGroupRemoveBannedMembers:input_type -> pb.SetGroupMemberRemoveBannedReq
	37, // 42: pb.LogicExt.GetGroupBannedMembers:input_type -> pb.GetGroupBannedMembersReq
	39, // 43: pb.LogicExt.SetGroupAddFriend:input_type -> pb.SetGroupAddFriendReq
	4,  // 44: pb.LogicExt.RegisterDevice:output_type -> pb.RegisterDeviceResp
	6,  // 45: pb.LogicExt.SendMessage:output_type -> pb.SendMessageResp
	8,  // 46: pb.LogicExt.RecallMessage:output_type -> pb.RecallMessageResp
	44, // 47: pb.LogicExt.PushRoom:output_type -> pb.Empty
	10, // 48: pb.LogicExt.SendRedPacket:output_type -> pb.SendRedPacketResp
	44, // 49: pb.LogicExt.AddFriend:output_type -> pb.Empty
	44, // 50: pb.LogicExt.AgreeAddFriend:output_type -> pb.Empty
	44, // 51: pb.LogicExt.DeleteFriend:output_type -> pb.Empty
	16, // 52: pb.LogicExt.SetFriend:output_type -> pb.SetFriendResp
	18, // 53: pb.LogicExt.GetFriends:output_type -> pb.GetFriendsResp
	20, // 54: pb.LogicExt.CreateGroup:output_type -> pb.CreateGroupResp
	44, // 55: pb.LogicExt.UpdateGroup:output_type -> pb.Empty
	23, // 56: pb.LogicExt.GetGroup:output_type -> pb.GetGroupResp
	26, // 57: pb.LogicExt.GetGroups:output_type -> pb.GetGroupsResp
	28, // 58: pb.LogicExt.AddGroupMembers:output_type -> pb.AddGroupMembersResp
	44, // 59: pb.LogicExt.UpdateGroupMember:output_type -> pb.Empty
	44, // 60: pb.LogicExt.DeleteGroupMember:output_type -> pb.Empty
	32, // 61: pb.LogicExt.GetGroupMembers:output_type -> pb.GetGroupMembersResp
	36, // 62: pb.LogicExt.SetGroupBannedMembers:output_type -> pb.SetGroupMemberBannedResp
	44, // 63: pb.LogicExt.SetGroupRemoveBannedMembers:output_type -> pb.Empty
	38, // 64: pb.LogicExt.GetGroupBannedMembers:output_type -> pb.GetGroupBannedMembersResp
	44, // 65: pb.LogicExt.SetGroupAddFriend:output_type -> pb.Empty
	44, // [44:66] is the sub-list for method output_type
	22, // [22:44] is the sub-list for method input_type
	22, // [22:22] is the sub-list for extension type_name
	22, // [22:22] is the sub-list for extension extendee
	0,  // [0:22] is the sub-list for field type_name
}

func init() { file_logic_ext_proto_init() }
func file_logic_ext_proto_init() {
	if File_logic_ext_proto != nil {
		return
	}
	file_business_ext_proto_init()
	file_common_ext_proto_init()
	file_connect_ext_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_logic_ext_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RegisterDeviceReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RegisterDeviceResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SendMessageReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SendMessageResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RecallMessageReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RecallMessageResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SendRedPacketReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SendRedPacketResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PushRoomReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AddFriendReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DeleteFriendReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AgreeAddFriendReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SetFriendReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SetFriendResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Friend); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetFriendsResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateGroupReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateGroupResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UpdateGroupReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetGroupReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetGroupResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GroupNotice); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Group); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetGroupsResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AddGroupMembersReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AddGroupMembersResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UpdateGroupMemberReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DeleteGroupMemberReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetGroupMembersReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetGroupMembersResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GroupMember); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SetGroupMemberBannedReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SetGroupMemberRemoveBannedReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SetGroupMemberBannedResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetGroupBannedMembersReq); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetGroupBannedMembersResp); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_logic_ext_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SetGroupAddFriendReq); 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_logic_ext_proto_rawDesc,
			NumEnums:      3,
			NumMessages:   37,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_logic_ext_proto_goTypes,
		DependencyIndexes: file_logic_ext_proto_depIdxs,
		EnumInfos:         file_logic_ext_proto_enumTypes,
		MessageInfos:      file_logic_ext_proto_msgTypes,
	}.Build()
	File_logic_ext_proto = out.File
	file_logic_ext_proto_rawDesc = nil
	file_logic_ext_proto_goTypes = nil
	file_logic_ext_proto_depIdxs = nil
}

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7

// LogicExtClient is the client API for LogicExt service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type LogicExtClient interface {
	// 注册设备
	RegisterDevice(ctx context.Context, in *RegisterDeviceReq, opts ...grpc.CallOption) (*RegisterDeviceResp, error)
	// 发送消息
	SendMessage(ctx context.Context, in *SendMessageReq, opts ...grpc.CallOption) (*SendMessageResp, error)
	// 撤回消息
	RecallMessage(ctx context.Context, in *RecallMessageReq, opts ...grpc.CallOption) (*RecallMessageResp, error)
	// 推送消息到房间
	PushRoom(ctx context.Context, in *PushRoomReq, opts ...grpc.CallOption) (*Empty, error)
	// 发送红包
	SendRedPacket(ctx context.Context, in *SendRedPacketReq, opts ...grpc.CallOption) (*SendRedPacketResp, error)
	// 添加好友
	AddFriend(ctx context.Context, in *AddFriendReq, opts ...grpc.CallOption) (*Empty, error)
	// 同意添加好友
	AgreeAddFriend(ctx context.Context, in *AgreeAddFriendReq, opts ...grpc.CallOption) (*Empty, error)
	// 删除好友
	DeleteFriend(ctx context.Context, in *DeleteFriendReq, opts ...grpc.CallOption) (*Empty, error)
	// 设置好友信息
	SetFriend(ctx context.Context, in *SetFriendReq, opts ...grpc.CallOption) (*SetFriendResp, error)
	// 获取好友列表
	GetFriends(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetFriendsResp, error)
	// 创建群组
	CreateGroup(ctx context.Context, in *CreateGroupReq, opts ...grpc.CallOption) (*CreateGroupResp, error)
	// 更新群组
	UpdateGroup(ctx context.Context, in *UpdateGroupReq, opts ...grpc.CallOption) (*Empty, error)
	// 获取群组信息
	GetGroup(ctx context.Context, in *GetGroupReq, opts ...grpc.CallOption) (*GetGroupResp, error)
	// 获取用户加入的所有群组
	GetGroups(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetGroupsResp, error)
	// 添加群组成员
	AddGroupMembers(ctx context.Context, in *AddGroupMembersReq, opts ...grpc.CallOption) (*AddGroupMembersResp, error)
	// 更新群组成员信息
	UpdateGroupMember(ctx context.Context, in *UpdateGroupMemberReq, opts ...grpc.CallOption) (*Empty, error)
	// 删除群组成员
	DeleteGroupMember(ctx context.Context, in *DeleteGroupMemberReq, opts ...grpc.CallOption) (*Empty, error)
	// 获取群组成员
	GetGroupMembers(ctx context.Context, in *GetGroupMembersReq, opts ...grpc.CallOption) (*GetGroupMembersResp, error)
	// 设置禁言
	SetGroupBannedMembers(ctx context.Context, in *SetGroupMemberBannedReq, opts ...grpc.CallOption) (*SetGroupMemberBannedResp, error)
	// 取消禁言
	SetGroupRemoveBannedMembers(ctx context.Context, in *SetGroupMemberRemoveBannedReq, opts ...grpc.CallOption) (*Empty, error)
	// 获取群组禁言成员
	GetGroupBannedMembers(ctx context.Context, in *GetGroupBannedMembersReq, opts ...grpc.CallOption) (*GetGroupBannedMembersResp, error)
	// 设置是否加好友
	SetGroupAddFriend(ctx context.Context, in *SetGroupAddFriendReq, opts ...grpc.CallOption) (*Empty, error)
}

type logicExtClient struct {
	cc grpc.ClientConnInterface
}

func NewLogicExtClient(cc grpc.ClientConnInterface) LogicExtClient {
	return &logicExtClient{cc}
}

func (c *logicExtClient) RegisterDevice(ctx context.Context, in *RegisterDeviceReq, opts ...grpc.CallOption) (*RegisterDeviceResp, error) {
	out := new(RegisterDeviceResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/RegisterDevice", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) SendMessage(ctx context.Context, in *SendMessageReq, opts ...grpc.CallOption) (*SendMessageResp, error) {
	out := new(SendMessageResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/SendMessage", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) RecallMessage(ctx context.Context, in *RecallMessageReq, opts ...grpc.CallOption) (*RecallMessageResp, error) {
	out := new(RecallMessageResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/RecallMessage", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) PushRoom(ctx context.Context, in *PushRoomReq, opts ...grpc.CallOption) (*Empty, error) {
	out := new(Empty)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/PushRoom", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) SendRedPacket(ctx context.Context, in *SendRedPacketReq, opts ...grpc.CallOption) (*SendRedPacketResp, error) {
	out := new(SendRedPacketResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/SendRedPacket", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) AddFriend(ctx context.Context, in *AddFriendReq, opts ...grpc.CallOption) (*Empty, error) {
	out := new(Empty)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/AddFriend", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) AgreeAddFriend(ctx context.Context, in *AgreeAddFriendReq, opts ...grpc.CallOption) (*Empty, error) {
	out := new(Empty)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/AgreeAddFriend", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) DeleteFriend(ctx context.Context, in *DeleteFriendReq, opts ...grpc.CallOption) (*Empty, error) {
	out := new(Empty)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/DeleteFriend", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) SetFriend(ctx context.Context, in *SetFriendReq, opts ...grpc.CallOption) (*SetFriendResp, error) {
	out := new(SetFriendResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/SetFriend", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) GetFriends(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetFriendsResp, error) {
	out := new(GetFriendsResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/GetFriends", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) CreateGroup(ctx context.Context, in *CreateGroupReq, opts ...grpc.CallOption) (*CreateGroupResp, error) {
	out := new(CreateGroupResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/CreateGroup", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) UpdateGroup(ctx context.Context, in *UpdateGroupReq, opts ...grpc.CallOption) (*Empty, error) {
	out := new(Empty)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/UpdateGroup", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) GetGroup(ctx context.Context, in *GetGroupReq, opts ...grpc.CallOption) (*GetGroupResp, error) {
	out := new(GetGroupResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/GetGroup", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) GetGroups(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetGroupsResp, error) {
	out := new(GetGroupsResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/GetGroups", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) AddGroupMembers(ctx context.Context, in *AddGroupMembersReq, opts ...grpc.CallOption) (*AddGroupMembersResp, error) {
	out := new(AddGroupMembersResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/AddGroupMembers", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) UpdateGroupMember(ctx context.Context, in *UpdateGroupMemberReq, opts ...grpc.CallOption) (*Empty, error) {
	out := new(Empty)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/UpdateGroupMember", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) DeleteGroupMember(ctx context.Context, in *DeleteGroupMemberReq, opts ...grpc.CallOption) (*Empty, error) {
	out := new(Empty)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/DeleteGroupMember", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) GetGroupMembers(ctx context.Context, in *GetGroupMembersReq, opts ...grpc.CallOption) (*GetGroupMembersResp, error) {
	out := new(GetGroupMembersResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/GetGroupMembers", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) SetGroupBannedMembers(ctx context.Context, in *SetGroupMemberBannedReq, opts ...grpc.CallOption) (*SetGroupMemberBannedResp, error) {
	out := new(SetGroupMemberBannedResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/SetGroupBannedMembers", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) SetGroupRemoveBannedMembers(ctx context.Context, in *SetGroupMemberRemoveBannedReq, opts ...grpc.CallOption) (*Empty, error) {
	out := new(Empty)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/SetGroupRemoveBannedMembers", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) GetGroupBannedMembers(ctx context.Context, in *GetGroupBannedMembersReq, opts ...grpc.CallOption) (*GetGroupBannedMembersResp, error) {
	out := new(GetGroupBannedMembersResp)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/GetGroupBannedMembers", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

func (c *logicExtClient) SetGroupAddFriend(ctx context.Context, in *SetGroupAddFriendReq, opts ...grpc.CallOption) (*Empty, error) {
	out := new(Empty)
	err := c.cc.Invoke(ctx, "/pb.LogicExt/SetGroupAddFriend", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// LogicExtServer is the server API for LogicExt service.
// All implementations must embed UnimplementedLogicExtServer
// for forward compatibility
type LogicExtServer interface {
	// 注册设备
	RegisterDevice(context.Context, *RegisterDeviceReq) (*RegisterDeviceResp, error)
	// 发送消息
	SendMessage(context.Context, *SendMessageReq) (*SendMessageResp, error)
	// 撤回消息
	RecallMessage(context.Context, *RecallMessageReq) (*RecallMessageResp, error)
	// 推送消息到房间
	PushRoom(context.Context, *PushRoomReq) (*Empty, error)
	// 发送红包
	SendRedPacket(context.Context, *SendRedPacketReq) (*SendRedPacketResp, error)
	// 添加好友
	AddFriend(context.Context, *AddFriendReq) (*Empty, error)
	// 同意添加好友
	AgreeAddFriend(context.Context, *AgreeAddFriendReq) (*Empty, error)
	// 删除好友
	DeleteFriend(context.Context, *DeleteFriendReq) (*Empty, error)
	// 设置好友信息
	SetFriend(context.Context, *SetFriendReq) (*SetFriendResp, error)
	// 获取好友列表
	GetFriends(context.Context, *Empty) (*GetFriendsResp, error)
	// 创建群组
	CreateGroup(context.Context, *CreateGroupReq) (*CreateGroupResp, error)
	// 更新群组
	UpdateGroup(context.Context, *UpdateGroupReq) (*Empty, error)
	// 获取群组信息
	GetGroup(context.Context, *GetGroupReq) (*GetGroupResp, error)
	// 获取用户加入的所有群组
	GetGroups(context.Context, *Empty) (*GetGroupsResp, error)
	// 添加群组成员
	AddGroupMembers(context.Context, *AddGroupMembersReq) (*AddGroupMembersResp, error)
	// 更新群组成员信息
	UpdateGroupMember(context.Context, *UpdateGroupMemberReq) (*Empty, error)
	// 删除群组成员
	DeleteGroupMember(context.Context, *DeleteGroupMemberReq) (*Empty, error)
	// 获取群组成员
	GetGroupMembers(context.Context, *GetGroupMembersReq) (*GetGroupMembersResp, error)
	// 设置禁言
	SetGroupBannedMembers(context.Context, *SetGroupMemberBannedReq) (*SetGroupMemberBannedResp, error)
	// 取消禁言
	SetGroupRemoveBannedMembers(context.Context, *SetGroupMemberRemoveBannedReq) (*Empty, error)
	// 获取群组禁言成员
	GetGroupBannedMembers(context.Context, *GetGroupBannedMembersReq) (*GetGroupBannedMembersResp, error)
	// 设置是否加好友
	SetGroupAddFriend(context.Context, *SetGroupAddFriendReq) (*Empty, error)
}

// UnimplementedLogicExtServer must be embedded to have forward compatible implementations.
type UnimplementedLogicExtServer struct {
}

func (UnimplementedLogicExtServer) RegisterDevice(context.Context, *RegisterDeviceReq) (*RegisterDeviceResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method RegisterDevice not implemented")
}
func (UnimplementedLogicExtServer) SendMessage(context.Context, *SendMessageReq) (*SendMessageResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method SendMessage not implemented")
}
func (UnimplementedLogicExtServer) RecallMessage(context.Context, *RecallMessageReq) (*RecallMessageResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method RecallMessage not implemented")
}
func (UnimplementedLogicExtServer) PushRoom(context.Context, *PushRoomReq) (*Empty, error) {
	return nil, status.Errorf(codes.Unimplemented, "method PushRoom not implemented")
}
func (UnimplementedLogicExtServer) SendRedPacket(context.Context, *SendRedPacketReq) (*SendRedPacketResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method SendRedPacket not implemented")
}
func (UnimplementedLogicExtServer) AddFriend(context.Context, *AddFriendReq) (*Empty, error) {
	return nil, status.Errorf(codes.Unimplemented, "method AddFriend not implemented")
}
func (UnimplementedLogicExtServer) AgreeAddFriend(context.Context, *AgreeAddFriendReq) (*Empty, error) {
	return nil, status.Errorf(codes.Unimplemented, "method AgreeAddFriend not implemented")
}
func (UnimplementedLogicExtServer) DeleteFriend(context.Context, *DeleteFriendReq) (*Empty, error) {
	return nil, status.Errorf(codes.Unimplemented, "method DeleteFriend not implemented")
}
func (UnimplementedLogicExtServer) SetFriend(context.Context, *SetFriendReq) (*SetFriendResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method SetFriend not implemented")
}
func (UnimplementedLogicExtServer) GetFriends(context.Context, *Empty) (*GetFriendsResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetFriends not implemented")
}
func (UnimplementedLogicExtServer) CreateGroup(context.Context, *CreateGroupReq) (*CreateGroupResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method CreateGroup not implemented")
}
func (UnimplementedLogicExtServer) UpdateGroup(context.Context, *UpdateGroupReq) (*Empty, error) {
	return nil, status.Errorf(codes.Unimplemented, "method UpdateGroup not implemented")
}
func (UnimplementedLogicExtServer) GetGroup(context.Context, *GetGroupReq) (*GetGroupResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetGroup not implemented")
}
func (UnimplementedLogicExtServer) GetGroups(context.Context, *Empty) (*GetGroupsResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetGroups not implemented")
}
func (UnimplementedLogicExtServer) AddGroupMembers(context.Context, *AddGroupMembersReq) (*AddGroupMembersResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method AddGroupMembers not implemented")
}
func (UnimplementedLogicExtServer) UpdateGroupMember(context.Context, *UpdateGroupMemberReq) (*Empty, error) {
	return nil, status.Errorf(codes.Unimplemented, "method UpdateGroupMember not implemented")
}
func (UnimplementedLogicExtServer) DeleteGroupMember(context.Context, *DeleteGroupMemberReq) (*Empty, error) {
	return nil, status.Errorf(codes.Unimplemented, "method DeleteGroupMember not implemented")
}
func (UnimplementedLogicExtServer) GetGroupMembers(context.Context, *GetGroupMembersReq) (*GetGroupMembersResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetGroupMembers not implemented")
}
func (UnimplementedLogicExtServer) SetGroupBannedMembers(context.Context, *SetGroupMemberBannedReq) (*SetGroupMemberBannedResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method SetGroupBannedMembers not implemented")
}
func (UnimplementedLogicExtServer) SetGroupRemoveBannedMembers(context.Context, *SetGroupMemberRemoveBannedReq) (*Empty, error) {
	return nil, status.Errorf(codes.Unimplemented, "method SetGroupRemoveBannedMembers not implemented")
}
func (UnimplementedLogicExtServer) GetGroupBannedMembers(context.Context, *GetGroupBannedMembersReq) (*GetGroupBannedMembersResp, error) {
	return nil, status.Errorf(codes.Unimplemented, "method GetGroupBannedMembers not implemented")
}
func (UnimplementedLogicExtServer) SetGroupAddFriend(context.Context, *SetGroupAddFriendReq) (*Empty, error) {
	return nil, status.Errorf(codes.Unimplemented, "method SetGroupAddFriend not implemented")
}

func RegisterLogicExtServer(s grpc.ServiceRegistrar, srv LogicExtServer) {
	s.RegisterService(&LogicExt_ServiceDesc, srv)
}

func _LogicExt_RegisterDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(RegisterDeviceReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).RegisterDevice(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/RegisterDevice",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).RegisterDevice(ctx, req.(*RegisterDeviceReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_SendMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(SendMessageReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).SendMessage(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/SendMessage",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).SendMessage(ctx, req.(*SendMessageReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_RecallMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(RecallMessageReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).RecallMessage(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/RecallMessage",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).RecallMessage(ctx, req.(*RecallMessageReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_PushRoom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(PushRoomReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).PushRoom(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/PushRoom",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).PushRoom(ctx, req.(*PushRoomReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_SendRedPacket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(SendRedPacketReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).SendRedPacket(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/SendRedPacket",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).SendRedPacket(ctx, req.(*SendRedPacketReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_AddFriend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(AddFriendReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).AddFriend(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/AddFriend",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).AddFriend(ctx, req.(*AddFriendReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_AgreeAddFriend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(AgreeAddFriendReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).AgreeAddFriend(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/AgreeAddFriend",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).AgreeAddFriend(ctx, req.(*AgreeAddFriendReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_DeleteFriend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeleteFriendReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).DeleteFriend(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/DeleteFriend",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).DeleteFriend(ctx, req.(*DeleteFriendReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_SetFriend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(SetFriendReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).SetFriend(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/SetFriend",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).SetFriend(ctx, req.(*SetFriendReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_GetFriends_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(Empty)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).GetFriends(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/GetFriends",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).GetFriends(ctx, req.(*Empty))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_CreateGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(CreateGroupReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).CreateGroup(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/CreateGroup",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).CreateGroup(ctx, req.(*CreateGroupReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_UpdateGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(UpdateGroupReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).UpdateGroup(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/UpdateGroup",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).UpdateGroup(ctx, req.(*UpdateGroupReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_GetGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetGroupReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).GetGroup(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/GetGroup",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).GetGroup(ctx, req.(*GetGroupReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_GetGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(Empty)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).GetGroups(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/GetGroups",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).GetGroups(ctx, req.(*Empty))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_AddGroupMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(AddGroupMembersReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).AddGroupMembers(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/AddGroupMembers",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).AddGroupMembers(ctx, req.(*AddGroupMembersReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_UpdateGroupMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(UpdateGroupMemberReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).UpdateGroupMember(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/UpdateGroupMember",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).UpdateGroupMember(ctx, req.(*UpdateGroupMemberReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_DeleteGroupMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(DeleteGroupMemberReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).DeleteGroupMember(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/DeleteGroupMember",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).DeleteGroupMember(ctx, req.(*DeleteGroupMemberReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_GetGroupMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetGroupMembersReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).GetGroupMembers(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/GetGroupMembers",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).GetGroupMembers(ctx, req.(*GetGroupMembersReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_SetGroupBannedMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(SetGroupMemberBannedReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).SetGroupBannedMembers(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/SetGroupBannedMembers",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).SetGroupBannedMembers(ctx, req.(*SetGroupMemberBannedReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_SetGroupRemoveBannedMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(SetGroupMemberRemoveBannedReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).SetGroupRemoveBannedMembers(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/SetGroupRemoveBannedMembers",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).SetGroupRemoveBannedMembers(ctx, req.(*SetGroupMemberRemoveBannedReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_GetGroupBannedMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(GetGroupBannedMembersReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).GetGroupBannedMembers(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/GetGroupBannedMembers",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).GetGroupBannedMembers(ctx, req.(*GetGroupBannedMembersReq))
	}
	return interceptor(ctx, in, info, handler)
}

func _LogicExt_SetGroupAddFriend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(SetGroupAddFriendReq)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(LogicExtServer).SetGroupAddFriend(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/pb.LogicExt/SetGroupAddFriend",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(LogicExtServer).SetGroupAddFriend(ctx, req.(*SetGroupAddFriendReq))
	}
	return interceptor(ctx, in, info, handler)
}

// LogicExt_ServiceDesc is the grpc.ServiceDesc for LogicExt service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var LogicExt_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "pb.LogicExt",
	HandlerType: (*LogicExtServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "RegisterDevice",
			Handler:    _LogicExt_RegisterDevice_Handler,
		},
		{
			MethodName: "SendMessage",
			Handler:    _LogicExt_SendMessage_Handler,
		},
		{
			MethodName: "RecallMessage",
			Handler:    _LogicExt_RecallMessage_Handler,
		},
		{
			MethodName: "PushRoom",
			Handler:    _LogicExt_PushRoom_Handler,
		},
		{
			MethodName: "SendRedPacket",
			Handler:    _LogicExt_SendRedPacket_Handler,
		},
		{
			MethodName: "AddFriend",
			Handler:    _LogicExt_AddFriend_Handler,
		},
		{
			MethodName: "AgreeAddFriend",
			Handler:    _LogicExt_AgreeAddFriend_Handler,
		},
		{
			MethodName: "DeleteFriend",
			Handler:    _LogicExt_DeleteFriend_Handler,
		},
		{
			MethodName: "SetFriend",
			Handler:    _LogicExt_SetFriend_Handler,
		},
		{
			MethodName: "GetFriends",
			Handler:    _LogicExt_GetFriends_Handler,
		},
		{
			MethodName: "CreateGroup",
			Handler:    _LogicExt_CreateGroup_Handler,
		},
		{
			MethodName: "UpdateGroup",
			Handler:    _LogicExt_UpdateGroup_Handler,
		},
		{
			MethodName: "GetGroup",
			Handler:    _LogicExt_GetGroup_Handler,
		},
		{
			MethodName: "GetGroups",
			Handler:    _LogicExt_GetGroups_Handler,
		},
		{
			MethodName: "AddGroupMembers",
			Handler:    _LogicExt_AddGroupMembers_Handler,
		},
		{
			MethodName: "UpdateGroupMember",
			Handler:    _LogicExt_UpdateGroupMember_Handler,
		},
		{
			MethodName: "DeleteGroupMember",
			Handler:    _LogicExt_DeleteGroupMember_Handler,
		},
		{
			MethodName: "GetGroupMembers",
			Handler:    _LogicExt_GetGroupMembers_Handler,
		},
		{
			MethodName: "SetGroupBannedMembers",
			Handler:    _LogicExt_SetGroupBannedMembers_Handler,
		},
		{
			MethodName: "SetGroupRemoveBannedMembers",
			Handler:    _LogicExt_SetGroupRemoveBannedMembers_Handler,
		},
		{
			MethodName: "GetGroupBannedMembers",
			Handler:    _LogicExt_GetGroupBannedMembers_Handler,
		},
		{
			MethodName: "SetGroupAddFriend",
			Handler:    _LogicExt_SetGroupAddFriend_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "logic.ext.proto",
}