// Extracted from: Spotify 1.1.73.517 (macOS) // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 // protoc v3.21.12 // source: playlist4_external.proto package proto import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type ListAttributeKind int32 const ( ListAttributeKind_LIST_UNKNOWN ListAttributeKind = 0 ListAttributeKind_LIST_NAME ListAttributeKind = 1 ListAttributeKind_LIST_DESCRIPTION ListAttributeKind = 2 ListAttributeKind_LIST_PICTURE ListAttributeKind = 3 ListAttributeKind_LIST_COLLABORATIVE ListAttributeKind = 4 ListAttributeKind_LIST_PL3_VERSION ListAttributeKind = 5 ListAttributeKind_LIST_DELETED_BY_OWNER ListAttributeKind = 6 ListAttributeKind_LIST_CLIENT_ID ListAttributeKind = 10 ListAttributeKind_LIST_FORMAT ListAttributeKind = 11 ListAttributeKind_LIST_FORMAT_ATTRIBUTES ListAttributeKind = 12 ListAttributeKind_LIST_PICTURE_SIZE ListAttributeKind = 13 ) // Enum value maps for ListAttributeKind. var ( ListAttributeKind_name = map[int32]string{ 0: "LIST_UNKNOWN", 1: "LIST_NAME", 2: "LIST_DESCRIPTION", 3: "LIST_PICTURE", 4: "LIST_COLLABORATIVE", 5: "LIST_PL3_VERSION", 6: "LIST_DELETED_BY_OWNER", 10: "LIST_CLIENT_ID", 11: "LIST_FORMAT", 12: "LIST_FORMAT_ATTRIBUTES", 13: "LIST_PICTURE_SIZE", } ListAttributeKind_value = map[string]int32{ "LIST_UNKNOWN": 0, "LIST_NAME": 1, "LIST_DESCRIPTION": 2, "LIST_PICTURE": 3, "LIST_COLLABORATIVE": 4, "LIST_PL3_VERSION": 5, "LIST_DELETED_BY_OWNER": 6, "LIST_CLIENT_ID": 10, "LIST_FORMAT": 11, "LIST_FORMAT_ATTRIBUTES": 12, "LIST_PICTURE_SIZE": 13, } ) func (x ListAttributeKind) Enum() *ListAttributeKind { p := new(ListAttributeKind) *p = x return p } func (x ListAttributeKind) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ListAttributeKind) Descriptor() protoreflect.EnumDescriptor { return file_playlist4_external_proto_enumTypes[0].Descriptor() } func (ListAttributeKind) Type() protoreflect.EnumType { return &file_playlist4_external_proto_enumTypes[0] } func (x ListAttributeKind) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *ListAttributeKind) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = ListAttributeKind(num) return nil } // Deprecated: Use ListAttributeKind.Descriptor instead. func (ListAttributeKind) EnumDescriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{0} } type ItemAttributeKind int32 const ( ItemAttributeKind_ITEM_UNKNOWN ItemAttributeKind = 0 ItemAttributeKind_ITEM_ADDED_BY ItemAttributeKind = 1 ItemAttributeKind_ITEM_TIMESTAMP ItemAttributeKind = 2 ItemAttributeKind_ITEM_SEEN_AT ItemAttributeKind = 9 ItemAttributeKind_ITEM_PUBLIC ItemAttributeKind = 10 ItemAttributeKind_ITEM_FORMAT_ATTRIBUTES ItemAttributeKind = 11 ItemAttributeKind_ITEM_ID ItemAttributeKind = 12 ) // Enum value maps for ItemAttributeKind. var ( ItemAttributeKind_name = map[int32]string{ 0: "ITEM_UNKNOWN", 1: "ITEM_ADDED_BY", 2: "ITEM_TIMESTAMP", 9: "ITEM_SEEN_AT", 10: "ITEM_PUBLIC", 11: "ITEM_FORMAT_ATTRIBUTES", 12: "ITEM_ID", } ItemAttributeKind_value = map[string]int32{ "ITEM_UNKNOWN": 0, "ITEM_ADDED_BY": 1, "ITEM_TIMESTAMP": 2, "ITEM_SEEN_AT": 9, "ITEM_PUBLIC": 10, "ITEM_FORMAT_ATTRIBUTES": 11, "ITEM_ID": 12, } ) func (x ItemAttributeKind) Enum() *ItemAttributeKind { p := new(ItemAttributeKind) *p = x return p } func (x ItemAttributeKind) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ItemAttributeKind) Descriptor() protoreflect.EnumDescriptor { return file_playlist4_external_proto_enumTypes[1].Descriptor() } func (ItemAttributeKind) Type() protoreflect.EnumType { return &file_playlist4_external_proto_enumTypes[1] } func (x ItemAttributeKind) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *ItemAttributeKind) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = ItemAttributeKind(num) return nil } // Deprecated: Use ItemAttributeKind.Descriptor instead. func (ItemAttributeKind) EnumDescriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{1} } type GeoblockBlockingType int32 const ( GeoblockBlockingType_GEOBLOCK_BLOCKING_TYPE_UNSPECIFIED GeoblockBlockingType = 0 GeoblockBlockingType_GEOBLOCK_BLOCKING_TYPE_TITLE GeoblockBlockingType = 1 GeoblockBlockingType_GEOBLOCK_BLOCKING_TYPE_DESCRIPTION GeoblockBlockingType = 2 GeoblockBlockingType_GEOBLOCK_BLOCKING_TYPE_IMAGE GeoblockBlockingType = 3 ) // Enum value maps for GeoblockBlockingType. var ( GeoblockBlockingType_name = map[int32]string{ 0: "GEOBLOCK_BLOCKING_TYPE_UNSPECIFIED", 1: "GEOBLOCK_BLOCKING_TYPE_TITLE", 2: "GEOBLOCK_BLOCKING_TYPE_DESCRIPTION", 3: "GEOBLOCK_BLOCKING_TYPE_IMAGE", } GeoblockBlockingType_value = map[string]int32{ "GEOBLOCK_BLOCKING_TYPE_UNSPECIFIED": 0, "GEOBLOCK_BLOCKING_TYPE_TITLE": 1, "GEOBLOCK_BLOCKING_TYPE_DESCRIPTION": 2, "GEOBLOCK_BLOCKING_TYPE_IMAGE": 3, } ) func (x GeoblockBlockingType) Enum() *GeoblockBlockingType { p := new(GeoblockBlockingType) *p = x return p } func (x GeoblockBlockingType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (GeoblockBlockingType) Descriptor() protoreflect.EnumDescriptor { return file_playlist4_external_proto_enumTypes[2].Descriptor() } func (GeoblockBlockingType) Type() protoreflect.EnumType { return &file_playlist4_external_proto_enumTypes[2] } func (x GeoblockBlockingType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *GeoblockBlockingType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = GeoblockBlockingType(num) return nil } // Deprecated: Use GeoblockBlockingType.Descriptor instead. func (GeoblockBlockingType) EnumDescriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{2} } type Op_Kind int32 const ( Op_KIND_UNKNOWN Op_Kind = 0 Op_ADD Op_Kind = 2 Op_REM Op_Kind = 3 Op_MOV Op_Kind = 4 Op_UPDATE_ITEM_ATTRIBUTES Op_Kind = 5 Op_UPDATE_LIST_ATTRIBUTES Op_Kind = 6 ) // Enum value maps for Op_Kind. var ( Op_Kind_name = map[int32]string{ 0: "KIND_UNKNOWN", 2: "ADD", 3: "REM", 4: "MOV", 5: "UPDATE_ITEM_ATTRIBUTES", 6: "UPDATE_LIST_ATTRIBUTES", } Op_Kind_value = map[string]int32{ "KIND_UNKNOWN": 0, "ADD": 2, "REM": 3, "MOV": 4, "UPDATE_ITEM_ATTRIBUTES": 5, "UPDATE_LIST_ATTRIBUTES": 6, } ) func (x Op_Kind) Enum() *Op_Kind { p := new(Op_Kind) *p = x return p } func (x Op_Kind) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Op_Kind) Descriptor() protoreflect.EnumDescriptor { return file_playlist4_external_proto_enumTypes[3].Descriptor() } func (Op_Kind) Type() protoreflect.EnumType { return &file_playlist4_external_proto_enumTypes[3] } func (x Op_Kind) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *Op_Kind) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = Op_Kind(num) return nil } // Deprecated: Use Op_Kind.Descriptor instead. func (Op_Kind) EnumDescriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{14, 0} } type SourceInfo_Client int32 const ( SourceInfo_CLIENT_UNKNOWN SourceInfo_Client = 0 SourceInfo_NATIVE_HERMES SourceInfo_Client = 1 SourceInfo_CLIENT SourceInfo_Client = 2 SourceInfo_PYTHON SourceInfo_Client = 3 SourceInfo_JAVA SourceInfo_Client = 4 SourceInfo_WEBPLAYER SourceInfo_Client = 5 SourceInfo_LIBSPOTIFY SourceInfo_Client = 6 ) // Enum value maps for SourceInfo_Client. var ( SourceInfo_Client_name = map[int32]string{ 0: "CLIENT_UNKNOWN", 1: "NATIVE_HERMES", 2: "CLIENT", 3: "PYTHON", 4: "JAVA", 5: "WEBPLAYER", 6: "LIBSPOTIFY", } SourceInfo_Client_value = map[string]int32{ "CLIENT_UNKNOWN": 0, "NATIVE_HERMES": 1, "CLIENT": 2, "PYTHON": 3, "JAVA": 4, "WEBPLAYER": 5, "LIBSPOTIFY": 6, } ) func (x SourceInfo_Client) Enum() *SourceInfo_Client { p := new(SourceInfo_Client) *p = x return p } func (x SourceInfo_Client) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SourceInfo_Client) Descriptor() protoreflect.EnumDescriptor { return file_playlist4_external_proto_enumTypes[4].Descriptor() } func (SourceInfo_Client) Type() protoreflect.EnumType { return &file_playlist4_external_proto_enumTypes[4] } func (x SourceInfo_Client) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *SourceInfo_Client) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = SourceInfo_Client(num) return nil } // Deprecated: Use SourceInfo_Client.Descriptor instead. func (SourceInfo_Client) EnumDescriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{17, 0} } type Item struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Uri *string `protobuf:"bytes,1,req,name=uri" json:"uri,omitempty"` Attributes *ItemAttributes `protobuf:"bytes,2,opt,name=attributes" json:"attributes,omitempty"` } func (x *Item) Reset() { *x = Item{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Item) String() string { return protoimpl.X.MessageStringOf(x) } func (*Item) ProtoMessage() {} func (x *Item) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Item.ProtoReflect.Descriptor instead. func (*Item) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{0} } func (x *Item) GetUri() string { if x != nil && x.Uri != nil { return *x.Uri } return "" } func (x *Item) GetAttributes() *ItemAttributes { if x != nil { return x.Attributes } return nil } type MetaItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Revision []byte `protobuf:"bytes,1,opt,name=revision" json:"revision,omitempty"` Attributes *ListAttributes `protobuf:"bytes,2,opt,name=attributes" json:"attributes,omitempty"` Length *int32 `protobuf:"varint,3,opt,name=length" json:"length,omitempty"` Timestamp *int64 `protobuf:"varint,4,opt,name=timestamp" json:"timestamp,omitempty"` OwnerUsername *string `protobuf:"bytes,5,opt,name=owner_username,json=ownerUsername" json:"owner_username,omitempty"` AbuseReportingEnabled *bool `protobuf:"varint,6,opt,name=abuse_reporting_enabled,json=abuseReportingEnabled" json:"abuse_reporting_enabled,omitempty"` Capabilities *Capabilities `protobuf:"bytes,7,opt,name=capabilities" json:"capabilities,omitempty"` } func (x *MetaItem) Reset() { *x = MetaItem{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MetaItem) String() string { return protoimpl.X.MessageStringOf(x) } func (*MetaItem) ProtoMessage() {} func (x *MetaItem) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use MetaItem.ProtoReflect.Descriptor instead. func (*MetaItem) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{1} } func (x *MetaItem) GetRevision() []byte { if x != nil { return x.Revision } return nil } func (x *MetaItem) GetAttributes() *ListAttributes { if x != nil { return x.Attributes } return nil } func (x *MetaItem) GetLength() int32 { if x != nil && x.Length != nil { return *x.Length } return 0 } func (x *MetaItem) GetTimestamp() int64 { if x != nil && x.Timestamp != nil { return *x.Timestamp } return 0 } func (x *MetaItem) GetOwnerUsername() string { if x != nil && x.OwnerUsername != nil { return *x.OwnerUsername } return "" } func (x *MetaItem) GetAbuseReportingEnabled() bool { if x != nil && x.AbuseReportingEnabled != nil { return *x.AbuseReportingEnabled } return false } func (x *MetaItem) GetCapabilities() *Capabilities { if x != nil { return x.Capabilities } return nil } type ListItems struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Pos *int32 `protobuf:"varint,1,req,name=pos" json:"pos,omitempty"` Truncated *bool `protobuf:"varint,2,req,name=truncated" json:"truncated,omitempty"` Items []*Item `protobuf:"bytes,3,rep,name=items" json:"items,omitempty"` MetaItems []*MetaItem `protobuf:"bytes,4,rep,name=meta_items,json=metaItems" json:"meta_items,omitempty"` } func (x *ListItems) Reset() { *x = ListItems{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ListItems) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListItems) ProtoMessage() {} func (x *ListItems) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListItems.ProtoReflect.Descriptor instead. func (*ListItems) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{2} } func (x *ListItems) GetPos() int32 { if x != nil && x.Pos != nil { return *x.Pos } return 0 } func (x *ListItems) GetTruncated() bool { if x != nil && x.Truncated != nil { return *x.Truncated } return false } func (x *ListItems) GetItems() []*Item { if x != nil { return x.Items } return nil } func (x *ListItems) GetMetaItems() []*MetaItem { if x != nil { return x.MetaItems } return nil } type FormatListAttribute struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Key *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` Value *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` } func (x *FormatListAttribute) Reset() { *x = FormatListAttribute{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FormatListAttribute) String() string { return protoimpl.X.MessageStringOf(x) } func (*FormatListAttribute) ProtoMessage() {} func (x *FormatListAttribute) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FormatListAttribute.ProtoReflect.Descriptor instead. func (*FormatListAttribute) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{3} } func (x *FormatListAttribute) GetKey() string { if x != nil && x.Key != nil { return *x.Key } return "" } func (x *FormatListAttribute) GetValue() string { if x != nil && x.Value != nil { return *x.Value } return "" } type PictureSize struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields TargetName *string `protobuf:"bytes,1,opt,name=target_name,json=targetName" json:"target_name,omitempty"` Url *string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` } func (x *PictureSize) Reset() { *x = PictureSize{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PictureSize) String() string { return protoimpl.X.MessageStringOf(x) } func (*PictureSize) ProtoMessage() {} func (x *PictureSize) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PictureSize.ProtoReflect.Descriptor instead. func (*PictureSize) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{4} } func (x *PictureSize) GetTargetName() string { if x != nil && x.TargetName != nil { return *x.TargetName } return "" } func (x *PictureSize) GetUrl() string { if x != nil && x.Url != nil { return *x.Url } return "" } type ListAttributes struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` Description *string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` Picture []byte `protobuf:"bytes,3,opt,name=picture" json:"picture,omitempty"` Collaborative *bool `protobuf:"varint,4,opt,name=collaborative" json:"collaborative,omitempty"` Pl3Version *string `protobuf:"bytes,5,opt,name=pl3_version,json=pl3Version" json:"pl3_version,omitempty"` DeletedByOwner *bool `protobuf:"varint,6,opt,name=deleted_by_owner,json=deletedByOwner" json:"deleted_by_owner,omitempty"` ClientId *string `protobuf:"bytes,10,opt,name=client_id,json=clientId" json:"client_id,omitempty"` Format *string `protobuf:"bytes,11,opt,name=format" json:"format,omitempty"` FormatAttributes []*FormatListAttribute `protobuf:"bytes,12,rep,name=format_attributes,json=formatAttributes" json:"format_attributes,omitempty"` PictureSize []*PictureSize `protobuf:"bytes,13,rep,name=picture_size,json=pictureSize" json:"picture_size,omitempty"` } func (x *ListAttributes) Reset() { *x = ListAttributes{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ListAttributes) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListAttributes) ProtoMessage() {} func (x *ListAttributes) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListAttributes.ProtoReflect.Descriptor instead. func (*ListAttributes) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{5} } func (x *ListAttributes) GetName() string { if x != nil && x.Name != nil { return *x.Name } return "" } func (x *ListAttributes) GetDescription() string { if x != nil && x.Description != nil { return *x.Description } return "" } func (x *ListAttributes) GetPicture() []byte { if x != nil { return x.Picture } return nil } func (x *ListAttributes) GetCollaborative() bool { if x != nil && x.Collaborative != nil { return *x.Collaborative } return false } func (x *ListAttributes) GetPl3Version() string { if x != nil && x.Pl3Version != nil { return *x.Pl3Version } return "" } func (x *ListAttributes) GetDeletedByOwner() bool { if x != nil && x.DeletedByOwner != nil { return *x.DeletedByOwner } return false } func (x *ListAttributes) GetClientId() string { if x != nil && x.ClientId != nil { return *x.ClientId } return "" } func (x *ListAttributes) GetFormat() string { if x != nil && x.Format != nil { return *x.Format } return "" } func (x *ListAttributes) GetFormatAttributes() []*FormatListAttribute { if x != nil { return x.FormatAttributes } return nil } func (x *ListAttributes) GetPictureSize() []*PictureSize { if x != nil { return x.PictureSize } return nil } type ItemAttributes struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields AddedBy *string `protobuf:"bytes,1,opt,name=added_by,json=addedBy" json:"added_by,omitempty"` Timestamp *int64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` SeenAt *int64 `protobuf:"varint,9,opt,name=seen_at,json=seenAt" json:"seen_at,omitempty"` Public *bool `protobuf:"varint,10,opt,name=public" json:"public,omitempty"` FormatAttributes []*FormatListAttribute `protobuf:"bytes,11,rep,name=format_attributes,json=formatAttributes" json:"format_attributes,omitempty"` ItemId []byte `protobuf:"bytes,12,opt,name=item_id,json=itemId" json:"item_id,omitempty"` } func (x *ItemAttributes) Reset() { *x = ItemAttributes{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ItemAttributes) String() string { return protoimpl.X.MessageStringOf(x) } func (*ItemAttributes) ProtoMessage() {} func (x *ItemAttributes) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ItemAttributes.ProtoReflect.Descriptor instead. func (*ItemAttributes) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{6} } func (x *ItemAttributes) GetAddedBy() string { if x != nil && x.AddedBy != nil { return *x.AddedBy } return "" } func (x *ItemAttributes) GetTimestamp() int64 { if x != nil && x.Timestamp != nil { return *x.Timestamp } return 0 } func (x *ItemAttributes) GetSeenAt() int64 { if x != nil && x.SeenAt != nil { return *x.SeenAt } return 0 } func (x *ItemAttributes) GetPublic() bool { if x != nil && x.Public != nil { return *x.Public } return false } func (x *ItemAttributes) GetFormatAttributes() []*FormatListAttribute { if x != nil { return x.FormatAttributes } return nil } func (x *ItemAttributes) GetItemId() []byte { if x != nil { return x.ItemId } return nil } type Add struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields FromIndex *int32 `protobuf:"varint,1,opt,name=from_index,json=fromIndex" json:"from_index,omitempty"` Items []*Item `protobuf:"bytes,2,rep,name=items" json:"items,omitempty"` AddLast *bool `protobuf:"varint,4,opt,name=add_last,json=addLast" json:"add_last,omitempty"` AddFirst *bool `protobuf:"varint,5,opt,name=add_first,json=addFirst" json:"add_first,omitempty"` } func (x *Add) Reset() { *x = Add{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Add) String() string { return protoimpl.X.MessageStringOf(x) } func (*Add) ProtoMessage() {} func (x *Add) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Add.ProtoReflect.Descriptor instead. func (*Add) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{7} } func (x *Add) GetFromIndex() int32 { if x != nil && x.FromIndex != nil { return *x.FromIndex } return 0 } func (x *Add) GetItems() []*Item { if x != nil { return x.Items } return nil } func (x *Add) GetAddLast() bool { if x != nil && x.AddLast != nil { return *x.AddLast } return false } func (x *Add) GetAddFirst() bool { if x != nil && x.AddFirst != nil { return *x.AddFirst } return false } type Rem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields FromIndex *int32 `protobuf:"varint,1,opt,name=from_index,json=fromIndex" json:"from_index,omitempty"` Length *int32 `protobuf:"varint,2,opt,name=length" json:"length,omitempty"` Items []*Item `protobuf:"bytes,3,rep,name=items" json:"items,omitempty"` ItemsAsKey *bool `protobuf:"varint,7,opt,name=items_as_key,json=itemsAsKey" json:"items_as_key,omitempty"` } func (x *Rem) Reset() { *x = Rem{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Rem) String() string { return protoimpl.X.MessageStringOf(x) } func (*Rem) ProtoMessage() {} func (x *Rem) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Rem.ProtoReflect.Descriptor instead. func (*Rem) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{8} } func (x *Rem) GetFromIndex() int32 { if x != nil && x.FromIndex != nil { return *x.FromIndex } return 0 } func (x *Rem) GetLength() int32 { if x != nil && x.Length != nil { return *x.Length } return 0 } func (x *Rem) GetItems() []*Item { if x != nil { return x.Items } return nil } func (x *Rem) GetItemsAsKey() bool { if x != nil && x.ItemsAsKey != nil { return *x.ItemsAsKey } return false } type Mov struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields FromIndex *int32 `protobuf:"varint,1,req,name=from_index,json=fromIndex" json:"from_index,omitempty"` Length *int32 `protobuf:"varint,2,req,name=length" json:"length,omitempty"` ToIndex *int32 `protobuf:"varint,3,req,name=to_index,json=toIndex" json:"to_index,omitempty"` } func (x *Mov) Reset() { *x = Mov{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Mov) String() string { return protoimpl.X.MessageStringOf(x) } func (*Mov) ProtoMessage() {} func (x *Mov) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Mov.ProtoReflect.Descriptor instead. func (*Mov) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{9} } func (x *Mov) GetFromIndex() int32 { if x != nil && x.FromIndex != nil { return *x.FromIndex } return 0 } func (x *Mov) GetLength() int32 { if x != nil && x.Length != nil { return *x.Length } return 0 } func (x *Mov) GetToIndex() int32 { if x != nil && x.ToIndex != nil { return *x.ToIndex } return 0 } type ItemAttributesPartialState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Values *ItemAttributes `protobuf:"bytes,1,req,name=values" json:"values,omitempty"` NoValue []ItemAttributeKind `protobuf:"varint,2,rep,name=no_value,json=noValue,enum=spotify.playlist4.proto.ItemAttributeKind" json:"no_value,omitempty"` } func (x *ItemAttributesPartialState) Reset() { *x = ItemAttributesPartialState{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ItemAttributesPartialState) String() string { return protoimpl.X.MessageStringOf(x) } func (*ItemAttributesPartialState) ProtoMessage() {} func (x *ItemAttributesPartialState) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ItemAttributesPartialState.ProtoReflect.Descriptor instead. func (*ItemAttributesPartialState) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{10} } func (x *ItemAttributesPartialState) GetValues() *ItemAttributes { if x != nil { return x.Values } return nil } func (x *ItemAttributesPartialState) GetNoValue() []ItemAttributeKind { if x != nil { return x.NoValue } return nil } type ListAttributesPartialState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Values *ListAttributes `protobuf:"bytes,1,req,name=values" json:"values,omitempty"` NoValue []ListAttributeKind `protobuf:"varint,2,rep,name=no_value,json=noValue,enum=spotify.playlist4.proto.ListAttributeKind" json:"no_value,omitempty"` } func (x *ListAttributesPartialState) Reset() { *x = ListAttributesPartialState{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ListAttributesPartialState) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListAttributesPartialState) ProtoMessage() {} func (x *ListAttributesPartialState) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListAttributesPartialState.ProtoReflect.Descriptor instead. func (*ListAttributesPartialState) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{11} } func (x *ListAttributesPartialState) GetValues() *ListAttributes { if x != nil { return x.Values } return nil } func (x *ListAttributesPartialState) GetNoValue() []ListAttributeKind { if x != nil { return x.NoValue } return nil } type UpdateItemAttributes struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Index *int32 `protobuf:"varint,1,req,name=index" json:"index,omitempty"` NewAttributes *ItemAttributesPartialState `protobuf:"bytes,2,req,name=new_attributes,json=newAttributes" json:"new_attributes,omitempty"` OldAttributes *ItemAttributesPartialState `protobuf:"bytes,3,opt,name=old_attributes,json=oldAttributes" json:"old_attributes,omitempty"` } func (x *UpdateItemAttributes) Reset() { *x = UpdateItemAttributes{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UpdateItemAttributes) String() string { return protoimpl.X.MessageStringOf(x) } func (*UpdateItemAttributes) ProtoMessage() {} func (x *UpdateItemAttributes) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UpdateItemAttributes.ProtoReflect.Descriptor instead. func (*UpdateItemAttributes) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{12} } func (x *UpdateItemAttributes) GetIndex() int32 { if x != nil && x.Index != nil { return *x.Index } return 0 } func (x *UpdateItemAttributes) GetNewAttributes() *ItemAttributesPartialState { if x != nil { return x.NewAttributes } return nil } func (x *UpdateItemAttributes) GetOldAttributes() *ItemAttributesPartialState { if x != nil { return x.OldAttributes } return nil } type UpdateListAttributes struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields NewAttributes *ListAttributesPartialState `protobuf:"bytes,1,req,name=new_attributes,json=newAttributes" json:"new_attributes,omitempty"` OldAttributes *ListAttributesPartialState `protobuf:"bytes,2,opt,name=old_attributes,json=oldAttributes" json:"old_attributes,omitempty"` } func (x *UpdateListAttributes) Reset() { *x = UpdateListAttributes{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UpdateListAttributes) String() string { return protoimpl.X.MessageStringOf(x) } func (*UpdateListAttributes) ProtoMessage() {} func (x *UpdateListAttributes) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UpdateListAttributes.ProtoReflect.Descriptor instead. func (*UpdateListAttributes) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{13} } func (x *UpdateListAttributes) GetNewAttributes() *ListAttributesPartialState { if x != nil { return x.NewAttributes } return nil } func (x *UpdateListAttributes) GetOldAttributes() *ListAttributesPartialState { if x != nil { return x.OldAttributes } return nil } type Op struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Kind *Op_Kind `protobuf:"varint,1,req,name=kind,enum=spotify.playlist4.proto.Op_Kind" json:"kind,omitempty"` Add *Add `protobuf:"bytes,2,opt,name=add" json:"add,omitempty"` Rem *Rem `protobuf:"bytes,3,opt,name=rem" json:"rem,omitempty"` Mov *Mov `protobuf:"bytes,4,opt,name=mov" json:"mov,omitempty"` UpdateItemAttributes *UpdateItemAttributes `protobuf:"bytes,5,opt,name=update_item_attributes,json=updateItemAttributes" json:"update_item_attributes,omitempty"` UpdateListAttributes *UpdateListAttributes `protobuf:"bytes,6,opt,name=update_list_attributes,json=updateListAttributes" json:"update_list_attributes,omitempty"` } func (x *Op) Reset() { *x = Op{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Op) String() string { return protoimpl.X.MessageStringOf(x) } func (*Op) ProtoMessage() {} func (x *Op) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Op.ProtoReflect.Descriptor instead. func (*Op) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{14} } func (x *Op) GetKind() Op_Kind { if x != nil && x.Kind != nil { return *x.Kind } return Op_KIND_UNKNOWN } func (x *Op) GetAdd() *Add { if x != nil { return x.Add } return nil } func (x *Op) GetRem() *Rem { if x != nil { return x.Rem } return nil } func (x *Op) GetMov() *Mov { if x != nil { return x.Mov } return nil } func (x *Op) GetUpdateItemAttributes() *UpdateItemAttributes { if x != nil { return x.UpdateItemAttributes } return nil } func (x *Op) GetUpdateListAttributes() *UpdateListAttributes { if x != nil { return x.UpdateListAttributes } return nil } type OpList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Ops []*Op `protobuf:"bytes,1,rep,name=ops" json:"ops,omitempty"` } func (x *OpList) Reset() { *x = OpList{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *OpList) String() string { return protoimpl.X.MessageStringOf(x) } func (*OpList) ProtoMessage() {} func (x *OpList) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use OpList.ProtoReflect.Descriptor instead. func (*OpList) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{15} } func (x *OpList) GetOps() []*Op { if x != nil { return x.Ops } return nil } type ChangeInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields User *string `protobuf:"bytes,1,opt,name=user" json:"user,omitempty"` Timestamp *int64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` Admin *bool `protobuf:"varint,3,opt,name=admin" json:"admin,omitempty"` Undo *bool `protobuf:"varint,4,opt,name=undo" json:"undo,omitempty"` Redo *bool `protobuf:"varint,5,opt,name=redo" json:"redo,omitempty"` Merge *bool `protobuf:"varint,6,opt,name=merge" json:"merge,omitempty"` Compressed *bool `protobuf:"varint,7,opt,name=compressed" json:"compressed,omitempty"` Migration *bool `protobuf:"varint,8,opt,name=migration" json:"migration,omitempty"` SplitId *int32 `protobuf:"varint,9,opt,name=split_id,json=splitId" json:"split_id,omitempty"` Source *SourceInfo `protobuf:"bytes,10,opt,name=source" json:"source,omitempty"` } func (x *ChangeInfo) Reset() { *x = ChangeInfo{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ChangeInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*ChangeInfo) ProtoMessage() {} func (x *ChangeInfo) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ChangeInfo.ProtoReflect.Descriptor instead. func (*ChangeInfo) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{16} } func (x *ChangeInfo) GetUser() string { if x != nil && x.User != nil { return *x.User } return "" } func (x *ChangeInfo) GetTimestamp() int64 { if x != nil && x.Timestamp != nil { return *x.Timestamp } return 0 } func (x *ChangeInfo) GetAdmin() bool { if x != nil && x.Admin != nil { return *x.Admin } return false } func (x *ChangeInfo) GetUndo() bool { if x != nil && x.Undo != nil { return *x.Undo } return false } func (x *ChangeInfo) GetRedo() bool { if x != nil && x.Redo != nil { return *x.Redo } return false } func (x *ChangeInfo) GetMerge() bool { if x != nil && x.Merge != nil { return *x.Merge } return false } func (x *ChangeInfo) GetCompressed() bool { if x != nil && x.Compressed != nil { return *x.Compressed } return false } func (x *ChangeInfo) GetMigration() bool { if x != nil && x.Migration != nil { return *x.Migration } return false } func (x *ChangeInfo) GetSplitId() int32 { if x != nil && x.SplitId != nil { return *x.SplitId } return 0 } func (x *ChangeInfo) GetSource() *SourceInfo { if x != nil { return x.Source } return nil } type SourceInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Client *SourceInfo_Client `protobuf:"varint,1,opt,name=client,enum=spotify.playlist4.proto.SourceInfo_Client" json:"client,omitempty"` App *string `protobuf:"bytes,3,opt,name=app" json:"app,omitempty"` Source *string `protobuf:"bytes,4,opt,name=source" json:"source,omitempty"` Version *string `protobuf:"bytes,5,opt,name=version" json:"version,omitempty"` } func (x *SourceInfo) Reset() { *x = SourceInfo{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SourceInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*SourceInfo) ProtoMessage() {} func (x *SourceInfo) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SourceInfo.ProtoReflect.Descriptor instead. func (*SourceInfo) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{17} } func (x *SourceInfo) GetClient() SourceInfo_Client { if x != nil && x.Client != nil { return *x.Client } return SourceInfo_CLIENT_UNKNOWN } func (x *SourceInfo) GetApp() string { if x != nil && x.App != nil { return *x.App } return "" } func (x *SourceInfo) GetSource() string { if x != nil && x.Source != nil { return *x.Source } return "" } func (x *SourceInfo) GetVersion() string { if x != nil && x.Version != nil { return *x.Version } return "" } type Delta struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields BaseVersion []byte `protobuf:"bytes,1,opt,name=base_version,json=baseVersion" json:"base_version,omitempty"` Ops []*Op `protobuf:"bytes,2,rep,name=ops" json:"ops,omitempty"` Info *ChangeInfo `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` } func (x *Delta) Reset() { *x = Delta{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Delta) String() string { return protoimpl.X.MessageStringOf(x) } func (*Delta) ProtoMessage() {} func (x *Delta) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Delta.ProtoReflect.Descriptor instead. func (*Delta) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{18} } func (x *Delta) GetBaseVersion() []byte { if x != nil { return x.BaseVersion } return nil } func (x *Delta) GetOps() []*Op { if x != nil { return x.Ops } return nil } func (x *Delta) GetInfo() *ChangeInfo { if x != nil { return x.Info } return nil } type Diff struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields FromRevision []byte `protobuf:"bytes,1,req,name=from_revision,json=fromRevision" json:"from_revision,omitempty"` Ops []*Op `protobuf:"bytes,2,rep,name=ops" json:"ops,omitempty"` ToRevision []byte `protobuf:"bytes,3,req,name=to_revision,json=toRevision" json:"to_revision,omitempty"` } func (x *Diff) Reset() { *x = Diff{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Diff) String() string { return protoimpl.X.MessageStringOf(x) } func (*Diff) ProtoMessage() {} func (x *Diff) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Diff.ProtoReflect.Descriptor instead. func (*Diff) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{19} } func (x *Diff) GetFromRevision() []byte { if x != nil { return x.FromRevision } return nil } func (x *Diff) GetOps() []*Op { if x != nil { return x.Ops } return nil } func (x *Diff) GetToRevision() []byte { if x != nil { return x.ToRevision } return nil } type ListChanges struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields BaseRevision []byte `protobuf:"bytes,1,opt,name=base_revision,json=baseRevision" json:"base_revision,omitempty"` Deltas []*Delta `protobuf:"bytes,2,rep,name=deltas" json:"deltas,omitempty"` WantResultingRevisions *bool `protobuf:"varint,3,opt,name=want_resulting_revisions,json=wantResultingRevisions" json:"want_resulting_revisions,omitempty"` WantSyncResult *bool `protobuf:"varint,4,opt,name=want_sync_result,json=wantSyncResult" json:"want_sync_result,omitempty"` Nonces []int64 `protobuf:"varint,6,rep,name=nonces" json:"nonces,omitempty"` } func (x *ListChanges) Reset() { *x = ListChanges{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ListChanges) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListChanges) ProtoMessage() {} func (x *ListChanges) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListChanges.ProtoReflect.Descriptor instead. func (*ListChanges) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{20} } func (x *ListChanges) GetBaseRevision() []byte { if x != nil { return x.BaseRevision } return nil } func (x *ListChanges) GetDeltas() []*Delta { if x != nil { return x.Deltas } return nil } func (x *ListChanges) GetWantResultingRevisions() bool { if x != nil && x.WantResultingRevisions != nil { return *x.WantResultingRevisions } return false } func (x *ListChanges) GetWantSyncResult() bool { if x != nil && x.WantSyncResult != nil { return *x.WantSyncResult } return false } func (x *ListChanges) GetNonces() []int64 { if x != nil { return x.Nonces } return nil } type SelectedListContent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Revision []byte `protobuf:"bytes,1,opt,name=revision" json:"revision,omitempty"` Length *int32 `protobuf:"varint,2,opt,name=length" json:"length,omitempty"` Attributes *ListAttributes `protobuf:"bytes,3,opt,name=attributes" json:"attributes,omitempty"` Contents *ListItems `protobuf:"bytes,5,opt,name=contents" json:"contents,omitempty"` Diff *Diff `protobuf:"bytes,6,opt,name=diff" json:"diff,omitempty"` SyncResult *Diff `protobuf:"bytes,7,opt,name=sync_result,json=syncResult" json:"sync_result,omitempty"` ResultingRevisions [][]byte `protobuf:"bytes,8,rep,name=resulting_revisions,json=resultingRevisions" json:"resulting_revisions,omitempty"` MultipleHeads *bool `protobuf:"varint,9,opt,name=multiple_heads,json=multipleHeads" json:"multiple_heads,omitempty"` UpToDate *bool `protobuf:"varint,10,opt,name=up_to_date,json=upToDate" json:"up_to_date,omitempty"` Nonces []int64 `protobuf:"varint,14,rep,name=nonces" json:"nonces,omitempty"` Timestamp *int64 `protobuf:"varint,15,opt,name=timestamp" json:"timestamp,omitempty"` OwnerUsername *string `protobuf:"bytes,16,opt,name=owner_username,json=ownerUsername" json:"owner_username,omitempty"` AbuseReportingEnabled *bool `protobuf:"varint,17,opt,name=abuse_reporting_enabled,json=abuseReportingEnabled" json:"abuse_reporting_enabled,omitempty"` Capabilities *Capabilities `protobuf:"bytes,18,opt,name=capabilities" json:"capabilities,omitempty"` Geoblock []GeoblockBlockingType `protobuf:"varint,19,rep,name=geoblock,enum=spotify.playlist4.proto.GeoblockBlockingType" json:"geoblock,omitempty"` } func (x *SelectedListContent) Reset() { *x = SelectedListContent{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SelectedListContent) String() string { return protoimpl.X.MessageStringOf(x) } func (*SelectedListContent) ProtoMessage() {} func (x *SelectedListContent) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SelectedListContent.ProtoReflect.Descriptor instead. func (*SelectedListContent) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{21} } func (x *SelectedListContent) GetRevision() []byte { if x != nil { return x.Revision } return nil } func (x *SelectedListContent) GetLength() int32 { if x != nil && x.Length != nil { return *x.Length } return 0 } func (x *SelectedListContent) GetAttributes() *ListAttributes { if x != nil { return x.Attributes } return nil } func (x *SelectedListContent) GetContents() *ListItems { if x != nil { return x.Contents } return nil } func (x *SelectedListContent) GetDiff() *Diff { if x != nil { return x.Diff } return nil } func (x *SelectedListContent) GetSyncResult() *Diff { if x != nil { return x.SyncResult } return nil } func (x *SelectedListContent) GetResultingRevisions() [][]byte { if x != nil { return x.ResultingRevisions } return nil } func (x *SelectedListContent) GetMultipleHeads() bool { if x != nil && x.MultipleHeads != nil { return *x.MultipleHeads } return false } func (x *SelectedListContent) GetUpToDate() bool { if x != nil && x.UpToDate != nil { return *x.UpToDate } return false } func (x *SelectedListContent) GetNonces() []int64 { if x != nil { return x.Nonces } return nil } func (x *SelectedListContent) GetTimestamp() int64 { if x != nil && x.Timestamp != nil { return *x.Timestamp } return 0 } func (x *SelectedListContent) GetOwnerUsername() string { if x != nil && x.OwnerUsername != nil { return *x.OwnerUsername } return "" } func (x *SelectedListContent) GetAbuseReportingEnabled() bool { if x != nil && x.AbuseReportingEnabled != nil { return *x.AbuseReportingEnabled } return false } func (x *SelectedListContent) GetCapabilities() *Capabilities { if x != nil { return x.Capabilities } return nil } func (x *SelectedListContent) GetGeoblock() []GeoblockBlockingType { if x != nil { return x.Geoblock } return nil } type CreateListReply struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Uri *string `protobuf:"bytes,1,req,name=uri" json:"uri,omitempty"` Revision []byte `protobuf:"bytes,2,opt,name=revision" json:"revision,omitempty"` } func (x *CreateListReply) Reset() { *x = CreateListReply{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CreateListReply) String() string { return protoimpl.X.MessageStringOf(x) } func (*CreateListReply) ProtoMessage() {} func (x *CreateListReply) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CreateListReply.ProtoReflect.Descriptor instead. func (*CreateListReply) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{22} } func (x *CreateListReply) GetUri() string { if x != nil && x.Uri != nil { return *x.Uri } return "" } func (x *CreateListReply) GetRevision() []byte { if x != nil { return x.Revision } return nil } type PlaylistV1UriRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields V2Uris []string `protobuf:"bytes,1,rep,name=v2_uris,json=v2Uris" json:"v2_uris,omitempty"` } func (x *PlaylistV1UriRequest) Reset() { *x = PlaylistV1UriRequest{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PlaylistV1UriRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*PlaylistV1UriRequest) ProtoMessage() {} func (x *PlaylistV1UriRequest) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PlaylistV1UriRequest.ProtoReflect.Descriptor instead. func (*PlaylistV1UriRequest) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{23} } func (x *PlaylistV1UriRequest) GetV2Uris() []string { if x != nil { return x.V2Uris } return nil } type PlaylistV1UriReply struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields V2UriToV1Uri map[string]string `protobuf:"bytes,1,rep,name=v2_uri_to_v1_uri,json=v2UriToV1Uri" json:"v2_uri_to_v1_uri,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (x *PlaylistV1UriReply) Reset() { *x = PlaylistV1UriReply{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PlaylistV1UriReply) String() string { return protoimpl.X.MessageStringOf(x) } func (*PlaylistV1UriReply) ProtoMessage() {} func (x *PlaylistV1UriReply) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PlaylistV1UriReply.ProtoReflect.Descriptor instead. func (*PlaylistV1UriReply) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{24} } func (x *PlaylistV1UriReply) GetV2UriToV1Uri() map[string]string { if x != nil { return x.V2UriToV1Uri } return nil } type ListUpdateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields BaseRevision []byte `protobuf:"bytes,1,opt,name=base_revision,json=baseRevision" json:"base_revision,omitempty"` Attributes *ListAttributes `protobuf:"bytes,2,opt,name=attributes" json:"attributes,omitempty"` Items []*Item `protobuf:"bytes,3,rep,name=items" json:"items,omitempty"` Info *ChangeInfo `protobuf:"bytes,4,opt,name=info" json:"info,omitempty"` } func (x *ListUpdateRequest) Reset() { *x = ListUpdateRequest{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ListUpdateRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListUpdateRequest) ProtoMessage() {} func (x *ListUpdateRequest) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListUpdateRequest.ProtoReflect.Descriptor instead. func (*ListUpdateRequest) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{25} } func (x *ListUpdateRequest) GetBaseRevision() []byte { if x != nil { return x.BaseRevision } return nil } func (x *ListUpdateRequest) GetAttributes() *ListAttributes { if x != nil { return x.Attributes } return nil } func (x *ListUpdateRequest) GetItems() []*Item { if x != nil { return x.Items } return nil } func (x *ListUpdateRequest) GetInfo() *ChangeInfo { if x != nil { return x.Info } return nil } type RegisterPlaylistImageRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields UploadToken *string `protobuf:"bytes,1,opt,name=upload_token,json=uploadToken" json:"upload_token,omitempty"` } func (x *RegisterPlaylistImageRequest) Reset() { *x = RegisterPlaylistImageRequest{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RegisterPlaylistImageRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*RegisterPlaylistImageRequest) ProtoMessage() {} func (x *RegisterPlaylistImageRequest) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RegisterPlaylistImageRequest.ProtoReflect.Descriptor instead. func (*RegisterPlaylistImageRequest) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{26} } func (x *RegisterPlaylistImageRequest) GetUploadToken() string { if x != nil && x.UploadToken != nil { return *x.UploadToken } return "" } type RegisterPlaylistImageResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Picture []byte `protobuf:"bytes,1,opt,name=picture" json:"picture,omitempty"` } func (x *RegisterPlaylistImageResponse) Reset() { *x = RegisterPlaylistImageResponse{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RegisterPlaylistImageResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*RegisterPlaylistImageResponse) ProtoMessage() {} func (x *RegisterPlaylistImageResponse) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RegisterPlaylistImageResponse.ProtoReflect.Descriptor instead. func (*RegisterPlaylistImageResponse) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{27} } func (x *RegisterPlaylistImageResponse) GetPicture() []byte { if x != nil { return x.Picture } return nil } type ResolvedPersonalizedPlaylist struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Uri *string `protobuf:"bytes,1,opt,name=uri" json:"uri,omitempty"` Tag *string `protobuf:"bytes,2,opt,name=tag" json:"tag,omitempty"` } func (x *ResolvedPersonalizedPlaylist) Reset() { *x = ResolvedPersonalizedPlaylist{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ResolvedPersonalizedPlaylist) String() string { return protoimpl.X.MessageStringOf(x) } func (*ResolvedPersonalizedPlaylist) ProtoMessage() {} func (x *ResolvedPersonalizedPlaylist) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ResolvedPersonalizedPlaylist.ProtoReflect.Descriptor instead. func (*ResolvedPersonalizedPlaylist) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{28} } func (x *ResolvedPersonalizedPlaylist) GetUri() string { if x != nil && x.Uri != nil { return *x.Uri } return "" } func (x *ResolvedPersonalizedPlaylist) GetTag() string { if x != nil && x.Tag != nil { return *x.Tag } return "" } type PlaylistUriResolverResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ResolvedPlaylists []*ResolvedPersonalizedPlaylist `protobuf:"bytes,1,rep,name=resolved_playlists,json=resolvedPlaylists" json:"resolved_playlists,omitempty"` } func (x *PlaylistUriResolverResponse) Reset() { *x = PlaylistUriResolverResponse{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PlaylistUriResolverResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*PlaylistUriResolverResponse) ProtoMessage() {} func (x *PlaylistUriResolverResponse) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PlaylistUriResolverResponse.ProtoReflect.Descriptor instead. func (*PlaylistUriResolverResponse) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{29} } func (x *PlaylistUriResolverResponse) GetResolvedPlaylists() []*ResolvedPersonalizedPlaylist { if x != nil { return x.ResolvedPlaylists } return nil } type SubscribeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Uris [][]byte `protobuf:"bytes,1,rep,name=uris" json:"uris,omitempty"` } func (x *SubscribeRequest) Reset() { *x = SubscribeRequest{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SubscribeRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SubscribeRequest) ProtoMessage() {} func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SubscribeRequest.ProtoReflect.Descriptor instead. func (*SubscribeRequest) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{30} } func (x *SubscribeRequest) GetUris() [][]byte { if x != nil { return x.Uris } return nil } type UnsubscribeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Uris [][]byte `protobuf:"bytes,1,rep,name=uris" json:"uris,omitempty"` } func (x *UnsubscribeRequest) Reset() { *x = UnsubscribeRequest{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UnsubscribeRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*UnsubscribeRequest) ProtoMessage() {} func (x *UnsubscribeRequest) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UnsubscribeRequest.ProtoReflect.Descriptor instead. func (*UnsubscribeRequest) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{31} } func (x *UnsubscribeRequest) GetUris() [][]byte { if x != nil { return x.Uris } return nil } type PlaylistModificationInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Uri []byte `protobuf:"bytes,1,opt,name=uri" json:"uri,omitempty"` NewRevision []byte `protobuf:"bytes,2,opt,name=new_revision,json=newRevision" json:"new_revision,omitempty"` ParentRevision []byte `protobuf:"bytes,3,opt,name=parent_revision,json=parentRevision" json:"parent_revision,omitempty"` Ops []*Op `protobuf:"bytes,4,rep,name=ops" json:"ops,omitempty"` } func (x *PlaylistModificationInfo) Reset() { *x = PlaylistModificationInfo{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PlaylistModificationInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*PlaylistModificationInfo) ProtoMessage() {} func (x *PlaylistModificationInfo) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PlaylistModificationInfo.ProtoReflect.Descriptor instead. func (*PlaylistModificationInfo) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{32} } func (x *PlaylistModificationInfo) GetUri() []byte { if x != nil { return x.Uri } return nil } func (x *PlaylistModificationInfo) GetNewRevision() []byte { if x != nil { return x.NewRevision } return nil } func (x *PlaylistModificationInfo) GetParentRevision() []byte { if x != nil { return x.ParentRevision } return nil } func (x *PlaylistModificationInfo) GetOps() []*Op { if x != nil { return x.Ops } return nil } type RootlistModificationInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields NewRevision []byte `protobuf:"bytes,1,opt,name=new_revision,json=newRevision" json:"new_revision,omitempty"` ParentRevision []byte `protobuf:"bytes,2,opt,name=parent_revision,json=parentRevision" json:"parent_revision,omitempty"` Ops []*Op `protobuf:"bytes,3,rep,name=ops" json:"ops,omitempty"` } func (x *RootlistModificationInfo) Reset() { *x = RootlistModificationInfo{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RootlistModificationInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*RootlistModificationInfo) ProtoMessage() {} func (x *RootlistModificationInfo) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RootlistModificationInfo.ProtoReflect.Descriptor instead. func (*RootlistModificationInfo) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{33} } func (x *RootlistModificationInfo) GetNewRevision() []byte { if x != nil { return x.NewRevision } return nil } func (x *RootlistModificationInfo) GetParentRevision() []byte { if x != nil { return x.ParentRevision } return nil } func (x *RootlistModificationInfo) GetOps() []*Op { if x != nil { return x.Ops } return nil } type FollowerUpdate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Uri *string `protobuf:"bytes,1,opt,name=uri" json:"uri,omitempty"` Username *string `protobuf:"bytes,2,opt,name=username" json:"username,omitempty"` IsFollowing *bool `protobuf:"varint,3,opt,name=is_following,json=isFollowing" json:"is_following,omitempty"` Timestamp *uint64 `protobuf:"varint,4,opt,name=timestamp" json:"timestamp,omitempty"` } func (x *FollowerUpdate) Reset() { *x = FollowerUpdate{} if protoimpl.UnsafeEnabled { mi := &file_playlist4_external_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FollowerUpdate) String() string { return protoimpl.X.MessageStringOf(x) } func (*FollowerUpdate) ProtoMessage() {} func (x *FollowerUpdate) ProtoReflect() protoreflect.Message { mi := &file_playlist4_external_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FollowerUpdate.ProtoReflect.Descriptor instead. func (*FollowerUpdate) Descriptor() ([]byte, []int) { return file_playlist4_external_proto_rawDescGZIP(), []int{34} } func (x *FollowerUpdate) GetUri() string { if x != nil && x.Uri != nil { return *x.Uri } return "" } func (x *FollowerUpdate) GetUsername() string { if x != nil && x.Username != nil { return *x.Username } return "" } func (x *FollowerUpdate) GetIsFollowing() bool { if x != nil && x.IsFollowing != nil { return *x.IsFollowing } return false } func (x *FollowerUpdate) GetTimestamp() uint64 { if x != nil && x.Timestamp != nil { return *x.Timestamp } return 0 } var File_playlist4_external_proto protoreflect.FileDescriptor var file_playlist4_external_proto_rawDesc = []byte{ 0x0a, 0x18, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x61, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x47, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xd9, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x62, 0x75, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x62, 0x75, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x53, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x02, 0x28, 0x05, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x02, 0x28, 0x08, 0x52, 0x09, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x40, 0x0a, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3d, 0x0a, 0x13, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x40, 0x0a, 0x0b, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xaa, 0x03, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6c, 0x33, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6c, 0x33, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x42, 0x79, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x59, 0x0a, 0x11, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x10, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0c, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x52, 0x0b, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xee, 0x01, 0x0a, 0x0e, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x65, 0x64, 0x42, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x65, 0x65, 0x6e, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x59, 0x0a, 0x11, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x10, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, 0x91, 0x01, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x33, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x64, 0x64, 0x4c, 0x61, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x22, 0x93, 0x01, 0x0a, 0x03, 0x52, 0x65, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x33, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x5f, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x41, 0x73, 0x4b, 0x65, 0x79, 0x22, 0x57, 0x0a, 0x03, 0x4d, 0x6f, 0x76, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x02, 0x28, 0x05, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x02, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x02, 0x28, 0x05, 0x52, 0x07, 0x74, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0xa4, 0x01, 0x0a, 0x1a, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x6e, 0x6f, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x07, 0x6e, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x6e, 0x6f, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x07, 0x6e, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe4, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x02, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x5a, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xce, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x0e, 0x6f, 0x6c, 0x64, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x81, 0x04, 0x0a, 0x02, 0x4f, 0x70, 0x12, 0x34, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x70, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x2e, 0x0a, 0x03, 0x61, 0x64, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x03, 0x61, 0x64, 0x64, 0x12, 0x2e, 0x0a, 0x03, 0x72, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x6d, 0x52, 0x03, 0x72, 0x65, 0x6d, 0x12, 0x2e, 0x0a, 0x03, 0x6d, 0x6f, 0x76, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x6f, 0x76, 0x52, 0x03, 0x6d, 0x6f, 0x76, 0x12, 0x63, 0x0a, 0x16, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x14, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x63, 0x0a, 0x16, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x14, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x6b, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x0c, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x44, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x45, 0x4d, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x4f, 0x56, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x10, 0x05, 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x10, 0x06, 0x22, 0x37, 0x0a, 0x06, 0x4f, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x03, 0x6f, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x70, 0x52, 0x03, 0x6f, 0x70, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x6e, 0x64, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x75, 0x6e, 0x64, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x64, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x72, 0x65, 0x64, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x86, 0x02, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x42, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x06, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x41, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x48, 0x45, 0x52, 0x4d, 0x45, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x57, 0x45, 0x42, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x42, 0x53, 0x50, 0x4f, 0x54, 0x49, 0x46, 0x59, 0x10, 0x06, 0x22, 0x92, 0x01, 0x0a, 0x05, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x03, 0x6f, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x70, 0x52, 0x03, 0x6f, 0x70, 0x73, 0x12, 0x37, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x7b, 0x0a, 0x04, 0x44, 0x69, 0x66, 0x66, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x0c, 0x66, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x03, 0x6f, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x70, 0x52, 0x03, 0x6f, 0x70, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x0a, 0x74, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xe6, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x77, 0x61, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x77, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x77, 0x61, 0x6e, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xf0, 0x05, 0x0a, 0x13, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x47, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x69, 0x66, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x64, 0x69, 0x66, 0x66, 0x12, 0x3e, 0x0a, 0x0b, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0a, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2f, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x48, 0x65, 0x61, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x0a, 0x75, 0x70, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x75, 0x70, 0x54, 0x6f, 0x44, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x62, 0x75, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x62, 0x75, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x53, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x08, 0x67, 0x65, 0x6f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x6f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x67, 0x65, 0x6f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x3f, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x14, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x31, 0x55, 0x72, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x76, 0x32, 0x5f, 0x75, 0x72, 0x69, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x32, 0x55, 0x72, 0x69, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x31, 0x55, 0x72, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x65, 0x0a, 0x10, 0x76, 0x32, 0x5f, 0x75, 0x72, 0x69, 0x5f, 0x74, 0x6f, 0x5f, 0x76, 0x31, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x31, 0x55, 0x72, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x56, 0x32, 0x55, 0x72, 0x69, 0x54, 0x6f, 0x56, 0x31, 0x55, 0x72, 0x69, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x76, 0x32, 0x55, 0x72, 0x69, 0x54, 0x6f, 0x56, 0x31, 0x55, 0x72, 0x69, 0x1a, 0x3f, 0x0a, 0x11, 0x56, 0x32, 0x55, 0x72, 0x69, 0x54, 0x6f, 0x56, 0x31, 0x55, 0x72, 0x69, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xef, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x37, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x41, 0x0a, 0x1c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x39, 0x0a, 0x1d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, 0x42, 0x0a, 0x1c, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x83, 0x01, 0x0a, 0x1b, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x72, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x22, 0x26, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x69, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73, 0x22, 0x28, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x69, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x18, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x03, 0x6f, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x70, 0x52, 0x03, 0x6f, 0x70, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x18, 0x52, 0x6f, 0x6f, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x03, 0x6f, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x70, 0x52, 0x03, 0x6f, 0x70, 0x73, 0x22, 0x7f, 0x0a, 0x0e, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2a, 0xfd, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x50, 0x49, 0x43, 0x54, 0x55, 0x52, 0x45, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4c, 0x4c, 0x41, 0x42, 0x4f, 0x52, 0x41, 0x54, 0x49, 0x56, 0x45, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x50, 0x4c, 0x33, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x5f, 0x42, 0x59, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x10, 0x0a, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x10, 0x0b, 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x50, 0x49, 0x43, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x0d, 0x2a, 0x98, 0x01, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x54, 0x45, 0x4d, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x54, 0x45, 0x4d, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x5f, 0x42, 0x59, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x54, 0x45, 0x4d, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x54, 0x45, 0x4d, 0x5f, 0x53, 0x45, 0x45, 0x4e, 0x5f, 0x41, 0x54, 0x10, 0x09, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x54, 0x45, 0x4d, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x0a, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x54, 0x45, 0x4d, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x10, 0x0b, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x54, 0x45, 0x4d, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x2a, 0xaa, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x6f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x22, 0x47, 0x45, 0x4f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x49, 0x4e, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x45, 0x4f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x49, 0x4e, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x49, 0x54, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x47, 0x45, 0x4f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x49, 0x4e, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x45, 0x4f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x49, 0x4e, 0x47, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x03, 0x42, 0x55, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x34, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x48, 0x02, 0x5a, 0x21, 0x74, 0x75, 0x78, 0x70, 0x61, 0x2e, 0x69, 0x6e, 0x2f, 0x61, 0x2f, 0x67, 0x6f, 0x70, 0x6c, 0x61, 0x79, 0x64, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x73, 0x70, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, } var ( file_playlist4_external_proto_rawDescOnce sync.Once file_playlist4_external_proto_rawDescData = file_playlist4_external_proto_rawDesc ) func file_playlist4_external_proto_rawDescGZIP() []byte { file_playlist4_external_proto_rawDescOnce.Do(func() { file_playlist4_external_proto_rawDescData = protoimpl.X.CompressGZIP(file_playlist4_external_proto_rawDescData) }) return file_playlist4_external_proto_rawDescData } var file_playlist4_external_proto_enumTypes = make([]protoimpl.EnumInfo, 5) var file_playlist4_external_proto_msgTypes = make([]protoimpl.MessageInfo, 36) var file_playlist4_external_proto_goTypes = []interface{}{ (ListAttributeKind)(0), // 0: spotify.playlist4.proto.ListAttributeKind (ItemAttributeKind)(0), // 1: spotify.playlist4.proto.ItemAttributeKind (GeoblockBlockingType)(0), // 2: spotify.playlist4.proto.GeoblockBlockingType (Op_Kind)(0), // 3: spotify.playlist4.proto.Op.Kind (SourceInfo_Client)(0), // 4: spotify.playlist4.proto.SourceInfo.Client (*Item)(nil), // 5: spotify.playlist4.proto.Item (*MetaItem)(nil), // 6: spotify.playlist4.proto.MetaItem (*ListItems)(nil), // 7: spotify.playlist4.proto.ListItems (*FormatListAttribute)(nil), // 8: spotify.playlist4.proto.FormatListAttribute (*PictureSize)(nil), // 9: spotify.playlist4.proto.PictureSize (*ListAttributes)(nil), // 10: spotify.playlist4.proto.ListAttributes (*ItemAttributes)(nil), // 11: spotify.playlist4.proto.ItemAttributes (*Add)(nil), // 12: spotify.playlist4.proto.Add (*Rem)(nil), // 13: spotify.playlist4.proto.Rem (*Mov)(nil), // 14: spotify.playlist4.proto.Mov (*ItemAttributesPartialState)(nil), // 15: spotify.playlist4.proto.ItemAttributesPartialState (*ListAttributesPartialState)(nil), // 16: spotify.playlist4.proto.ListAttributesPartialState (*UpdateItemAttributes)(nil), // 17: spotify.playlist4.proto.UpdateItemAttributes (*UpdateListAttributes)(nil), // 18: spotify.playlist4.proto.UpdateListAttributes (*Op)(nil), // 19: spotify.playlist4.proto.Op (*OpList)(nil), // 20: spotify.playlist4.proto.OpList (*ChangeInfo)(nil), // 21: spotify.playlist4.proto.ChangeInfo (*SourceInfo)(nil), // 22: spotify.playlist4.proto.SourceInfo (*Delta)(nil), // 23: spotify.playlist4.proto.Delta (*Diff)(nil), // 24: spotify.playlist4.proto.Diff (*ListChanges)(nil), // 25: spotify.playlist4.proto.ListChanges (*SelectedListContent)(nil), // 26: spotify.playlist4.proto.SelectedListContent (*CreateListReply)(nil), // 27: spotify.playlist4.proto.CreateListReply (*PlaylistV1UriRequest)(nil), // 28: spotify.playlist4.proto.PlaylistV1UriRequest (*PlaylistV1UriReply)(nil), // 29: spotify.playlist4.proto.PlaylistV1UriReply (*ListUpdateRequest)(nil), // 30: spotify.playlist4.proto.ListUpdateRequest (*RegisterPlaylistImageRequest)(nil), // 31: spotify.playlist4.proto.RegisterPlaylistImageRequest (*RegisterPlaylistImageResponse)(nil), // 32: spotify.playlist4.proto.RegisterPlaylistImageResponse (*ResolvedPersonalizedPlaylist)(nil), // 33: spotify.playlist4.proto.ResolvedPersonalizedPlaylist (*PlaylistUriResolverResponse)(nil), // 34: spotify.playlist4.proto.PlaylistUriResolverResponse (*SubscribeRequest)(nil), // 35: spotify.playlist4.proto.SubscribeRequest (*UnsubscribeRequest)(nil), // 36: spotify.playlist4.proto.UnsubscribeRequest (*PlaylistModificationInfo)(nil), // 37: spotify.playlist4.proto.PlaylistModificationInfo (*RootlistModificationInfo)(nil), // 38: spotify.playlist4.proto.RootlistModificationInfo (*FollowerUpdate)(nil), // 39: spotify.playlist4.proto.FollowerUpdate nil, // 40: spotify.playlist4.proto.PlaylistV1UriReply.V2UriToV1UriEntry (*Capabilities)(nil), // 41: spotify.playlist_permission.proto.Capabilities } var file_playlist4_external_proto_depIdxs = []int32{ 11, // 0: spotify.playlist4.proto.Item.attributes:type_name -> spotify.playlist4.proto.ItemAttributes 10, // 1: spotify.playlist4.proto.MetaItem.attributes:type_name -> spotify.playlist4.proto.ListAttributes 41, // 2: spotify.playlist4.proto.MetaItem.capabilities:type_name -> spotify.playlist_permission.proto.Capabilities 5, // 3: spotify.playlist4.proto.ListItems.items:type_name -> spotify.playlist4.proto.Item 6, // 4: spotify.playlist4.proto.ListItems.meta_items:type_name -> spotify.playlist4.proto.MetaItem 8, // 5: spotify.playlist4.proto.ListAttributes.format_attributes:type_name -> spotify.playlist4.proto.FormatListAttribute 9, // 6: spotify.playlist4.proto.ListAttributes.picture_size:type_name -> spotify.playlist4.proto.PictureSize 8, // 7: spotify.playlist4.proto.ItemAttributes.format_attributes:type_name -> spotify.playlist4.proto.FormatListAttribute 5, // 8: spotify.playlist4.proto.Add.items:type_name -> spotify.playlist4.proto.Item 5, // 9: spotify.playlist4.proto.Rem.items:type_name -> spotify.playlist4.proto.Item 11, // 10: spotify.playlist4.proto.ItemAttributesPartialState.values:type_name -> spotify.playlist4.proto.ItemAttributes 1, // 11: spotify.playlist4.proto.ItemAttributesPartialState.no_value:type_name -> spotify.playlist4.proto.ItemAttributeKind 10, // 12: spotify.playlist4.proto.ListAttributesPartialState.values:type_name -> spotify.playlist4.proto.ListAttributes 0, // 13: spotify.playlist4.proto.ListAttributesPartialState.no_value:type_name -> spotify.playlist4.proto.ListAttributeKind 15, // 14: spotify.playlist4.proto.UpdateItemAttributes.new_attributes:type_name -> spotify.playlist4.proto.ItemAttributesPartialState 15, // 15: spotify.playlist4.proto.UpdateItemAttributes.old_attributes:type_name -> spotify.playlist4.proto.ItemAttributesPartialState 16, // 16: spotify.playlist4.proto.UpdateListAttributes.new_attributes:type_name -> spotify.playlist4.proto.ListAttributesPartialState 16, // 17: spotify.playlist4.proto.UpdateListAttributes.old_attributes:type_name -> spotify.playlist4.proto.ListAttributesPartialState 3, // 18: spotify.playlist4.proto.Op.kind:type_name -> spotify.playlist4.proto.Op.Kind 12, // 19: spotify.playlist4.proto.Op.add:type_name -> spotify.playlist4.proto.Add 13, // 20: spotify.playlist4.proto.Op.rem:type_name -> spotify.playlist4.proto.Rem 14, // 21: spotify.playlist4.proto.Op.mov:type_name -> spotify.playlist4.proto.Mov 17, // 22: spotify.playlist4.proto.Op.update_item_attributes:type_name -> spotify.playlist4.proto.UpdateItemAttributes 18, // 23: spotify.playlist4.proto.Op.update_list_attributes:type_name -> spotify.playlist4.proto.UpdateListAttributes 19, // 24: spotify.playlist4.proto.OpList.ops:type_name -> spotify.playlist4.proto.Op 22, // 25: spotify.playlist4.proto.ChangeInfo.source:type_name -> spotify.playlist4.proto.SourceInfo 4, // 26: spotify.playlist4.proto.SourceInfo.client:type_name -> spotify.playlist4.proto.SourceInfo.Client 19, // 27: spotify.playlist4.proto.Delta.ops:type_name -> spotify.playlist4.proto.Op 21, // 28: spotify.playlist4.proto.Delta.info:type_name -> spotify.playlist4.proto.ChangeInfo 19, // 29: spotify.playlist4.proto.Diff.ops:type_name -> spotify.playlist4.proto.Op 23, // 30: spotify.playlist4.proto.ListChanges.deltas:type_name -> spotify.playlist4.proto.Delta 10, // 31: spotify.playlist4.proto.SelectedListContent.attributes:type_name -> spotify.playlist4.proto.ListAttributes 7, // 32: spotify.playlist4.proto.SelectedListContent.contents:type_name -> spotify.playlist4.proto.ListItems 24, // 33: spotify.playlist4.proto.SelectedListContent.diff:type_name -> spotify.playlist4.proto.Diff 24, // 34: spotify.playlist4.proto.SelectedListContent.sync_result:type_name -> spotify.playlist4.proto.Diff 41, // 35: spotify.playlist4.proto.SelectedListContent.capabilities:type_name -> spotify.playlist_permission.proto.Capabilities 2, // 36: spotify.playlist4.proto.SelectedListContent.geoblock:type_name -> spotify.playlist4.proto.GeoblockBlockingType 40, // 37: spotify.playlist4.proto.PlaylistV1UriReply.v2_uri_to_v1_uri:type_name -> spotify.playlist4.proto.PlaylistV1UriReply.V2UriToV1UriEntry 10, // 38: spotify.playlist4.proto.ListUpdateRequest.attributes:type_name -> spotify.playlist4.proto.ListAttributes 5, // 39: spotify.playlist4.proto.ListUpdateRequest.items:type_name -> spotify.playlist4.proto.Item 21, // 40: spotify.playlist4.proto.ListUpdateRequest.info:type_name -> spotify.playlist4.proto.ChangeInfo 33, // 41: spotify.playlist4.proto.PlaylistUriResolverResponse.resolved_playlists:type_name -> spotify.playlist4.proto.ResolvedPersonalizedPlaylist 19, // 42: spotify.playlist4.proto.PlaylistModificationInfo.ops:type_name -> spotify.playlist4.proto.Op 19, // 43: spotify.playlist4.proto.RootlistModificationInfo.ops:type_name -> spotify.playlist4.proto.Op 44, // [44:44] is the sub-list for method output_type 44, // [44:44] is the sub-list for method input_type 44, // [44:44] is the sub-list for extension type_name 44, // [44:44] is the sub-list for extension extendee 0, // [0:44] is the sub-list for field type_name } func init() { file_playlist4_external_proto_init() } func file_playlist4_external_proto_init() { if File_playlist4_external_proto != nil { return } file_playlist_permission_proto_init() if !protoimpl.UnsafeEnabled { file_playlist4_external_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Item); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MetaItem); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListItems); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FormatListAttribute); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PictureSize); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListAttributes); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ItemAttributes); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Add); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Rem); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Mov); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ItemAttributesPartialState); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListAttributesPartialState); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateItemAttributes); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateListAttributes); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Op); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OpList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChangeInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SourceInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Delta); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Diff); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListChanges); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SelectedListContent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateListReply); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlaylistV1UriRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlaylistV1UriReply); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListUpdateRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RegisterPlaylistImageRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RegisterPlaylistImageResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResolvedPersonalizedPlaylist); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlaylistUriResolverResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnsubscribeRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlaylistModificationInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RootlistModificationInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_playlist4_external_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FollowerUpdate); 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_playlist4_external_proto_rawDesc, NumEnums: 5, NumMessages: 36, NumExtensions: 0, NumServices: 0, }, GoTypes: file_playlist4_external_proto_goTypes, DependencyIndexes: file_playlist4_external_proto_depIdxs, EnumInfos: file_playlist4_external_proto_enumTypes, MessageInfos: file_playlist4_external_proto_msgTypes, }.Build() File_playlist4_external_proto = out.File file_playlist4_external_proto_rawDesc = nil file_playlist4_external_proto_goTypes = nil file_playlist4_external_proto_depIdxs = nil }