diff --git a/api/bundle/bundle.pb.go b/api/bundle/bundle.pb.go
index aae33e6..de6c7d9 100644
--- a/api/bundle/bundle.pb.go
+++ b/api/bundle/bundle.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.26.0
-// 	protoc        v3.10.1
+// 	protoc-gen-go v1.35.1
+// 	protoc        v5.29.2
 // source: pb/bundle.proto
 
 package bundle
@@ -32,11 +32,9 @@ type CommonResponse struct {
 
 func (x *CommonResponse) Reset() {
 	*x = CommonResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *CommonResponse) String() string {
@@ -47,7 +45,7 @@ func (*CommonResponse) ProtoMessage() {}
 
 func (x *CommonResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -103,11 +101,9 @@ type BundleProfile struct {
 
 func (x *BundleProfile) Reset() {
 	*x = BundleProfile{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *BundleProfile) String() string {
@@ -118,7 +114,7 @@ func (*BundleProfile) ProtoMessage() {}
 
 func (x *BundleProfile) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -220,11 +216,9 @@ type DelBundleRequest struct {
 
 func (x *DelBundleRequest) Reset() {
 	*x = DelBundleRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[2]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *DelBundleRequest) String() string {
@@ -235,7 +229,7 @@ func (*DelBundleRequest) ProtoMessage() {}
 
 func (x *DelBundleRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[2]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -271,11 +265,9 @@ type BundleListRequest struct {
 
 func (x *BundleListRequest) Reset() {
 	*x = BundleListRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[3]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *BundleListRequest) String() string {
@@ -286,7 +278,7 @@ func (*BundleListRequest) ProtoMessage() {}
 
 func (x *BundleListRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[3]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -347,11 +339,9 @@ type BundleListResponse struct {
 
 func (x *BundleListResponse) Reset() {
 	*x = BundleListResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[4]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *BundleListResponse) String() string {
@@ -362,7 +352,7 @@ func (*BundleListResponse) ProtoMessage() {}
 
 func (x *BundleListResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[4]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -401,11 +391,9 @@ type BundleDetailRequest struct {
 
 func (x *BundleDetailRequest) Reset() {
 	*x = BundleDetailRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[5]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[5]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *BundleDetailRequest) String() string {
@@ -416,7 +404,7 @@ func (*BundleDetailRequest) ProtoMessage() {}
 
 func (x *BundleDetailRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[5]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -449,11 +437,9 @@ type BundleDetailResponse struct {
 
 func (x *BundleDetailResponse) Reset() {
 	*x = BundleDetailResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[6]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[6]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *BundleDetailResponse) String() string {
@@ -464,7 +450,7 @@ func (*BundleDetailResponse) ProtoMessage() {}
 
 func (x *BundleDetailResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[6]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -498,33 +484,40 @@ type OrderRecord struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Uuid               string  `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"`
-	BundleUuid         string  `protobuf:"bytes,2,opt,name=bundleUuid,proto3" json:"bundleUuid,omitempty"`
-	CustomerID         string  `protobuf:"bytes,3,opt,name=customerID,proto3" json:"customerID,omitempty"`
-	CustomerNum        string  `protobuf:"bytes,4,opt,name=customerNum,proto3" json:"customerNum,omitempty"`
-	CustomerName       string  `protobuf:"bytes,5,opt,name=customerName,proto3" json:"customerName,omitempty"`
-	Amount             float32 `protobuf:"fixed32,6,opt,name=amount,proto3" json:"amount,omitempty"`
-	AmountType         int64   `protobuf:"varint,7,opt,name=amountType,proto3" json:"amountType,omitempty"`
-	SignContract       string  `protobuf:"bytes,8,opt,name=signContract,proto3" json:"signContract,omitempty"`
-	Signature          string  `protobuf:"bytes,9,opt,name=signature,proto3" json:"signature,omitempty"`
-	SignedTime         string  `protobuf:"bytes,10,opt,name=signedTime,proto3" json:"signedTime,omitempty"`
-	PayType            int64   `protobuf:"varint,11,opt,name=payType,proto3" json:"payType,omitempty"`
-	PayTime            string  `protobuf:"bytes,12,opt,name=payTime,proto3" json:"payTime,omitempty"`
-	CheckoutSessionId  string  `protobuf:"bytes,13,opt,name=checkoutSessionId,proto3" json:"checkoutSessionId,omitempty"`
-	CheckoutSessionUrl string  `protobuf:"bytes,14,opt,name=checkoutSessionUrl,proto3" json:"checkoutSessionUrl,omitempty"`
-	Status             int64   `protobuf:"varint,15,opt,name=status,proto3" json:"status,omitempty"`
-	OrderNo            string  `protobuf:"bytes,16,opt,name=orderNo,proto3" json:"orderNo,omitempty"`
-	BundleName         string  `protobuf:"bytes,17,opt,name=bundleName,proto3" json:"bundleName,omitempty"`
-	ContractNo         string  `protobuf:"bytes,18,opt,name=contractNo,proto3" json:"contractNo,omitempty"`
+	Uuid                 string  `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"`
+	BundleUuid           string  `protobuf:"bytes,2,opt,name=bundleUuid,proto3" json:"bundleUuid,omitempty"`
+	CustomerID           string  `protobuf:"bytes,3,opt,name=customerID,proto3" json:"customerID,omitempty"`
+	CustomerNum          string  `protobuf:"bytes,4,opt,name=customerNum,proto3" json:"customerNum,omitempty"`
+	CustomerName         string  `protobuf:"bytes,5,opt,name=customerName,proto3" json:"customerName,omitempty"`
+	Amount               float32 `protobuf:"fixed32,6,opt,name=amount,proto3" json:"amount,omitempty"`
+	AmountType           int64   `protobuf:"varint,7,opt,name=amountType,proto3" json:"amountType,omitempty"`
+	SignContract         string  `protobuf:"bytes,8,opt,name=signContract,proto3" json:"signContract,omitempty"`
+	Signature            string  `protobuf:"bytes,9,opt,name=signature,proto3" json:"signature,omitempty"`
+	SignedTime           string  `protobuf:"bytes,10,opt,name=signedTime,proto3" json:"signedTime,omitempty"`
+	PayType              int64   `protobuf:"varint,11,opt,name=payType,proto3" json:"payType,omitempty"`
+	PayTime              string  `protobuf:"bytes,12,opt,name=payTime,proto3" json:"payTime,omitempty"`
+	CheckoutSessionId    string  `protobuf:"bytes,13,opt,name=checkoutSessionId,proto3" json:"checkoutSessionId,omitempty"`
+	CheckoutSessionUrl   string  `protobuf:"bytes,14,opt,name=checkoutSessionUrl,proto3" json:"checkoutSessionUrl,omitempty"`
+	Status               int64   `protobuf:"varint,15,opt,name=status,proto3" json:"status,omitempty"`
+	OrderNo              string  `protobuf:"bytes,16,opt,name=orderNo,proto3" json:"orderNo,omitempty"`
+	BundleName           string  `protobuf:"bytes,17,opt,name=bundleName,proto3" json:"bundleName,omitempty"`
+	ContractNo           string  `protobuf:"bytes,18,opt,name=contractNo,proto3" json:"contractNo,omitempty"`
+	IsHaveValueAdd       bool    `protobuf:"varint,19,opt,name=isHaveValueAdd,proto3" json:"isHaveValueAdd,omitempty"`              //是否有增值套餐
+	IsValueAddCustom     bool    `protobuf:"varint,20,opt,name=isValueAddCustom,proto3" json:"isValueAddCustom,omitempty"`          //是否自定义增值套餐条数
+	ValueAddBundleUuid   string  `protobuf:"bytes,21,opt,name=valueAddBundleUuid,proto3" json:"valueAddBundleUuid,omitempty"`       //增值套餐UUID
+	ValueAddBundleNum    int64   `protobuf:"varint,22,opt,name=ValueAddBundleNum,proto3" json:"ValueAddBundleNum,omitempty"`        //增值套餐条数
+	OriginalPrice        float32 `protobuf:"fixed32,23,opt,name=OriginalPrice,proto3" json:"OriginalPrice,omitempty"`               //增值套餐原单价
+	DiscountPrice        float32 `protobuf:"fixed32,24,opt,name=DiscountPrice,proto3" json:"DiscountPrice,omitempty"`               //增值套餐优惠单价
+	ValueAddBundleAmount float32 `protobuf:"fixed32,25,opt,name=ValueAddBundleAmount,proto3" json:"ValueAddBundleAmount,omitempty"` //增值套餐总价
+	SavedAmount          float32 `protobuf:"fixed32,26,opt,name=SavedAmount,proto3" json:"SavedAmount,omitempty"`                   //增值套餐节省金额
+	TotalAmount          float32 `protobuf:"fixed32,27,opt,name=totalAmount,proto3" json:"totalAmount,omitempty"`                   //总金额
 }
 
 func (x *OrderRecord) Reset() {
 	*x = OrderRecord{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[7]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[7]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *OrderRecord) String() string {
@@ -535,7 +528,7 @@ func (*OrderRecord) ProtoMessage() {}
 
 func (x *OrderRecord) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[7]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -676,6 +669,69 @@ func (x *OrderRecord) GetContractNo() string {
 	return ""
 }
 
+func (x *OrderRecord) GetIsHaveValueAdd() bool {
+	if x != nil {
+		return x.IsHaveValueAdd
+	}
+	return false
+}
+
+func (x *OrderRecord) GetIsValueAddCustom() bool {
+	if x != nil {
+		return x.IsValueAddCustom
+	}
+	return false
+}
+
+func (x *OrderRecord) GetValueAddBundleUuid() string {
+	if x != nil {
+		return x.ValueAddBundleUuid
+	}
+	return ""
+}
+
+func (x *OrderRecord) GetValueAddBundleNum() int64 {
+	if x != nil {
+		return x.ValueAddBundleNum
+	}
+	return 0
+}
+
+func (x *OrderRecord) GetOriginalPrice() float32 {
+	if x != nil {
+		return x.OriginalPrice
+	}
+	return 0
+}
+
+func (x *OrderRecord) GetDiscountPrice() float32 {
+	if x != nil {
+		return x.DiscountPrice
+	}
+	return 0
+}
+
+func (x *OrderRecord) GetValueAddBundleAmount() float32 {
+	if x != nil {
+		return x.ValueAddBundleAmount
+	}
+	return 0
+}
+
+func (x *OrderRecord) GetSavedAmount() float32 {
+	if x != nil {
+		return x.SavedAmount
+	}
+	return 0
+}
+
+func (x *OrderRecord) GetTotalAmount() float32 {
+	if x != nil {
+		return x.TotalAmount
+	}
+	return 0
+}
+
 type OrderRecordsRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -694,15 +750,14 @@ type OrderRecordsRequest struct {
 	StartPayTime    string `protobuf:"bytes,11,opt,name=startPayTime,proto3" json:"startPayTime,omitempty"`
 	EndPayTime      string `protobuf:"bytes,12,opt,name=endPayTime,proto3" json:"endPayTime,omitempty"`
 	CustomerID      string `protobuf:"bytes,13,opt,name=customerID,proto3" json:"customerID,omitempty"`
+	IsHaveValueAdd  string `protobuf:"bytes,14,opt,name=IsHaveValueAdd,proto3" json:"IsHaveValueAdd,omitempty"` //有无增值选项
 }
 
 func (x *OrderRecordsRequest) Reset() {
 	*x = OrderRecordsRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[8]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[8]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *OrderRecordsRequest) String() string {
@@ -713,7 +768,7 @@ func (*OrderRecordsRequest) ProtoMessage() {}
 
 func (x *OrderRecordsRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[8]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -819,6 +874,13 @@ func (x *OrderRecordsRequest) GetCustomerID() string {
 	return ""
 }
 
+func (x *OrderRecordsRequest) GetIsHaveValueAdd() string {
+	if x != nil {
+		return x.IsHaveValueAdd
+	}
+	return ""
+}
+
 type OrderRecordsResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -830,11 +892,9 @@ type OrderRecordsResponse struct {
 
 func (x *OrderRecordsResponse) Reset() {
 	*x = OrderRecordsResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[9]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[9]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *OrderRecordsResponse) String() string {
@@ -845,7 +905,7 @@ func (*OrderRecordsResponse) ProtoMessage() {}
 
 func (x *OrderRecordsResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[9]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -886,11 +946,9 @@ type OrderRecordsDetailRequest struct {
 
 func (x *OrderRecordsDetailRequest) Reset() {
 	*x = OrderRecordsDetailRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[10]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[10]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *OrderRecordsDetailRequest) String() string {
@@ -901,7 +959,7 @@ func (*OrderRecordsDetailRequest) ProtoMessage() {}
 
 func (x *OrderRecordsDetailRequest) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[10]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -948,11 +1006,9 @@ type OrderRecordsDetailResponse struct {
 
 func (x *OrderRecordsDetailResponse) Reset() {
 	*x = OrderRecordsDetailResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_pb_bundle_proto_msgTypes[11]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
+	mi := &file_pb_bundle_proto_msgTypes[11]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
 }
 
 func (x *OrderRecordsDetailResponse) String() string {
@@ -963,7 +1019,7 @@ func (*OrderRecordsDetailResponse) ProtoMessage() {}
 
 func (x *OrderRecordsDetailResponse) ProtoReflect() protoreflect.Message {
 	mi := &file_pb_bundle_proto_msgTypes[11]
-	if protoimpl.UnsafeEnabled && x != nil {
+	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
 			ms.StoreMessageInfo(mi)
@@ -992,6 +1048,430 @@ func (x *OrderRecordsDetailResponse) GetMsg() string {
 	return ""
 }
 
+// 增值套餐
+type ValueAddBundleProfile struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Uuid          string  `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"`
+	Name          string  `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	Num           int64   `protobuf:"varint,3,opt,name=num,proto3" json:"num,omitempty"`
+	OriginalPrice float32 `protobuf:"fixed32,4,opt,name=originalPrice,proto3" json:"originalPrice,omitempty"`
+	DiscountPrice float32 `protobuf:"fixed32,5,opt,name=discountPrice,proto3" json:"discountPrice,omitempty"`
+	TotalPrice    float32 `protobuf:"fixed32,6,opt,name=totalPrice,proto3" json:"totalPrice,omitempty"`
+	SavedAmount   float32 `protobuf:"fixed32,7,opt,name=savedAmount,proto3" json:"savedAmount,omitempty"`
+	Language      string  `protobuf:"bytes,11,opt,name=language,proto3" json:"language,omitempty"`
+	CreatedAt     string  `protobuf:"bytes,12,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
+	UpdatedAt     string  `protobuf:"bytes,13,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"`
+}
+
+func (x *ValueAddBundleProfile) Reset() {
+	*x = ValueAddBundleProfile{}
+	mi := &file_pb_bundle_proto_msgTypes[12]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ValueAddBundleProfile) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ValueAddBundleProfile) ProtoMessage() {}
+
+func (x *ValueAddBundleProfile) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[12]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ValueAddBundleProfile.ProtoReflect.Descriptor instead.
+func (*ValueAddBundleProfile) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *ValueAddBundleProfile) GetUuid() string {
+	if x != nil {
+		return x.Uuid
+	}
+	return ""
+}
+
+func (x *ValueAddBundleProfile) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *ValueAddBundleProfile) GetNum() int64 {
+	if x != nil {
+		return x.Num
+	}
+	return 0
+}
+
+func (x *ValueAddBundleProfile) GetOriginalPrice() float32 {
+	if x != nil {
+		return x.OriginalPrice
+	}
+	return 0
+}
+
+func (x *ValueAddBundleProfile) GetDiscountPrice() float32 {
+	if x != nil {
+		return x.DiscountPrice
+	}
+	return 0
+}
+
+func (x *ValueAddBundleProfile) GetTotalPrice() float32 {
+	if x != nil {
+		return x.TotalPrice
+	}
+	return 0
+}
+
+func (x *ValueAddBundleProfile) GetSavedAmount() float32 {
+	if x != nil {
+		return x.SavedAmount
+	}
+	return 0
+}
+
+func (x *ValueAddBundleProfile) GetLanguage() string {
+	if x != nil {
+		return x.Language
+	}
+	return ""
+}
+
+func (x *ValueAddBundleProfile) GetCreatedAt() string {
+	if x != nil {
+		return x.CreatedAt
+	}
+	return ""
+}
+
+func (x *ValueAddBundleProfile) GetUpdatedAt() string {
+	if x != nil {
+		return x.UpdatedAt
+	}
+	return ""
+}
+
+type DelValueAddBundleRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"`
+}
+
+func (x *DelValueAddBundleRequest) Reset() {
+	*x = DelValueAddBundleRequest{}
+	mi := &file_pb_bundle_proto_msgTypes[13]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *DelValueAddBundleRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DelValueAddBundleRequest) ProtoMessage() {}
+
+func (x *DelValueAddBundleRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[13]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DelValueAddBundleRequest.ProtoReflect.Descriptor instead.
+func (*DelValueAddBundleRequest) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *DelValueAddBundleRequest) GetUuid() string {
+	if x != nil {
+		return x.Uuid
+	}
+	return ""
+}
+
+// 增值套餐列表请求
+type ValueAddBundleListRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Page          int32   `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"`
+	PageSize      int32   `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
+	Name          string  `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	Num           int64   `protobuf:"varint,4,opt,name=num,proto3" json:"num,omitempty"`
+	OriginalPrice float32 `protobuf:"fixed32,5,opt,name=originalPrice,proto3" json:"originalPrice,omitempty"`
+	DiscountPrice float32 `protobuf:"fixed32,6,opt,name=discountPrice,proto3" json:"discountPrice,omitempty"`
+	TotalPrice    float32 `protobuf:"fixed32,7,opt,name=totalPrice,proto3" json:"totalPrice,omitempty"`
+	SavedAmount   float32 `protobuf:"fixed32,8,opt,name=savedAmount,proto3" json:"savedAmount,omitempty"`
+	Language      string  `protobuf:"bytes,9,opt,name=language,proto3" json:"language,omitempty"`
+}
+
+func (x *ValueAddBundleListRequest) Reset() {
+	*x = ValueAddBundleListRequest{}
+	mi := &file_pb_bundle_proto_msgTypes[14]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ValueAddBundleListRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ValueAddBundleListRequest) ProtoMessage() {}
+
+func (x *ValueAddBundleListRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[14]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ValueAddBundleListRequest.ProtoReflect.Descriptor instead.
+func (*ValueAddBundleListRequest) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *ValueAddBundleListRequest) GetPage() int32 {
+	if x != nil {
+		return x.Page
+	}
+	return 0
+}
+
+func (x *ValueAddBundleListRequest) GetPageSize() int32 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *ValueAddBundleListRequest) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *ValueAddBundleListRequest) GetNum() int64 {
+	if x != nil {
+		return x.Num
+	}
+	return 0
+}
+
+func (x *ValueAddBundleListRequest) GetOriginalPrice() float32 {
+	if x != nil {
+		return x.OriginalPrice
+	}
+	return 0
+}
+
+func (x *ValueAddBundleListRequest) GetDiscountPrice() float32 {
+	if x != nil {
+		return x.DiscountPrice
+	}
+	return 0
+}
+
+func (x *ValueAddBundleListRequest) GetTotalPrice() float32 {
+	if x != nil {
+		return x.TotalPrice
+	}
+	return 0
+}
+
+func (x *ValueAddBundleListRequest) GetSavedAmount() float32 {
+	if x != nil {
+		return x.SavedAmount
+	}
+	return 0
+}
+
+func (x *ValueAddBundleListRequest) GetLanguage() string {
+	if x != nil {
+		return x.Language
+	}
+	return ""
+}
+
+type ValueAddBundleListResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Bundles []*ValueAddBundleProfile `protobuf:"bytes,1,rep,name=bundles,proto3" json:"bundles,omitempty"`
+	Total   int32                    `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`
+}
+
+func (x *ValueAddBundleListResponse) Reset() {
+	*x = ValueAddBundleListResponse{}
+	mi := &file_pb_bundle_proto_msgTypes[15]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ValueAddBundleListResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ValueAddBundleListResponse) ProtoMessage() {}
+
+func (x *ValueAddBundleListResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[15]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ValueAddBundleListResponse.ProtoReflect.Descriptor instead.
+func (*ValueAddBundleListResponse) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *ValueAddBundleListResponse) GetBundles() []*ValueAddBundleProfile {
+	if x != nil {
+		return x.Bundles
+	}
+	return nil
+}
+
+func (x *ValueAddBundleListResponse) GetTotal() int32 {
+	if x != nil {
+		return x.Total
+	}
+	return 0
+}
+
+type ValueAddBundleDetailRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"`
+}
+
+func (x *ValueAddBundleDetailRequest) Reset() {
+	*x = ValueAddBundleDetailRequest{}
+	mi := &file_pb_bundle_proto_msgTypes[16]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ValueAddBundleDetailRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ValueAddBundleDetailRequest) ProtoMessage() {}
+
+func (x *ValueAddBundleDetailRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[16]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ValueAddBundleDetailRequest.ProtoReflect.Descriptor instead.
+func (*ValueAddBundleDetailRequest) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *ValueAddBundleDetailRequest) GetUuid() string {
+	if x != nil {
+		return x.Uuid
+	}
+	return ""
+}
+
+type ValueAddBundleDetailResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Bundle *ValueAddBundleProfile `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"`
+	Msg    string                 `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"`
+}
+
+func (x *ValueAddBundleDetailResponse) Reset() {
+	*x = ValueAddBundleDetailResponse{}
+	mi := &file_pb_bundle_proto_msgTypes[17]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ValueAddBundleDetailResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ValueAddBundleDetailResponse) ProtoMessage() {}
+
+func (x *ValueAddBundleDetailResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_bundle_proto_msgTypes[17]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ValueAddBundleDetailResponse.ProtoReflect.Descriptor instead.
+func (*ValueAddBundleDetailResponse) Descriptor() ([]byte, []int) {
+	return file_pb_bundle_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *ValueAddBundleDetailResponse) GetBundle() *ValueAddBundleProfile {
+	if x != nil {
+		return x.Bundle
+	}
+	return nil
+}
+
+func (x *ValueAddBundleDetailResponse) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
 var File_pb_bundle_proto protoreflect.FileDescriptor
 
 var file_pb_bundle_proto_rawDesc = []byte{
@@ -1047,8 +1527,8 @@ var file_pb_bundle_proto_rawDesc = []byte{
 	0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
 	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f,
 	0x66, 0x69, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03,
-	0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xc5,
-	0x04, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12,
+	0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xbb,
+	0x07, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12,
 	0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75,
 	0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64,
 	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75,
@@ -1084,102 +1564,219 @@ var file_pb_bundle_proto_rawDesc = []byte{
 	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64,
 	0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61,
 	0x63, 0x74, 0x4e, 0x6f, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74,
-	0x72, 0x61, 0x63, 0x74, 0x4e, 0x6f, 0x22, 0xb1, 0x03, 0x0a, 0x13, 0x4f, 0x72, 0x64, 0x65, 0x72,
-	0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12,
-	0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61,
-	0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x20,
-	0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x75, 0x6d,
-	0x12, 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65,
-	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x55,
-	0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
-	0x55, 0x55, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x16,
-	0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
-	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
-	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64,
-	0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53,
-	0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65,
-	0x12, 0x24, 0x0a, 0x0d, 0x65, 0x6e, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d,
-	0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x64, 0x53, 0x69, 0x67, 0x6e,
-	0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50,
-	0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74,
-	0x61, 0x72, 0x74, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e,
-	0x64, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
-	0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75,
-	0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
-	0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x22, 0x65, 0x0a, 0x14, 0x4f, 0x72,
-	0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72,
-	0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
-	0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0c, 0x6f,
-	0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74,
-	0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61,
-	0x6c, 0x22, 0x69, 0x0a, 0x19, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64,
-	0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12,
-	0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75,
-	0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x1e, 0x0a, 0x0a,
-	0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x22, 0x65, 0x0a, 0x1a,
-	0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65, 0x74, 0x61,
-	0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x6f, 0x72,
-	0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65,
-	0x63, 0x6f, 0x72, 0x64, 0x52, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72,
-	0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
-	0x6d, 0x73, 0x67, 0x32, 0xe7, 0x05, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x3f,
-	0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x15,
+	0x72, 0x61, 0x63, 0x74, 0x4e, 0x6f, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x73, 0x48, 0x61, 0x76, 0x65,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e,
+	0x69, 0x73, 0x48, 0x61, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x12, 0x2a,
+	0x0a, 0x10, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x43, 0x75, 0x73, 0x74,
+	0x6f, 0x6d, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x73, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x41, 0x64, 0x64, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x2e, 0x0a, 0x12, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64,
+	0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64,
+	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x75, 0x6d, 0x18,
+	0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42,
+	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x72, 0x69, 0x67,
+	0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x02, 0x52,
+	0x0d, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x24,
+	0x0a, 0x0d, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18,
+	0x18, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50,
+	0x72, 0x69, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64,
+	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x19, 0x20, 0x01,
+	0x28, 0x02, 0x52, 0x14, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65,
+	0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x53,
+	0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x6f,
+	0x74, 0x61, 0x6c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x02, 0x52,
+	0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xd9, 0x03, 0x0a,
+	0x13, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65,
+	0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65,
+	0x53, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72,
+	0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f,
+	0x6d, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d,
+	0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75,
+	0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x55, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x55, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72,
+	0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64,
+	0x65, 0x72, 0x4e, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a,
+	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f,
+	0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18,
+	0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x69, 0x67, 0x6e,
+	0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x6e, 0x64, 0x53, 0x69, 0x67,
+	0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65,
+	0x6e, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c,
+	0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65,
+	0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x65,
+	0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x18, 0x0d,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44,
+	0x12, 0x26, 0x0a, 0x0e, 0x49, 0x73, 0x48, 0x61, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41,
+	0x64, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x49, 0x73, 0x48, 0x61, 0x76, 0x65,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x22, 0x65, 0x0a, 0x14, 0x4f, 0x72, 0x64, 0x65,
+	0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x37, 0x0a, 0x0c, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e,
+	0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0c, 0x6f, 0x72, 0x64,
+	0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74,
+	0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22,
+	0x69, 0x0a, 0x19, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44,
+	0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04,
+	0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64,
+	0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75,
+	0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+	0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x44, 0x22, 0x65, 0x0a, 0x1a, 0x4f, 0x72,
+	0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x6f, 0x72, 0x64, 0x65,
+	0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
+	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f,
+	0x72, 0x64, 0x52, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12,
+	0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73,
+	0x67, 0x22, 0xb7, 0x02, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75,
+	0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12,
+	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61,
+	0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6f, 0x72,
+	0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x64,
+	0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x02, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63,
+	0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18,
+	0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63,
+	0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74,
+	0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f,
+	0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18,
+	0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12,
+	0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0c, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a,
+	0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x2e, 0x0a, 0x18, 0x44,
+	0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x9b, 0x02, 0x0a, 0x19,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a,
+	0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a,
+	0x03, 0x6e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12,
+	0x24, 0x0a, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c,
+	0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e,
+	0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x64, 0x69,
+	0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74,
+	0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52,
+	0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73,
+	0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02,
+	0x52, 0x0b, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a,
+	0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x6b, 0x0a, 0x1a, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65,
+	0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73,
+	0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x31, 0x0a, 0x1b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41,
+	0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x67, 0x0a, 0x1c, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69,
+	0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x62, 0x75, 0x6e,
+	0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
+	0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d,
+	0x73, 0x67, 0x32, 0x8c, 0x0a, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x3f, 0x0a,
+	0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x15, 0x2e,
+	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f,
+	0x66, 0x69, 0x6c, 0x65, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f,
+	0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x15,
 	0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72,
 	0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43,
 	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
-	0x3f, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12,
-	0x15, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50,
-	0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e,
-	0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x12, 0x42, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65,
-	0x12, 0x18, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x42, 0x75, 0x6e,
-	0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e,
-	0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0a, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69,
-	0x73, 0x74, 0x12, 0x19, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64,
-	0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e,
-	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x42,
-	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1b, 0x2e, 0x62, 0x75,
-	0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69,
-	0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
-	0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61,
-	0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x13, 0x2e,
+	0x42, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12,
+	0x18, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x42, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0a, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73,
+	0x74, 0x12, 0x19, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62,
+	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x42, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1b, 0x2e, 0x62, 0x75, 0x6e,
+	0x64, 0x6c, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
+	0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x13, 0x2e, 0x62,
+	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72,
+	0x64, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x11, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64,
+	0x12, 0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52,
+	0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+	0x4b, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65,
+	0x63, 0x6f, 0x72, 0x64, 0x42, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x13, 0x2e,
 	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f,
 	0x72, 0x64, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
-	0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x11,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72,
-	0x64, 0x12, 0x13, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72,
-	0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e,
-	0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x12, 0x4b, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52,
-	0x65, 0x63, 0x6f, 0x72, 0x64, 0x42, 0x79, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x12, 0x13,
-	0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63,
-	0x6f, 0x72, 0x64, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d,
+	0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x10,
+	0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74,
+	0x12, 0x1b, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52,
+	0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e,
+	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f,
+	0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a,
+	0x12, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65, 0x74,
+	0x61, 0x69, 0x6c, 0x12, 0x21, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64,
+	0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e,
+	0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65, 0x74, 0x61,
+	0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x14,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1d, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x66,
+	0x69, 0x6c, 0x65, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6d,
 	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a,
-	0x10, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x4c, 0x69, 0x73,
-	0x74, 0x12, 0x1b, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72,
-	0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c,
-	0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63,
-	0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d,
-	0x0a, 0x12, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65,
-	0x74, 0x61, 0x69, 0x6c, 0x12, 0x21, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x4f, 0x72,
-	0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
-	0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x44, 0x65, 0x74,
-	0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0a, 0x5a,
-	0x08, 0x2e, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x33,
+	0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42,
+	0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1d, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x72, 0x6f,
+	0x66, 0x69, 0x6c, 0x65, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x43, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52,
+	0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64,
+	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x20, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e,
+	0x44, 0x65, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x5d, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x21, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x75,
+	0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e,
+	0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x00, 0x12, 0x63, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e,
+	0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x23, 0x2e, 0x62, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24,
+	0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64,
+	0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x1a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41,
+	0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x44, 0x65,
+	0x74, 0x61, 0x69, 0x6c, 0x12, 0x23, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61,
+	0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x62, 0x75, 0x6e, 0x64,
+	0x6c, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c,
+	0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1194,51 +1791,71 @@ func file_pb_bundle_proto_rawDescGZIP() []byte {
 	return file_pb_bundle_proto_rawDescData
 }
 
-var file_pb_bundle_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
-var file_pb_bundle_proto_goTypes = []interface{}{
-	(*CommonResponse)(nil),             // 0: bundle.CommonResponse
-	(*BundleProfile)(nil),              // 1: bundle.BundleProfile
-	(*DelBundleRequest)(nil),           // 2: bundle.DelBundleRequest
-	(*BundleListRequest)(nil),          // 3: bundle.BundleListRequest
-	(*BundleListResponse)(nil),         // 4: bundle.BundleListResponse
-	(*BundleDetailRequest)(nil),        // 5: bundle.BundleDetailRequest
-	(*BundleDetailResponse)(nil),       // 6: bundle.BundleDetailResponse
-	(*OrderRecord)(nil),                // 7: bundle.OrderRecord
-	(*OrderRecordsRequest)(nil),        // 8: bundle.OrderRecordsRequest
-	(*OrderRecordsResponse)(nil),       // 9: bundle.OrderRecordsResponse
-	(*OrderRecordsDetailRequest)(nil),  // 10: bundle.OrderRecordsDetailRequest
-	(*OrderRecordsDetailResponse)(nil), // 11: bundle.OrderRecordsDetailResponse
+var file_pb_bundle_proto_msgTypes = make([]protoimpl.MessageInfo, 18)
+var file_pb_bundle_proto_goTypes = []any{
+	(*CommonResponse)(nil),               // 0: bundle.CommonResponse
+	(*BundleProfile)(nil),                // 1: bundle.BundleProfile
+	(*DelBundleRequest)(nil),             // 2: bundle.DelBundleRequest
+	(*BundleListRequest)(nil),            // 3: bundle.BundleListRequest
+	(*BundleListResponse)(nil),           // 4: bundle.BundleListResponse
+	(*BundleDetailRequest)(nil),          // 5: bundle.BundleDetailRequest
+	(*BundleDetailResponse)(nil),         // 6: bundle.BundleDetailResponse
+	(*OrderRecord)(nil),                  // 7: bundle.OrderRecord
+	(*OrderRecordsRequest)(nil),          // 8: bundle.OrderRecordsRequest
+	(*OrderRecordsResponse)(nil),         // 9: bundle.OrderRecordsResponse
+	(*OrderRecordsDetailRequest)(nil),    // 10: bundle.OrderRecordsDetailRequest
+	(*OrderRecordsDetailResponse)(nil),   // 11: bundle.OrderRecordsDetailResponse
+	(*ValueAddBundleProfile)(nil),        // 12: bundle.ValueAddBundleProfile
+	(*DelValueAddBundleRequest)(nil),     // 13: bundle.DelValueAddBundleRequest
+	(*ValueAddBundleListRequest)(nil),    // 14: bundle.ValueAddBundleListRequest
+	(*ValueAddBundleListResponse)(nil),   // 15: bundle.ValueAddBundleListResponse
+	(*ValueAddBundleDetailRequest)(nil),  // 16: bundle.ValueAddBundleDetailRequest
+	(*ValueAddBundleDetailResponse)(nil), // 17: bundle.ValueAddBundleDetailResponse
 }
 var file_pb_bundle_proto_depIdxs = []int32{
 	1,  // 0: bundle.BundleListResponse.bundles:type_name -> bundle.BundleProfile
 	1,  // 1: bundle.BundleDetailResponse.bundle:type_name -> bundle.BundleProfile
 	7,  // 2: bundle.OrderRecordsResponse.orderRecords:type_name -> bundle.OrderRecord
 	7,  // 3: bundle.OrderRecordsDetailResponse.orderRecord:type_name -> bundle.OrderRecord
-	1,  // 4: bundle.Bundle.CreateBundle:input_type -> bundle.BundleProfile
-	1,  // 5: bundle.Bundle.UpdateBundle:input_type -> bundle.BundleProfile
-	2,  // 6: bundle.Bundle.DeleteBundle:input_type -> bundle.DelBundleRequest
-	3,  // 7: bundle.Bundle.BundleList:input_type -> bundle.BundleListRequest
-	5,  // 8: bundle.Bundle.BundleDetail:input_type -> bundle.BundleDetailRequest
-	7,  // 9: bundle.Bundle.CreateOrderRecord:input_type -> bundle.OrderRecord
-	7,  // 10: bundle.Bundle.UpdateOrderRecord:input_type -> bundle.OrderRecord
-	7,  // 11: bundle.Bundle.UpdateOrderRecordByOrderNo:input_type -> bundle.OrderRecord
-	8,  // 12: bundle.Bundle.OrderRecordsList:input_type -> bundle.OrderRecordsRequest
-	10, // 13: bundle.Bundle.OrderRecordsDetail:input_type -> bundle.OrderRecordsDetailRequest
-	0,  // 14: bundle.Bundle.CreateBundle:output_type -> bundle.CommonResponse
-	0,  // 15: bundle.Bundle.UpdateBundle:output_type -> bundle.CommonResponse
-	0,  // 16: bundle.Bundle.DeleteBundle:output_type -> bundle.CommonResponse
-	4,  // 17: bundle.Bundle.BundleList:output_type -> bundle.BundleListResponse
-	6,  // 18: bundle.Bundle.BundleDetail:output_type -> bundle.BundleDetailResponse
-	0,  // 19: bundle.Bundle.CreateOrderRecord:output_type -> bundle.CommonResponse
-	0,  // 20: bundle.Bundle.UpdateOrderRecord:output_type -> bundle.CommonResponse
-	0,  // 21: bundle.Bundle.UpdateOrderRecordByOrderNo:output_type -> bundle.CommonResponse
-	9,  // 22: bundle.Bundle.OrderRecordsList:output_type -> bundle.OrderRecordsResponse
-	11, // 23: bundle.Bundle.OrderRecordsDetail:output_type -> bundle.OrderRecordsDetailResponse
-	14, // [14:24] is the sub-list for method output_type
-	4,  // [4:14] is the sub-list for method input_type
-	4,  // [4:4] is the sub-list for extension type_name
-	4,  // [4:4] is the sub-list for extension extendee
-	0,  // [0:4] is the sub-list for field type_name
+	12, // 4: bundle.ValueAddBundleListResponse.bundles:type_name -> bundle.ValueAddBundleProfile
+	12, // 5: bundle.ValueAddBundleDetailResponse.bundle:type_name -> bundle.ValueAddBundleProfile
+	1,  // 6: bundle.Bundle.CreateBundle:input_type -> bundle.BundleProfile
+	1,  // 7: bundle.Bundle.UpdateBundle:input_type -> bundle.BundleProfile
+	2,  // 8: bundle.Bundle.DeleteBundle:input_type -> bundle.DelBundleRequest
+	3,  // 9: bundle.Bundle.BundleList:input_type -> bundle.BundleListRequest
+	5,  // 10: bundle.Bundle.BundleDetail:input_type -> bundle.BundleDetailRequest
+	7,  // 11: bundle.Bundle.CreateOrderRecord:input_type -> bundle.OrderRecord
+	7,  // 12: bundle.Bundle.UpdateOrderRecord:input_type -> bundle.OrderRecord
+	7,  // 13: bundle.Bundle.UpdateOrderRecordByOrderNo:input_type -> bundle.OrderRecord
+	8,  // 14: bundle.Bundle.OrderRecordsList:input_type -> bundle.OrderRecordsRequest
+	10, // 15: bundle.Bundle.OrderRecordsDetail:input_type -> bundle.OrderRecordsDetailRequest
+	12, // 16: bundle.Bundle.CreateValueAddBundle:input_type -> bundle.ValueAddBundleProfile
+	12, // 17: bundle.Bundle.UpdateValueAddBundle:input_type -> bundle.ValueAddBundleProfile
+	13, // 18: bundle.Bundle.DeleteValueAddBundle:input_type -> bundle.DelValueAddBundleRequest
+	14, // 19: bundle.Bundle.ValueAddBundleList:input_type -> bundle.ValueAddBundleListRequest
+	16, // 20: bundle.Bundle.ValueAddBundleDetail:input_type -> bundle.ValueAddBundleDetailRequest
+	16, // 21: bundle.Bundle.ValueAddBundleRecordDetail:input_type -> bundle.ValueAddBundleDetailRequest
+	0,  // 22: bundle.Bundle.CreateBundle:output_type -> bundle.CommonResponse
+	0,  // 23: bundle.Bundle.UpdateBundle:output_type -> bundle.CommonResponse
+	0,  // 24: bundle.Bundle.DeleteBundle:output_type -> bundle.CommonResponse
+	4,  // 25: bundle.Bundle.BundleList:output_type -> bundle.BundleListResponse
+	6,  // 26: bundle.Bundle.BundleDetail:output_type -> bundle.BundleDetailResponse
+	0,  // 27: bundle.Bundle.CreateOrderRecord:output_type -> bundle.CommonResponse
+	0,  // 28: bundle.Bundle.UpdateOrderRecord:output_type -> bundle.CommonResponse
+	0,  // 29: bundle.Bundle.UpdateOrderRecordByOrderNo:output_type -> bundle.CommonResponse
+	9,  // 30: bundle.Bundle.OrderRecordsList:output_type -> bundle.OrderRecordsResponse
+	11, // 31: bundle.Bundle.OrderRecordsDetail:output_type -> bundle.OrderRecordsDetailResponse
+	0,  // 32: bundle.Bundle.CreateValueAddBundle:output_type -> bundle.CommonResponse
+	0,  // 33: bundle.Bundle.UpdateValueAddBundle:output_type -> bundle.CommonResponse
+	0,  // 34: bundle.Bundle.DeleteValueAddBundle:output_type -> bundle.CommonResponse
+	15, // 35: bundle.Bundle.ValueAddBundleList:output_type -> bundle.ValueAddBundleListResponse
+	17, // 36: bundle.Bundle.ValueAddBundleDetail:output_type -> bundle.ValueAddBundleDetailResponse
+	17, // 37: bundle.Bundle.ValueAddBundleRecordDetail:output_type -> bundle.ValueAddBundleDetailResponse
+	22, // [22:38] is the sub-list for method output_type
+	6,  // [6:22] is the sub-list for method input_type
+	6,  // [6:6] is the sub-list for extension type_name
+	6,  // [6:6] is the sub-list for extension extendee
+	0,  // [0:6] is the sub-list for field type_name
 }
 
 func init() { file_pb_bundle_proto_init() }
@@ -1246,159 +1863,13 @@ func file_pb_bundle_proto_init() {
 	if File_pb_bundle_proto != nil {
 		return
 	}
-	if !protoimpl.UnsafeEnabled {
-		file_pb_bundle_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CommonResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BundleProfile); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DelBundleRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BundleListRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BundleListResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BundleDetailRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*BundleDetailResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*OrderRecord); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*OrderRecordsRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*OrderRecordsResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*OrderRecordsDetailRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_pb_bundle_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*OrderRecordsDetailResponse); 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_pb_bundle_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   12,
+			NumMessages:   18,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/api/bundle/bundle.proto b/api/bundle/bundle.proto
index 7cd4c83..0af4097 100644
--- a/api/bundle/bundle.proto
+++ b/api/bundle/bundle.proto
@@ -17,6 +17,14 @@ service Bundle {
   rpc  OrderRecordsList(OrderRecordsRequest) returns (OrderRecordsResponse) {}
   rpc  OrderRecordsDetail(OrderRecordsDetailRequest) returns (OrderRecordsDetailResponse) {}
 
+  //增值套餐
+  rpc CreateValueAddBundle(ValueAddBundleProfile) returns (CommonResponse) {}
+  rpc UpdateValueAddBundle(ValueAddBundleProfile) returns (CommonResponse) {}
+  rpc DeleteValueAddBundle(DelValueAddBundleRequest) returns (CommonResponse) {}
+  rpc ValueAddBundleList(ValueAddBundleListRequest) returns (ValueAddBundleListResponse) {}
+  rpc ValueAddBundleDetail(ValueAddBundleDetailRequest) returns (ValueAddBundleDetailResponse) {}
+  rpc ValueAddBundleRecordDetail(ValueAddBundleDetailRequest) returns(ValueAddBundleDetailResponse) {}
+
 }
 
 message CommonResponse {
@@ -84,6 +92,16 @@ message OrderRecord {
   string orderNo = 16 [json_name = "orderNo"];
   string bundleName = 17 [json_name = "bundleName"];
   string contractNo = 18 [json_name = "contractNo"];
+
+  bool isHaveValueAdd = 19 [json_name = "isHaveValueAdd"]; //是否有增值套餐
+  bool isValueAddCustom= 20 [json_name = "isValueAddCustom"]; //是否自定义增值套餐条数
+	string valueAddBundleUuid= 21 [json_name= "valueAddBundleUuid"];   //增值套餐UUID
+  int64 ValueAddBundleNum= 22 [json_name= "ValueAddBundleNum"];   //增值套餐条数
+  float OriginalPrice= 23 [json_name= "OriginalPrice"];   //增值套餐原单价
+  float DiscountPrice= 24 [json_name= "DiscountPrice"];   //增值套餐优惠单价
+  float ValueAddBundleAmount= 25 [json_name= "ValueAddBundleAmount"];   //增值套餐总价
+  float SavedAmount= 26 [json_name= "SavedAmount"];   //增值套餐节省金额
+  float totalAmount = 27 [json_name = "totalAmount"]; //总金额
 }
 
 message OrderRecordsRequest {
@@ -100,6 +118,7 @@ message OrderRecordsRequest {
   string startPayTime = 11 [json_name = "startPayTime"];
   string endPayTime = 12 [json_name = "endPayTime"];
   string customerID = 13 [json_name = "customerID"];
+  string IsHaveValueAdd = 14 [json_name = "IsHaveValueAdd"];//有无增值选项
 }
 
 message OrderRecordsResponse {
@@ -116,4 +135,50 @@ message OrderRecordsDetailRequest {
 message OrderRecordsDetailResponse {
   OrderRecord orderRecord = 1 [json_name = "orderRecord"];
   string msg = 2 [json_name = "msg"];
+}
+
+
+
+// 增值套餐
+message ValueAddBundleProfile {
+  string uuid = 1 [json_name = "uuid"];
+  string name = 2 [json_name = "name"];
+  int64 num = 3 [json_name = "num"];
+  float originalPrice = 4 [json_name = "originalPrice"];
+  float discountPrice = 5 [json_name = "discountPrice"];
+  float totalPrice = 6 [json_name = "totalPrice"];
+  float savedAmount = 7 [json_name = "savedAmount"];
+  string language = 11 [json_name = "language"];
+  string createdAt = 12 [json_name = "createdAt"];
+  string updatedAt = 13 [json_name = "updatedAt"];
+}
+
+
+message DelValueAddBundleRequest {
+  string uuid = 1 [json_name = "uuid"];
+}
+
+// 增值套餐列表请求
+message ValueAddBundleListRequest {
+  int32 page = 1 [json_name = "page"];
+  int32 pageSize = 2 [json_name = "pageSize"];
+  string name = 3 [json_name = "name"];
+  int64 num = 4 [json_name = "num"];
+  float originalPrice = 5 [json_name = "originalPrice"];
+  float discountPrice = 6 [json_name = "discountPrice"];
+  float totalPrice = 7 [json_name = "totalPrice"];
+  float savedAmount = 8 [json_name = "savedAmount"];
+  string language = 9 [json_name = "language"];
+
+}
+message ValueAddBundleListResponse {
+  repeated ValueAddBundleProfile bundles = 1 [json_name = "bundles"];
+  int32 total = 2 [json_name = "total"];
+}
+message ValueAddBundleDetailRequest {
+  string uuid = 1 [json_name = "uuid"];
+}
+message ValueAddBundleDetailResponse {
+  ValueAddBundleProfile bundle = 1 [json_name = "bundle"];
+  string msg = 2 [json_name = "msg"];
 }
\ No newline at end of file
diff --git a/api/bundle/bundle.validator.pb.go b/api/bundle/bundle.validator.pb.go
index 06bb35a..8cdae73 100644
--- a/api/bundle/bundle.validator.pb.go
+++ b/api/bundle/bundle.validator.pb.go
@@ -75,3 +75,33 @@ func (this *OrderRecordsDetailResponse) Validate() error {
 	}
 	return nil
 }
+func (this *ValueAddBundleProfile) Validate() error {
+	return nil
+}
+func (this *DelValueAddBundleRequest) Validate() error {
+	return nil
+}
+func (this *ValueAddBundleListRequest) Validate() error {
+	return nil
+}
+func (this *ValueAddBundleListResponse) Validate() error {
+	for _, item := range this.Bundles {
+		if item != nil {
+			if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
+				return github_com_mwitkow_go_proto_validators.FieldError("Bundles", err)
+			}
+		}
+	}
+	return nil
+}
+func (this *ValueAddBundleDetailRequest) Validate() error {
+	return nil
+}
+func (this *ValueAddBundleDetailResponse) Validate() error {
+	if this.Bundle != nil {
+		if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Bundle); err != nil {
+			return github_com_mwitkow_go_proto_validators.FieldError("Bundle", err)
+		}
+	}
+	return nil
+}
diff --git a/api/bundle/bundle_triple.pb.go b/api/bundle/bundle_triple.pb.go
index eca8ba7..b76dc29 100644
--- a/api/bundle/bundle_triple.pb.go
+++ b/api/bundle/bundle_triple.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go-triple. DO NOT EDIT.
 // versions:
 // - protoc-gen-go-triple v1.0.8
-// - protoc             v3.10.1
+// - protoc             v5.29.2
 // source: pb/bundle.proto
 
 package bundle
@@ -38,6 +38,13 @@ type BundleClient interface {
 	UpdateOrderRecordByOrderNo(ctx context.Context, in *OrderRecord, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment)
 	OrderRecordsList(ctx context.Context, in *OrderRecordsRequest, opts ...grpc_go.CallOption) (*OrderRecordsResponse, common.ErrorWithAttachment)
 	OrderRecordsDetail(ctx context.Context, in *OrderRecordsDetailRequest, opts ...grpc_go.CallOption) (*OrderRecordsDetailResponse, common.ErrorWithAttachment)
+	//增值套餐
+	CreateValueAddBundle(ctx context.Context, in *ValueAddBundleProfile, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment)
+	UpdateValueAddBundle(ctx context.Context, in *ValueAddBundleProfile, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment)
+	DeleteValueAddBundle(ctx context.Context, in *DelValueAddBundleRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment)
+	ValueAddBundleList(ctx context.Context, in *ValueAddBundleListRequest, opts ...grpc_go.CallOption) (*ValueAddBundleListResponse, common.ErrorWithAttachment)
+	ValueAddBundleDetail(ctx context.Context, in *ValueAddBundleDetailRequest, opts ...grpc_go.CallOption) (*ValueAddBundleDetailResponse, common.ErrorWithAttachment)
+	ValueAddBundleRecordDetail(ctx context.Context, in *ValueAddBundleDetailRequest, opts ...grpc_go.CallOption) (*ValueAddBundleDetailResponse, common.ErrorWithAttachment)
 }
 
 type bundleClient struct {
@@ -55,6 +62,12 @@ type BundleClientImpl struct {
 	UpdateOrderRecordByOrderNo func(ctx context.Context, in *OrderRecord) (*CommonResponse, error)
 	OrderRecordsList           func(ctx context.Context, in *OrderRecordsRequest) (*OrderRecordsResponse, error)
 	OrderRecordsDetail         func(ctx context.Context, in *OrderRecordsDetailRequest) (*OrderRecordsDetailResponse, error)
+	CreateValueAddBundle       func(ctx context.Context, in *ValueAddBundleProfile) (*CommonResponse, error)
+	UpdateValueAddBundle       func(ctx context.Context, in *ValueAddBundleProfile) (*CommonResponse, error)
+	DeleteValueAddBundle       func(ctx context.Context, in *DelValueAddBundleRequest) (*CommonResponse, error)
+	ValueAddBundleList         func(ctx context.Context, in *ValueAddBundleListRequest) (*ValueAddBundleListResponse, error)
+	ValueAddBundleDetail       func(ctx context.Context, in *ValueAddBundleDetailRequest) (*ValueAddBundleDetailResponse, error)
+	ValueAddBundleRecordDetail func(ctx context.Context, in *ValueAddBundleDetailRequest) (*ValueAddBundleDetailResponse, error)
 }
 
 func (c *BundleClientImpl) GetDubboStub(cc *triple.TripleConn) BundleClient {
@@ -129,6 +142,42 @@ func (c *bundleClient) OrderRecordsDetail(ctx context.Context, in *OrderRecordsD
 	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/OrderRecordsDetail", in, out)
 }
 
+func (c *bundleClient) CreateValueAddBundle(ctx context.Context, in *ValueAddBundleProfile, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) {
+	out := new(CommonResponse)
+	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
+	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CreateValueAddBundle", in, out)
+}
+
+func (c *bundleClient) UpdateValueAddBundle(ctx context.Context, in *ValueAddBundleProfile, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) {
+	out := new(CommonResponse)
+	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
+	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateValueAddBundle", in, out)
+}
+
+func (c *bundleClient) DeleteValueAddBundle(ctx context.Context, in *DelValueAddBundleRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) {
+	out := new(CommonResponse)
+	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
+	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/DeleteValueAddBundle", in, out)
+}
+
+func (c *bundleClient) ValueAddBundleList(ctx context.Context, in *ValueAddBundleListRequest, opts ...grpc_go.CallOption) (*ValueAddBundleListResponse, common.ErrorWithAttachment) {
+	out := new(ValueAddBundleListResponse)
+	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
+	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ValueAddBundleList", in, out)
+}
+
+func (c *bundleClient) ValueAddBundleDetail(ctx context.Context, in *ValueAddBundleDetailRequest, opts ...grpc_go.CallOption) (*ValueAddBundleDetailResponse, common.ErrorWithAttachment) {
+	out := new(ValueAddBundleDetailResponse)
+	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
+	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ValueAddBundleDetail", in, out)
+}
+
+func (c *bundleClient) ValueAddBundleRecordDetail(ctx context.Context, in *ValueAddBundleDetailRequest, opts ...grpc_go.CallOption) (*ValueAddBundleDetailResponse, common.ErrorWithAttachment) {
+	out := new(ValueAddBundleDetailResponse)
+	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
+	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ValueAddBundleRecordDetail", in, out)
+}
+
 // BundleServer is the server API for Bundle service.
 // All implementations must embed UnimplementedBundleServer
 // for forward compatibility
@@ -143,6 +192,13 @@ type BundleServer interface {
 	UpdateOrderRecordByOrderNo(context.Context, *OrderRecord) (*CommonResponse, error)
 	OrderRecordsList(context.Context, *OrderRecordsRequest) (*OrderRecordsResponse, error)
 	OrderRecordsDetail(context.Context, *OrderRecordsDetailRequest) (*OrderRecordsDetailResponse, error)
+	//增值套餐
+	CreateValueAddBundle(context.Context, *ValueAddBundleProfile) (*CommonResponse, error)
+	UpdateValueAddBundle(context.Context, *ValueAddBundleProfile) (*CommonResponse, error)
+	DeleteValueAddBundle(context.Context, *DelValueAddBundleRequest) (*CommonResponse, error)
+	ValueAddBundleList(context.Context, *ValueAddBundleListRequest) (*ValueAddBundleListResponse, error)
+	ValueAddBundleDetail(context.Context, *ValueAddBundleDetailRequest) (*ValueAddBundleDetailResponse, error)
+	ValueAddBundleRecordDetail(context.Context, *ValueAddBundleDetailRequest) (*ValueAddBundleDetailResponse, error)
 	mustEmbedUnimplementedBundleServer()
 }
 
@@ -181,6 +237,24 @@ func (UnimplementedBundleServer) OrderRecordsList(context.Context, *OrderRecords
 func (UnimplementedBundleServer) OrderRecordsDetail(context.Context, *OrderRecordsDetailRequest) (*OrderRecordsDetailResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method OrderRecordsDetail not implemented")
 }
+func (UnimplementedBundleServer) CreateValueAddBundle(context.Context, *ValueAddBundleProfile) (*CommonResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateValueAddBundle not implemented")
+}
+func (UnimplementedBundleServer) UpdateValueAddBundle(context.Context, *ValueAddBundleProfile) (*CommonResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method UpdateValueAddBundle not implemented")
+}
+func (UnimplementedBundleServer) DeleteValueAddBundle(context.Context, *DelValueAddBundleRequest) (*CommonResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteValueAddBundle not implemented")
+}
+func (UnimplementedBundleServer) ValueAddBundleList(context.Context, *ValueAddBundleListRequest) (*ValueAddBundleListResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ValueAddBundleList not implemented")
+}
+func (UnimplementedBundleServer) ValueAddBundleDetail(context.Context, *ValueAddBundleDetailRequest) (*ValueAddBundleDetailResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ValueAddBundleDetail not implemented")
+}
+func (UnimplementedBundleServer) ValueAddBundleRecordDetail(context.Context, *ValueAddBundleDetailRequest) (*ValueAddBundleDetailResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ValueAddBundleRecordDetail not implemented")
+}
 func (s *UnimplementedBundleServer) XXX_SetProxyImpl(impl protocol.Invoker) {
 	s.proxyImpl = impl
 }
@@ -499,6 +573,180 @@ func _Bundle_OrderRecordsDetail_Handler(srv interface{}, ctx context.Context, de
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Bundle_CreateValueAddBundle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ValueAddBundleProfile)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	base := srv.(dubbo3.Dubbo3GrpcService)
+	args := []interface{}{}
+	args = append(args, in)
+	md, _ := metadata.FromIncomingContext(ctx)
+	invAttachment := make(map[string]interface{}, len(md))
+	for k, v := range md {
+		invAttachment[k] = v
+	}
+	invo := invocation.NewRPCInvocation("CreateValueAddBundle", args, invAttachment)
+	if interceptor == nil {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	info := &grpc_go.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bundle_UpdateValueAddBundle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ValueAddBundleProfile)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	base := srv.(dubbo3.Dubbo3GrpcService)
+	args := []interface{}{}
+	args = append(args, in)
+	md, _ := metadata.FromIncomingContext(ctx)
+	invAttachment := make(map[string]interface{}, len(md))
+	for k, v := range md {
+		invAttachment[k] = v
+	}
+	invo := invocation.NewRPCInvocation("UpdateValueAddBundle", args, invAttachment)
+	if interceptor == nil {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	info := &grpc_go.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bundle_DeleteValueAddBundle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DelValueAddBundleRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	base := srv.(dubbo3.Dubbo3GrpcService)
+	args := []interface{}{}
+	args = append(args, in)
+	md, _ := metadata.FromIncomingContext(ctx)
+	invAttachment := make(map[string]interface{}, len(md))
+	for k, v := range md {
+		invAttachment[k] = v
+	}
+	invo := invocation.NewRPCInvocation("DeleteValueAddBundle", args, invAttachment)
+	if interceptor == nil {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	info := &grpc_go.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bundle_ValueAddBundleList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ValueAddBundleListRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	base := srv.(dubbo3.Dubbo3GrpcService)
+	args := []interface{}{}
+	args = append(args, in)
+	md, _ := metadata.FromIncomingContext(ctx)
+	invAttachment := make(map[string]interface{}, len(md))
+	for k, v := range md {
+		invAttachment[k] = v
+	}
+	invo := invocation.NewRPCInvocation("ValueAddBundleList", args, invAttachment)
+	if interceptor == nil {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	info := &grpc_go.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bundle_ValueAddBundleDetail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ValueAddBundleDetailRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	base := srv.(dubbo3.Dubbo3GrpcService)
+	args := []interface{}{}
+	args = append(args, in)
+	md, _ := metadata.FromIncomingContext(ctx)
+	invAttachment := make(map[string]interface{}, len(md))
+	for k, v := range md {
+		invAttachment[k] = v
+	}
+	invo := invocation.NewRPCInvocation("ValueAddBundleDetail", args, invAttachment)
+	if interceptor == nil {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	info := &grpc_go.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bundle_ValueAddBundleRecordDetail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ValueAddBundleDetailRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	base := srv.(dubbo3.Dubbo3GrpcService)
+	args := []interface{}{}
+	args = append(args, in)
+	md, _ := metadata.FromIncomingContext(ctx)
+	invAttachment := make(map[string]interface{}, len(md))
+	for k, v := range md {
+		invAttachment[k] = v
+	}
+	invo := invocation.NewRPCInvocation("ValueAddBundleRecordDetail", args, invAttachment)
+	if interceptor == nil {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	info := &grpc_go.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
+		return result, result.Error()
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // Bundle_ServiceDesc is the grpc_go.ServiceDesc for Bundle service.
 // It's only intended for direct use with grpc_go.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -546,6 +794,30 @@ var Bundle_ServiceDesc = grpc_go.ServiceDesc{
 			MethodName: "OrderRecordsDetail",
 			Handler:    _Bundle_OrderRecordsDetail_Handler,
 		},
+		{
+			MethodName: "CreateValueAddBundle",
+			Handler:    _Bundle_CreateValueAddBundle_Handler,
+		},
+		{
+			MethodName: "UpdateValueAddBundle",
+			Handler:    _Bundle_UpdateValueAddBundle_Handler,
+		},
+		{
+			MethodName: "DeleteValueAddBundle",
+			Handler:    _Bundle_DeleteValueAddBundle_Handler,
+		},
+		{
+			MethodName: "ValueAddBundleList",
+			Handler:    _Bundle_ValueAddBundleList_Handler,
+		},
+		{
+			MethodName: "ValueAddBundleDetail",
+			Handler:    _Bundle_ValueAddBundleDetail_Handler,
+		},
+		{
+			MethodName: "ValueAddBundleRecordDetail",
+			Handler:    _Bundle_ValueAddBundleRecordDetail_Handler,
+		},
 	},
 	Streams:  []grpc_go.StreamDesc{},
 	Metadata: "pb/bundle.proto",
diff --git a/pkg/router/router.go b/pkg/router/router.go
index 67ad907..d2aa0f1 100644
--- a/pkg/router/router.go
+++ b/pkg/router/router.go
@@ -10,9 +10,10 @@ import (
 	"fonchain-fiee/pkg/service/redirect"
 	"fonchain-fiee/pkg/service/upload"
 	"fonchain-fiee/pkg/service/version"
-	"github.com/gin-contrib/gzip"
 	"net/http"
 
+	"github.com/gin-contrib/gzip"
+
 	"github.com/gin-contrib/pprof"
 	"github.com/gin-gonic/gin"
 )
@@ -39,6 +40,7 @@ func NewRouter() *gin.Engine {
 
 	BundleRouter(privateGroup)
 	BundleOrderRouter(privateGroup)
+	ValueAddBundleRouter(privateGroup)
 
 	{
 		v1.POST("version", version.Version) //版本号公共
diff --git a/pkg/router/valueAddBundle.go b/pkg/router/valueAddBundle.go
new file mode 100644
index 0000000..949ee33
--- /dev/null
+++ b/pkg/router/valueAddBundle.go
@@ -0,0 +1,32 @@
+package router
+
+import (
+	"fonchain-fiee/pkg/service/bundle"
+
+	"github.com/gin-gonic/gin"
+)
+
+func ValueAddBundleRouter(r *gin.RouterGroup) {
+	valueAddBundleRoute := r.Group("valueAdd-bundle")
+
+	// 增值套餐
+	{
+		bundleClientRoute := valueAddBundleRoute.Group("system")
+		{
+			bundleClientRoute.POST("create", bundle.CreateBundle)
+			bundleClientRoute.POST("update", bundle.UpdateBundle)
+			bundleClientRoute.POST("remove", bundle.DeleteBundle)
+		}
+
+		bundleAppRoute := valueAddBundleRoute.Group("common")
+		{
+			bundleAppRoute.POST("valueAdd-bundle-list", bundle.BundleList)
+		}
+		bundleCalcRoute := valueAddBundleRoute.Group("calc")
+		{
+			bundleCalcRoute.POST("price", bundle.CalculateBundlePrice)
+		}
+
+	}
+
+}
diff --git a/pkg/service/bundle/bundleOrder.go b/pkg/service/bundle/bundleOrder.go
index 0be36e7..42f6bcf 100644
--- a/pkg/service/bundle/bundleOrder.go
+++ b/pkg/service/bundle/bundleOrder.go
@@ -10,9 +10,10 @@ import (
 	"fonchain-fiee/pkg/service/bundle/common"
 	"fonchain-fiee/pkg/service/bundle/logic"
 	bundleModel "fonchain-fiee/pkg/service/bundle/model"
+	"strconv"
+
 	"github.com/gin-gonic/gin"
 	"github.com/gin-gonic/gin/binding"
-	"strconv"
 )
 
 func CreateBundleOrderSignature(c *gin.Context) {
@@ -27,7 +28,6 @@ func CreateBundleOrderSignature(c *gin.Context) {
 		service.Error(c, errors.New(common.MissBundleUUID))
 		return
 	}
-
 	if req.Signature == "" {
 		service.Error(c, errors.New(common.MissOrderSignature))
 		return
@@ -88,10 +88,34 @@ func CreateBundleOrderSignature(c *gin.Context) {
 		return
 	}
 
+	//获取增值套餐信息
+	if req.ValueAddBundleUuid != "" {
+		req.IsHaveValueAdd = true
+		valueAddBundleDetail, err := service.BundleProvider.ValueAddBundleDetail(context.Background(), &bundle.ValueAddBundleDetailRequest{
+			Uuid: req.ValueAddBundleUuid,
+		})
+		if err != nil {
+			service.Error(c, err)
+			return
+		}
+		//如果是增值套餐条数大于等于30 则手动计算价格
+		if req.IsValueAddCustom {
+			valueAddBundleDetail.Bundle.TotalPrice = valueAddBundleDetail.Bundle.DiscountPrice * float32(req.ValueAddBundleNum)
+			req.SavedAmount = (valueAddBundleDetail.Bundle.OriginalPrice - valueAddBundleDetail.Bundle.DiscountPrice) * float32(req.ValueAddBundleNum)
+		} else {
+			req.ValueAddBundleNum = int64(valueAddBundleDetail.Bundle.Num)
+			req.SavedAmount = valueAddBundleDetail.Bundle.SavedAmount
+		}
+		req.OriginalPrice = valueAddBundleDetail.Bundle.OriginalPrice
+		req.DiscountPrice = valueAddBundleDetail.Bundle.DiscountPrice
+		req.ValueAddBundleAmount = valueAddBundleDetail.Bundle.TotalPrice
+	}
+
 	req.BundleName = bundleDetail.Bundle.Name
 	req.Amount = bundleDetail.Bundle.Price
 	req.AmountType = bundleDetail.Bundle.PriceType
 
+	req.TotalAmount = req.Amount + req.ValueAddBundleAmount
 	req.PayType = 1 // 默认 人民币
 
 	req.ContractNo = common.GenerateContractNo(lastContractNo)
@@ -240,3 +264,32 @@ func OrderRecordsDetail(c *gin.Context) {
 
 	service.Success(c, res)
 }
+func CalculateBundlePrice(c *gin.Context) {
+	var req bundle.ValueAddBundleProfile
+	if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
+		service.Error(c, err)
+		return
+	}
+	detail, err := service.BundleProvider.ValueAddBundleDetail(context.Background(), &bundle.ValueAddBundleDetailRequest{
+		Uuid: req.Uuid,
+	})
+	if err != nil {
+		service.Error(c, err)
+		return
+	}
+	price := detail.Bundle.DiscountPrice * float32(req.Num)
+	service.Success(c, price)
+}
+func ValueAddBundleRecordDetail(c *gin.Context) {
+	var req bundle.ValueAddBundleDetailRequest
+	if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
+		service.Error(c, err)
+		return
+	}
+	detail, err := service.BundleProvider.ValueAddBundleRecordDetail(context.Background(), &req)
+	if err != nil {
+		service.Error(c, err)
+		return
+	}
+	service.Success(c, detail)
+}
diff --git a/pkg/service/bundle/common/msg.go b/pkg/service/bundle/common/msg.go
index 941bdc5..4c8540e 100644
--- a/pkg/service/bundle/common/msg.go
+++ b/pkg/service/bundle/common/msg.go
@@ -12,7 +12,8 @@ const (
 	MissOrderNo   = "缺少订单号"
 	MissOrderUUID = "缺少订单信息"
 
-	NotMatchOrderInfo = "非当前用户订单信息不可操作"
+	NotMatchOrderInfo  = "非当前用户订单信息不可操作"
+	InvalidOrderAmount = "订单金额错误"
 
 	HadPay = "订单已支付"
 
diff --git a/pkg/service/bundle/pay.go b/pkg/service/bundle/pay.go
index 4b80a7d..08d3d0d 100644
--- a/pkg/service/bundle/pay.go
+++ b/pkg/service/bundle/pay.go
@@ -11,11 +11,12 @@ import (
 	"fonchain-fiee/pkg/service"
 	"fonchain-fiee/pkg/service/bundle/common"
 	bundleModel "fonchain-fiee/pkg/service/bundle/model"
-	"github.com/gin-gonic/gin"
-	"github.com/gin-gonic/gin/binding"
 	"io"
 	"net/http"
 	"strconv"
+
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
 )
 
 func CreateStripeCheckoutSession(c *gin.Context) {
@@ -44,6 +45,11 @@ func CreateStripeCheckoutSession(c *gin.Context) {
 		service.Error(c, errors.New(common.NotMatchOrderInfo))
 		return
 	}
+	//金额校验
+	if detail.OrderRecord.TotalAmount != float32(req.ProductAllPrice) {
+		service.Error(c, errors.New(common.InvalidOrderAmount))
+		return
+	}
 
 	// 如果 当前订单 是 已签未支付  且 存在 checkoutSessionId 需要 查询 支付结果
 	if detail.OrderRecord.Status == bundleModel.OrderSigned && detail.OrderRecord.CheckoutSessionId != "" && detail.OrderRecord.PayTime == "" {
diff --git a/pkg/service/bundle/valueAddBundle.go b/pkg/service/bundle/valueAddBundle.go
new file mode 100644
index 0000000..0e42d73
--- /dev/null
+++ b/pkg/service/bundle/valueAddBundle.go
@@ -0,0 +1,79 @@
+package bundle
+
+import (
+	"context"
+	"fonchain-fiee/api/bundle"
+	"fonchain-fiee/pkg/service"
+
+	"github.com/gin-gonic/gin"
+	"github.com/gin-gonic/gin/binding"
+)
+
+func CreateValueAddBundle(c *gin.Context) {
+	var req bundle.ValueAddBundleProfile
+
+	if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
+		service.Error(c, err)
+		return
+	}
+
+	res, err := service.BundleProvider.CreateValueAddBundle(context.Background(), &req)
+	if err != nil {
+		service.Error(c, err)
+		return
+	}
+
+	service.Success(c, res)
+}
+
+func UpdateValueAddBundle(c *gin.Context) {
+	var req bundle.ValueAddBundleProfile
+
+	if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
+		service.Error(c, err)
+		return
+	}
+
+	res, err := service.BundleProvider.UpdateValueAddBundle(context.Background(), &req)
+	if err != nil {
+		service.Error(c, err)
+		return
+	}
+
+	service.Success(c, res)
+
+}
+
+func DeleteValueAddBundle(c *gin.Context) {
+	var req bundle.DelValueAddBundleRequest
+
+	if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
+		service.Error(c, err)
+		return
+	}
+
+	res, err := service.BundleProvider.DeleteValueAddBundle(context.Background(), &req)
+	if err != nil {
+		service.Error(c, err)
+		return
+	}
+
+	service.Success(c, res)
+}
+
+func ValueAddBundleList(c *gin.Context) {
+	var req bundle.ValueAddBundleListRequest
+
+	if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
+		service.Error(c, err)
+		return
+	}
+
+	res, err := service.BundleProvider.ValueAddBundleList(context.Background(), &req)
+	if err != nil {
+		service.Error(c, err)
+		return
+	}
+
+	service.Success(c, res)
+}