cloud.google.com/go/aiplatform@v1.106.0/apiv1beta1/aiplatformpb/feature_online_store_service.pb.go (about) 1 // Copyright 2025 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Code generated by protoc-gen-go. DO NOT EDIT. 16 // versions: 17 // protoc-gen-go v1.35.2 18 // protoc v4.25.7 19 // source: google/cloud/aiplatform/v1beta1/feature_online_store_service.proto 20 21 package aiplatformpb 22 23 import ( 24 _ "google.golang.org/genproto/googleapis/api/annotations" 25 status "google.golang.org/genproto/googleapis/rpc/status" 26 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 27 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 28 structpb "google.golang.org/protobuf/types/known/structpb" 29 timestamppb "google.golang.org/protobuf/types/known/timestamppb" 30 reflect "reflect" 31 sync "sync" 32 ) 33 34 const ( 35 // Verify that this generated code is sufficiently up-to-date. 36 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 37 // Verify that runtime/protoimpl is sufficiently up-to-date. 38 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 39 ) 40 41 // Format of the data in the Feature View. 42 type FeatureViewDataFormat int32 43 44 const ( 45 // Not set. Will be treated as the KeyValue format. 46 FeatureViewDataFormat_FEATURE_VIEW_DATA_FORMAT_UNSPECIFIED FeatureViewDataFormat = 0 47 // Return response data in key-value format. 48 FeatureViewDataFormat_KEY_VALUE FeatureViewDataFormat = 1 49 // Return response data in proto Struct format. 50 FeatureViewDataFormat_PROTO_STRUCT FeatureViewDataFormat = 2 51 ) 52 53 // Enum value maps for FeatureViewDataFormat. 54 var ( 55 FeatureViewDataFormat_name = map[int32]string{ 56 0: "FEATURE_VIEW_DATA_FORMAT_UNSPECIFIED", 57 1: "KEY_VALUE", 58 2: "PROTO_STRUCT", 59 } 60 FeatureViewDataFormat_value = map[string]int32{ 61 "FEATURE_VIEW_DATA_FORMAT_UNSPECIFIED": 0, 62 "KEY_VALUE": 1, 63 "PROTO_STRUCT": 2, 64 } 65 ) 66 67 func (x FeatureViewDataFormat) Enum() *FeatureViewDataFormat { 68 p := new(FeatureViewDataFormat) 69 *p = x 70 return p 71 } 72 73 func (x FeatureViewDataFormat) String() string { 74 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 75 } 76 77 func (FeatureViewDataFormat) Descriptor() protoreflect.EnumDescriptor { 78 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_enumTypes[0].Descriptor() 79 } 80 81 func (FeatureViewDataFormat) Type() protoreflect.EnumType { 82 return &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_enumTypes[0] 83 } 84 85 func (x FeatureViewDataFormat) Number() protoreflect.EnumNumber { 86 return protoreflect.EnumNumber(x) 87 } 88 89 // Deprecated: Use FeatureViewDataFormat.Descriptor instead. 90 func (FeatureViewDataFormat) EnumDescriptor() ([]byte, []int) { 91 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{0} 92 } 93 94 // Format of the response data. 95 // 96 // Deprecated: Marked as deprecated in google/cloud/aiplatform/v1beta1/feature_online_store_service.proto. 97 type FetchFeatureValuesRequest_Format int32 98 99 const ( 100 // Not set. Will be treated as the KeyValue format. 101 FetchFeatureValuesRequest_FORMAT_UNSPECIFIED FetchFeatureValuesRequest_Format = 0 102 // Return response data in key-value format. 103 FetchFeatureValuesRequest_KEY_VALUE FetchFeatureValuesRequest_Format = 1 104 // Return response data in proto Struct format. 105 FetchFeatureValuesRequest_PROTO_STRUCT FetchFeatureValuesRequest_Format = 2 106 ) 107 108 // Enum value maps for FetchFeatureValuesRequest_Format. 109 var ( 110 FetchFeatureValuesRequest_Format_name = map[int32]string{ 111 0: "FORMAT_UNSPECIFIED", 112 1: "KEY_VALUE", 113 2: "PROTO_STRUCT", 114 } 115 FetchFeatureValuesRequest_Format_value = map[string]int32{ 116 "FORMAT_UNSPECIFIED": 0, 117 "KEY_VALUE": 1, 118 "PROTO_STRUCT": 2, 119 } 120 ) 121 122 func (x FetchFeatureValuesRequest_Format) Enum() *FetchFeatureValuesRequest_Format { 123 p := new(FetchFeatureValuesRequest_Format) 124 *p = x 125 return p 126 } 127 128 func (x FetchFeatureValuesRequest_Format) String() string { 129 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 130 } 131 132 func (FetchFeatureValuesRequest_Format) Descriptor() protoreflect.EnumDescriptor { 133 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_enumTypes[1].Descriptor() 134 } 135 136 func (FetchFeatureValuesRequest_Format) Type() protoreflect.EnumType { 137 return &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_enumTypes[1] 138 } 139 140 func (x FetchFeatureValuesRequest_Format) Number() protoreflect.EnumNumber { 141 return protoreflect.EnumNumber(x) 142 } 143 144 // Deprecated: Use FetchFeatureValuesRequest_Format.Descriptor instead. 145 func (FetchFeatureValuesRequest_Format) EnumDescriptor() ([]byte, []int) { 146 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{1, 0} 147 } 148 149 // Datapoints for which Operator is true relative to the query’s Value 150 // field will be allowlisted. 151 type NearestNeighborQuery_NumericFilter_Operator int32 152 153 const ( 154 // Unspecified operator. 155 NearestNeighborQuery_NumericFilter_OPERATOR_UNSPECIFIED NearestNeighborQuery_NumericFilter_Operator = 0 156 // Entities are eligible if their value is < the query's. 157 NearestNeighborQuery_NumericFilter_LESS NearestNeighborQuery_NumericFilter_Operator = 1 158 // Entities are eligible if their value is <= the query's. 159 NearestNeighborQuery_NumericFilter_LESS_EQUAL NearestNeighborQuery_NumericFilter_Operator = 2 160 // Entities are eligible if their value is == the query's. 161 NearestNeighborQuery_NumericFilter_EQUAL NearestNeighborQuery_NumericFilter_Operator = 3 162 // Entities are eligible if their value is >= the query's. 163 NearestNeighborQuery_NumericFilter_GREATER_EQUAL NearestNeighborQuery_NumericFilter_Operator = 4 164 // Entities are eligible if their value is > the query's. 165 NearestNeighborQuery_NumericFilter_GREATER NearestNeighborQuery_NumericFilter_Operator = 5 166 // Entities are eligible if their value is != the query's. 167 NearestNeighborQuery_NumericFilter_NOT_EQUAL NearestNeighborQuery_NumericFilter_Operator = 6 168 ) 169 170 // Enum value maps for NearestNeighborQuery_NumericFilter_Operator. 171 var ( 172 NearestNeighborQuery_NumericFilter_Operator_name = map[int32]string{ 173 0: "OPERATOR_UNSPECIFIED", 174 1: "LESS", 175 2: "LESS_EQUAL", 176 3: "EQUAL", 177 4: "GREATER_EQUAL", 178 5: "GREATER", 179 6: "NOT_EQUAL", 180 } 181 NearestNeighborQuery_NumericFilter_Operator_value = map[string]int32{ 182 "OPERATOR_UNSPECIFIED": 0, 183 "LESS": 1, 184 "LESS_EQUAL": 2, 185 "EQUAL": 3, 186 "GREATER_EQUAL": 4, 187 "GREATER": 5, 188 "NOT_EQUAL": 6, 189 } 190 ) 191 192 func (x NearestNeighborQuery_NumericFilter_Operator) Enum() *NearestNeighborQuery_NumericFilter_Operator { 193 p := new(NearestNeighborQuery_NumericFilter_Operator) 194 *p = x 195 return p 196 } 197 198 func (x NearestNeighborQuery_NumericFilter_Operator) String() string { 199 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 200 } 201 202 func (NearestNeighborQuery_NumericFilter_Operator) Descriptor() protoreflect.EnumDescriptor { 203 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_enumTypes[2].Descriptor() 204 } 205 206 func (NearestNeighborQuery_NumericFilter_Operator) Type() protoreflect.EnumType { 207 return &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_enumTypes[2] 208 } 209 210 func (x NearestNeighborQuery_NumericFilter_Operator) Number() protoreflect.EnumNumber { 211 return protoreflect.EnumNumber(x) 212 } 213 214 // Deprecated: Use NearestNeighborQuery_NumericFilter_Operator.Descriptor instead. 215 func (NearestNeighborQuery_NumericFilter_Operator) EnumDescriptor() ([]byte, []int) { 216 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{5, 2, 0} 217 } 218 219 // Lookup key for a feature view. 220 type FeatureViewDataKey struct { 221 state protoimpl.MessageState 222 sizeCache protoimpl.SizeCache 223 unknownFields protoimpl.UnknownFields 224 225 // Types that are assignable to KeyOneof: 226 // 227 // *FeatureViewDataKey_Key 228 // *FeatureViewDataKey_CompositeKey_ 229 KeyOneof isFeatureViewDataKey_KeyOneof `protobuf_oneof:"key_oneof"` 230 } 231 232 func (x *FeatureViewDataKey) Reset() { 233 *x = FeatureViewDataKey{} 234 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[0] 235 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 236 ms.StoreMessageInfo(mi) 237 } 238 239 func (x *FeatureViewDataKey) String() string { 240 return protoimpl.X.MessageStringOf(x) 241 } 242 243 func (*FeatureViewDataKey) ProtoMessage() {} 244 245 func (x *FeatureViewDataKey) ProtoReflect() protoreflect.Message { 246 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[0] 247 if x != nil { 248 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 249 if ms.LoadMessageInfo() == nil { 250 ms.StoreMessageInfo(mi) 251 } 252 return ms 253 } 254 return mi.MessageOf(x) 255 } 256 257 // Deprecated: Use FeatureViewDataKey.ProtoReflect.Descriptor instead. 258 func (*FeatureViewDataKey) Descriptor() ([]byte, []int) { 259 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{0} 260 } 261 262 func (m *FeatureViewDataKey) GetKeyOneof() isFeatureViewDataKey_KeyOneof { 263 if m != nil { 264 return m.KeyOneof 265 } 266 return nil 267 } 268 269 func (x *FeatureViewDataKey) GetKey() string { 270 if x, ok := x.GetKeyOneof().(*FeatureViewDataKey_Key); ok { 271 return x.Key 272 } 273 return "" 274 } 275 276 func (x *FeatureViewDataKey) GetCompositeKey() *FeatureViewDataKey_CompositeKey { 277 if x, ok := x.GetKeyOneof().(*FeatureViewDataKey_CompositeKey_); ok { 278 return x.CompositeKey 279 } 280 return nil 281 } 282 283 type isFeatureViewDataKey_KeyOneof interface { 284 isFeatureViewDataKey_KeyOneof() 285 } 286 287 type FeatureViewDataKey_Key struct { 288 // String key to use for lookup. 289 Key string `protobuf:"bytes,1,opt,name=key,proto3,oneof"` 290 } 291 292 type FeatureViewDataKey_CompositeKey_ struct { 293 // The actual Entity ID will be composed from this struct. This should match 294 // with the way ID is defined in the FeatureView spec. 295 CompositeKey *FeatureViewDataKey_CompositeKey `protobuf:"bytes,2,opt,name=composite_key,json=compositeKey,proto3,oneof"` 296 } 297 298 func (*FeatureViewDataKey_Key) isFeatureViewDataKey_KeyOneof() {} 299 300 func (*FeatureViewDataKey_CompositeKey_) isFeatureViewDataKey_KeyOneof() {} 301 302 // Request message for 303 // [FeatureOnlineStoreService.FetchFeatureValues][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.FetchFeatureValues]. 304 // All the features under the requested feature view will be returned. 305 type FetchFeatureValuesRequest struct { 306 state protoimpl.MessageState 307 sizeCache protoimpl.SizeCache 308 unknownFields protoimpl.UnknownFields 309 310 // Entity ID to fetch feature values for. 311 // Deprecated. Use 312 // [FetchFeatureValuesRequest.data_key][google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.data_key]. 313 // 314 // Types that are assignable to EntityId: 315 // 316 // *FetchFeatureValuesRequest_Id 317 EntityId isFetchFeatureValuesRequest_EntityId `protobuf_oneof:"entity_id"` 318 // Required. FeatureView resource format 319 // `projects/{project}/locations/{location}/featureOnlineStores/{featureOnlineStore}/featureViews/{featureView}` 320 FeatureView string `protobuf:"bytes,1,opt,name=feature_view,json=featureView,proto3" json:"feature_view,omitempty"` 321 // Optional. The request key to fetch feature values for. 322 DataKey *FeatureViewDataKey `protobuf:"bytes,6,opt,name=data_key,json=dataKey,proto3" json:"data_key,omitempty"` 323 // Optional. Response data format. If not set, 324 // [FeatureViewDataFormat.KEY_VALUE][google.cloud.aiplatform.v1beta1.FeatureViewDataFormat.KEY_VALUE] 325 // will be used. 326 DataFormat FeatureViewDataFormat `protobuf:"varint,7,opt,name=data_format,json=dataFormat,proto3,enum=google.cloud.aiplatform.v1beta1.FeatureViewDataFormat" json:"data_format,omitempty"` 327 // Specify response data format. If not set, KeyValue format will be used. 328 // Deprecated. Use 329 // [FetchFeatureValuesRequest.data_format][google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.data_format]. 330 // 331 // Deprecated: Marked as deprecated in google/cloud/aiplatform/v1beta1/feature_online_store_service.proto. 332 Format FetchFeatureValuesRequest_Format `protobuf:"varint,5,opt,name=format,proto3,enum=google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest_Format" json:"format,omitempty"` 333 } 334 335 func (x *FetchFeatureValuesRequest) Reset() { 336 *x = FetchFeatureValuesRequest{} 337 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[1] 338 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 339 ms.StoreMessageInfo(mi) 340 } 341 342 func (x *FetchFeatureValuesRequest) String() string { 343 return protoimpl.X.MessageStringOf(x) 344 } 345 346 func (*FetchFeatureValuesRequest) ProtoMessage() {} 347 348 func (x *FetchFeatureValuesRequest) ProtoReflect() protoreflect.Message { 349 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[1] 350 if x != nil { 351 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 352 if ms.LoadMessageInfo() == nil { 353 ms.StoreMessageInfo(mi) 354 } 355 return ms 356 } 357 return mi.MessageOf(x) 358 } 359 360 // Deprecated: Use FetchFeatureValuesRequest.ProtoReflect.Descriptor instead. 361 func (*FetchFeatureValuesRequest) Descriptor() ([]byte, []int) { 362 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{1} 363 } 364 365 func (m *FetchFeatureValuesRequest) GetEntityId() isFetchFeatureValuesRequest_EntityId { 366 if m != nil { 367 return m.EntityId 368 } 369 return nil 370 } 371 372 // Deprecated: Marked as deprecated in google/cloud/aiplatform/v1beta1/feature_online_store_service.proto. 373 func (x *FetchFeatureValuesRequest) GetId() string { 374 if x, ok := x.GetEntityId().(*FetchFeatureValuesRequest_Id); ok { 375 return x.Id 376 } 377 return "" 378 } 379 380 func (x *FetchFeatureValuesRequest) GetFeatureView() string { 381 if x != nil { 382 return x.FeatureView 383 } 384 return "" 385 } 386 387 func (x *FetchFeatureValuesRequest) GetDataKey() *FeatureViewDataKey { 388 if x != nil { 389 return x.DataKey 390 } 391 return nil 392 } 393 394 func (x *FetchFeatureValuesRequest) GetDataFormat() FeatureViewDataFormat { 395 if x != nil { 396 return x.DataFormat 397 } 398 return FeatureViewDataFormat_FEATURE_VIEW_DATA_FORMAT_UNSPECIFIED 399 } 400 401 // Deprecated: Marked as deprecated in google/cloud/aiplatform/v1beta1/feature_online_store_service.proto. 402 func (x *FetchFeatureValuesRequest) GetFormat() FetchFeatureValuesRequest_Format { 403 if x != nil { 404 return x.Format 405 } 406 return FetchFeatureValuesRequest_FORMAT_UNSPECIFIED 407 } 408 409 type isFetchFeatureValuesRequest_EntityId interface { 410 isFetchFeatureValuesRequest_EntityId() 411 } 412 413 type FetchFeatureValuesRequest_Id struct { 414 // Simple ID. The whole string will be used as is to identify Entity to 415 // fetch feature values for. 416 // 417 // Deprecated: Marked as deprecated in google/cloud/aiplatform/v1beta1/feature_online_store_service.proto. 418 Id string `protobuf:"bytes,3,opt,name=id,proto3,oneof"` 419 } 420 421 func (*FetchFeatureValuesRequest_Id) isFetchFeatureValuesRequest_EntityId() {} 422 423 // Response message for 424 // [FeatureOnlineStoreService.FetchFeatureValues][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.FetchFeatureValues] 425 type FetchFeatureValuesResponse struct { 426 state protoimpl.MessageState 427 sizeCache protoimpl.SizeCache 428 unknownFields protoimpl.UnknownFields 429 430 // Types that are assignable to Format: 431 // 432 // *FetchFeatureValuesResponse_KeyValues 433 // *FetchFeatureValuesResponse_ProtoStruct 434 Format isFetchFeatureValuesResponse_Format `protobuf_oneof:"format"` 435 // The data key associated with this response. 436 // Will only be populated for 437 // [FeatureOnlineStoreService.StreamingFetchFeatureValues][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.StreamingFetchFeatureValues] 438 // RPCs. 439 DataKey *FeatureViewDataKey `protobuf:"bytes,4,opt,name=data_key,json=dataKey,proto3" json:"data_key,omitempty"` 440 } 441 442 func (x *FetchFeatureValuesResponse) Reset() { 443 *x = FetchFeatureValuesResponse{} 444 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[2] 445 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 446 ms.StoreMessageInfo(mi) 447 } 448 449 func (x *FetchFeatureValuesResponse) String() string { 450 return protoimpl.X.MessageStringOf(x) 451 } 452 453 func (*FetchFeatureValuesResponse) ProtoMessage() {} 454 455 func (x *FetchFeatureValuesResponse) ProtoReflect() protoreflect.Message { 456 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[2] 457 if x != nil { 458 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 459 if ms.LoadMessageInfo() == nil { 460 ms.StoreMessageInfo(mi) 461 } 462 return ms 463 } 464 return mi.MessageOf(x) 465 } 466 467 // Deprecated: Use FetchFeatureValuesResponse.ProtoReflect.Descriptor instead. 468 func (*FetchFeatureValuesResponse) Descriptor() ([]byte, []int) { 469 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{2} 470 } 471 472 func (m *FetchFeatureValuesResponse) GetFormat() isFetchFeatureValuesResponse_Format { 473 if m != nil { 474 return m.Format 475 } 476 return nil 477 } 478 479 func (x *FetchFeatureValuesResponse) GetKeyValues() *FetchFeatureValuesResponse_FeatureNameValuePairList { 480 if x, ok := x.GetFormat().(*FetchFeatureValuesResponse_KeyValues); ok { 481 return x.KeyValues 482 } 483 return nil 484 } 485 486 func (x *FetchFeatureValuesResponse) GetProtoStruct() *structpb.Struct { 487 if x, ok := x.GetFormat().(*FetchFeatureValuesResponse_ProtoStruct); ok { 488 return x.ProtoStruct 489 } 490 return nil 491 } 492 493 func (x *FetchFeatureValuesResponse) GetDataKey() *FeatureViewDataKey { 494 if x != nil { 495 return x.DataKey 496 } 497 return nil 498 } 499 500 type isFetchFeatureValuesResponse_Format interface { 501 isFetchFeatureValuesResponse_Format() 502 } 503 504 type FetchFeatureValuesResponse_KeyValues struct { 505 // Feature values in KeyValue format. 506 KeyValues *FetchFeatureValuesResponse_FeatureNameValuePairList `protobuf:"bytes,3,opt,name=key_values,json=keyValues,proto3,oneof"` 507 } 508 509 type FetchFeatureValuesResponse_ProtoStruct struct { 510 // Feature values in proto Struct format. 511 ProtoStruct *structpb.Struct `protobuf:"bytes,2,opt,name=proto_struct,json=protoStruct,proto3,oneof"` 512 } 513 514 func (*FetchFeatureValuesResponse_KeyValues) isFetchFeatureValuesResponse_Format() {} 515 516 func (*FetchFeatureValuesResponse_ProtoStruct) isFetchFeatureValuesResponse_Format() {} 517 518 // Request message for 519 // [FeatureOnlineStoreService.StreamingFetchFeatureValues][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.StreamingFetchFeatureValues]. 520 // For the entities requested, all features under the requested feature view 521 // will be returned. 522 type StreamingFetchFeatureValuesRequest struct { 523 state protoimpl.MessageState 524 sizeCache protoimpl.SizeCache 525 unknownFields protoimpl.UnknownFields 526 527 // Required. FeatureView resource format 528 // `projects/{project}/locations/{location}/featureOnlineStores/{featureOnlineStore}/featureViews/{featureView}` 529 FeatureView string `protobuf:"bytes,1,opt,name=feature_view,json=featureView,proto3" json:"feature_view,omitempty"` 530 DataKeys []*FeatureViewDataKey `protobuf:"bytes,2,rep,name=data_keys,json=dataKeys,proto3" json:"data_keys,omitempty"` 531 // Specify response data format. If not set, KeyValue format will be used. 532 DataFormat FeatureViewDataFormat `protobuf:"varint,3,opt,name=data_format,json=dataFormat,proto3,enum=google.cloud.aiplatform.v1beta1.FeatureViewDataFormat" json:"data_format,omitempty"` 533 } 534 535 func (x *StreamingFetchFeatureValuesRequest) Reset() { 536 *x = StreamingFetchFeatureValuesRequest{} 537 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[3] 538 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 539 ms.StoreMessageInfo(mi) 540 } 541 542 func (x *StreamingFetchFeatureValuesRequest) String() string { 543 return protoimpl.X.MessageStringOf(x) 544 } 545 546 func (*StreamingFetchFeatureValuesRequest) ProtoMessage() {} 547 548 func (x *StreamingFetchFeatureValuesRequest) ProtoReflect() protoreflect.Message { 549 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[3] 550 if x != nil { 551 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 552 if ms.LoadMessageInfo() == nil { 553 ms.StoreMessageInfo(mi) 554 } 555 return ms 556 } 557 return mi.MessageOf(x) 558 } 559 560 // Deprecated: Use StreamingFetchFeatureValuesRequest.ProtoReflect.Descriptor instead. 561 func (*StreamingFetchFeatureValuesRequest) Descriptor() ([]byte, []int) { 562 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{3} 563 } 564 565 func (x *StreamingFetchFeatureValuesRequest) GetFeatureView() string { 566 if x != nil { 567 return x.FeatureView 568 } 569 return "" 570 } 571 572 func (x *StreamingFetchFeatureValuesRequest) GetDataKeys() []*FeatureViewDataKey { 573 if x != nil { 574 return x.DataKeys 575 } 576 return nil 577 } 578 579 func (x *StreamingFetchFeatureValuesRequest) GetDataFormat() FeatureViewDataFormat { 580 if x != nil { 581 return x.DataFormat 582 } 583 return FeatureViewDataFormat_FEATURE_VIEW_DATA_FORMAT_UNSPECIFIED 584 } 585 586 // Response message for 587 // [FeatureOnlineStoreService.StreamingFetchFeatureValues][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.StreamingFetchFeatureValues]. 588 type StreamingFetchFeatureValuesResponse struct { 589 state protoimpl.MessageState 590 sizeCache protoimpl.SizeCache 591 unknownFields protoimpl.UnknownFields 592 593 // Response status. 594 // If OK, then 595 // [StreamingFetchFeatureValuesResponse.data][google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesResponse.data] 596 // will be populated. Otherwise 597 // [StreamingFetchFeatureValuesResponse.data_keys_with_error][google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesResponse.data_keys_with_error] 598 // will be populated with the appropriate data keys. The error only applies to 599 // the listed data keys - the stream will remain open for further 600 // [FeatureOnlineStoreService.StreamingFetchFeatureValuesRequest][] requests. 601 Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` 602 Data []*FetchFeatureValuesResponse `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"` 603 DataKeysWithError []*FeatureViewDataKey `protobuf:"bytes,3,rep,name=data_keys_with_error,json=dataKeysWithError,proto3" json:"data_keys_with_error,omitempty"` 604 } 605 606 func (x *StreamingFetchFeatureValuesResponse) Reset() { 607 *x = StreamingFetchFeatureValuesResponse{} 608 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[4] 609 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 610 ms.StoreMessageInfo(mi) 611 } 612 613 func (x *StreamingFetchFeatureValuesResponse) String() string { 614 return protoimpl.X.MessageStringOf(x) 615 } 616 617 func (*StreamingFetchFeatureValuesResponse) ProtoMessage() {} 618 619 func (x *StreamingFetchFeatureValuesResponse) ProtoReflect() protoreflect.Message { 620 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[4] 621 if x != nil { 622 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 623 if ms.LoadMessageInfo() == nil { 624 ms.StoreMessageInfo(mi) 625 } 626 return ms 627 } 628 return mi.MessageOf(x) 629 } 630 631 // Deprecated: Use StreamingFetchFeatureValuesResponse.ProtoReflect.Descriptor instead. 632 func (*StreamingFetchFeatureValuesResponse) Descriptor() ([]byte, []int) { 633 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{4} 634 } 635 636 func (x *StreamingFetchFeatureValuesResponse) GetStatus() *status.Status { 637 if x != nil { 638 return x.Status 639 } 640 return nil 641 } 642 643 func (x *StreamingFetchFeatureValuesResponse) GetData() []*FetchFeatureValuesResponse { 644 if x != nil { 645 return x.Data 646 } 647 return nil 648 } 649 650 func (x *StreamingFetchFeatureValuesResponse) GetDataKeysWithError() []*FeatureViewDataKey { 651 if x != nil { 652 return x.DataKeysWithError 653 } 654 return nil 655 } 656 657 // A query to find a number of similar entities. 658 type NearestNeighborQuery struct { 659 state protoimpl.MessageState 660 sizeCache protoimpl.SizeCache 661 unknownFields protoimpl.UnknownFields 662 663 // Types that are assignable to Instance: 664 // 665 // *NearestNeighborQuery_EntityId 666 // *NearestNeighborQuery_Embedding_ 667 Instance isNearestNeighborQuery_Instance `protobuf_oneof:"instance"` 668 // Optional. The number of similar entities to be retrieved from feature view 669 // for each query. 670 NeighborCount int32 `protobuf:"varint,3,opt,name=neighbor_count,json=neighborCount,proto3" json:"neighbor_count,omitempty"` 671 // Optional. The list of string filters. 672 StringFilters []*NearestNeighborQuery_StringFilter `protobuf:"bytes,4,rep,name=string_filters,json=stringFilters,proto3" json:"string_filters,omitempty"` 673 // Optional. The list of numeric filters. 674 NumericFilters []*NearestNeighborQuery_NumericFilter `protobuf:"bytes,8,rep,name=numeric_filters,json=numericFilters,proto3" json:"numeric_filters,omitempty"` 675 // Optional. Crowding is a constraint on a neighbor list produced by nearest 676 // neighbor search requiring that no more than 677 // sper_crowding_attribute_neighbor_count of the k neighbors returned have the 678 // same value of crowding_attribute. It's used for improving result diversity. 679 PerCrowdingAttributeNeighborCount int32 `protobuf:"varint,5,opt,name=per_crowding_attribute_neighbor_count,json=perCrowdingAttributeNeighborCount,proto3" json:"per_crowding_attribute_neighbor_count,omitempty"` 680 // Optional. Parameters that can be set to tune query on the fly. 681 Parameters *NearestNeighborQuery_Parameters `protobuf:"bytes,7,opt,name=parameters,proto3" json:"parameters,omitempty"` 682 } 683 684 func (x *NearestNeighborQuery) Reset() { 685 *x = NearestNeighborQuery{} 686 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[5] 687 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 688 ms.StoreMessageInfo(mi) 689 } 690 691 func (x *NearestNeighborQuery) String() string { 692 return protoimpl.X.MessageStringOf(x) 693 } 694 695 func (*NearestNeighborQuery) ProtoMessage() {} 696 697 func (x *NearestNeighborQuery) ProtoReflect() protoreflect.Message { 698 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[5] 699 if x != nil { 700 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 701 if ms.LoadMessageInfo() == nil { 702 ms.StoreMessageInfo(mi) 703 } 704 return ms 705 } 706 return mi.MessageOf(x) 707 } 708 709 // Deprecated: Use NearestNeighborQuery.ProtoReflect.Descriptor instead. 710 func (*NearestNeighborQuery) Descriptor() ([]byte, []int) { 711 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{5} 712 } 713 714 func (m *NearestNeighborQuery) GetInstance() isNearestNeighborQuery_Instance { 715 if m != nil { 716 return m.Instance 717 } 718 return nil 719 } 720 721 func (x *NearestNeighborQuery) GetEntityId() string { 722 if x, ok := x.GetInstance().(*NearestNeighborQuery_EntityId); ok { 723 return x.EntityId 724 } 725 return "" 726 } 727 728 func (x *NearestNeighborQuery) GetEmbedding() *NearestNeighborQuery_Embedding { 729 if x, ok := x.GetInstance().(*NearestNeighborQuery_Embedding_); ok { 730 return x.Embedding 731 } 732 return nil 733 } 734 735 func (x *NearestNeighborQuery) GetNeighborCount() int32 { 736 if x != nil { 737 return x.NeighborCount 738 } 739 return 0 740 } 741 742 func (x *NearestNeighborQuery) GetStringFilters() []*NearestNeighborQuery_StringFilter { 743 if x != nil { 744 return x.StringFilters 745 } 746 return nil 747 } 748 749 func (x *NearestNeighborQuery) GetNumericFilters() []*NearestNeighborQuery_NumericFilter { 750 if x != nil { 751 return x.NumericFilters 752 } 753 return nil 754 } 755 756 func (x *NearestNeighborQuery) GetPerCrowdingAttributeNeighborCount() int32 { 757 if x != nil { 758 return x.PerCrowdingAttributeNeighborCount 759 } 760 return 0 761 } 762 763 func (x *NearestNeighborQuery) GetParameters() *NearestNeighborQuery_Parameters { 764 if x != nil { 765 return x.Parameters 766 } 767 return nil 768 } 769 770 type isNearestNeighborQuery_Instance interface { 771 isNearestNeighborQuery_Instance() 772 } 773 774 type NearestNeighborQuery_EntityId struct { 775 // Optional. The entity id whose similar entities should be searched for. 776 // If embedding is set, search will use embedding instead of 777 // entity_id. 778 EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3,oneof"` 779 } 780 781 type NearestNeighborQuery_Embedding_ struct { 782 // Optional. The embedding vector that be used for similar search. 783 Embedding *NearestNeighborQuery_Embedding `protobuf:"bytes,2,opt,name=embedding,proto3,oneof"` 784 } 785 786 func (*NearestNeighborQuery_EntityId) isNearestNeighborQuery_Instance() {} 787 788 func (*NearestNeighborQuery_Embedding_) isNearestNeighborQuery_Instance() {} 789 790 // The request message for 791 // [FeatureOnlineStoreService.SearchNearestEntities][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.SearchNearestEntities]. 792 type SearchNearestEntitiesRequest struct { 793 state protoimpl.MessageState 794 sizeCache protoimpl.SizeCache 795 unknownFields protoimpl.UnknownFields 796 797 // Required. FeatureView resource format 798 // `projects/{project}/locations/{location}/featureOnlineStores/{featureOnlineStore}/featureViews/{featureView}` 799 FeatureView string `protobuf:"bytes,1,opt,name=feature_view,json=featureView,proto3" json:"feature_view,omitempty"` 800 // Required. The query. 801 Query *NearestNeighborQuery `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"` 802 // Optional. If set to true, the full entities (including all vector values 803 // and metadata) of the nearest neighbors are returned; otherwise only entity 804 // id of the nearest neighbors will be returned. Note that returning full 805 // entities will significantly increase the latency and cost of the query. 806 ReturnFullEntity bool `protobuf:"varint,3,opt,name=return_full_entity,json=returnFullEntity,proto3" json:"return_full_entity,omitempty"` 807 } 808 809 func (x *SearchNearestEntitiesRequest) Reset() { 810 *x = SearchNearestEntitiesRequest{} 811 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[6] 812 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 813 ms.StoreMessageInfo(mi) 814 } 815 816 func (x *SearchNearestEntitiesRequest) String() string { 817 return protoimpl.X.MessageStringOf(x) 818 } 819 820 func (*SearchNearestEntitiesRequest) ProtoMessage() {} 821 822 func (x *SearchNearestEntitiesRequest) ProtoReflect() protoreflect.Message { 823 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[6] 824 if x != nil { 825 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 826 if ms.LoadMessageInfo() == nil { 827 ms.StoreMessageInfo(mi) 828 } 829 return ms 830 } 831 return mi.MessageOf(x) 832 } 833 834 // Deprecated: Use SearchNearestEntitiesRequest.ProtoReflect.Descriptor instead. 835 func (*SearchNearestEntitiesRequest) Descriptor() ([]byte, []int) { 836 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{6} 837 } 838 839 func (x *SearchNearestEntitiesRequest) GetFeatureView() string { 840 if x != nil { 841 return x.FeatureView 842 } 843 return "" 844 } 845 846 func (x *SearchNearestEntitiesRequest) GetQuery() *NearestNeighborQuery { 847 if x != nil { 848 return x.Query 849 } 850 return nil 851 } 852 853 func (x *SearchNearestEntitiesRequest) GetReturnFullEntity() bool { 854 if x != nil { 855 return x.ReturnFullEntity 856 } 857 return false 858 } 859 860 // Nearest neighbors for one query. 861 type NearestNeighbors struct { 862 state protoimpl.MessageState 863 sizeCache protoimpl.SizeCache 864 unknownFields protoimpl.UnknownFields 865 866 // All its neighbors. 867 Neighbors []*NearestNeighbors_Neighbor `protobuf:"bytes,1,rep,name=neighbors,proto3" json:"neighbors,omitempty"` 868 } 869 870 func (x *NearestNeighbors) Reset() { 871 *x = NearestNeighbors{} 872 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[7] 873 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 874 ms.StoreMessageInfo(mi) 875 } 876 877 func (x *NearestNeighbors) String() string { 878 return protoimpl.X.MessageStringOf(x) 879 } 880 881 func (*NearestNeighbors) ProtoMessage() {} 882 883 func (x *NearestNeighbors) ProtoReflect() protoreflect.Message { 884 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[7] 885 if x != nil { 886 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 887 if ms.LoadMessageInfo() == nil { 888 ms.StoreMessageInfo(mi) 889 } 890 return ms 891 } 892 return mi.MessageOf(x) 893 } 894 895 // Deprecated: Use NearestNeighbors.ProtoReflect.Descriptor instead. 896 func (*NearestNeighbors) Descriptor() ([]byte, []int) { 897 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{7} 898 } 899 900 func (x *NearestNeighbors) GetNeighbors() []*NearestNeighbors_Neighbor { 901 if x != nil { 902 return x.Neighbors 903 } 904 return nil 905 } 906 907 // Response message for 908 // [FeatureOnlineStoreService.SearchNearestEntities][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.SearchNearestEntities] 909 type SearchNearestEntitiesResponse struct { 910 state protoimpl.MessageState 911 sizeCache protoimpl.SizeCache 912 unknownFields protoimpl.UnknownFields 913 914 // The nearest neighbors of the query entity. 915 NearestNeighbors *NearestNeighbors `protobuf:"bytes,1,opt,name=nearest_neighbors,json=nearestNeighbors,proto3" json:"nearest_neighbors,omitempty"` 916 } 917 918 func (x *SearchNearestEntitiesResponse) Reset() { 919 *x = SearchNearestEntitiesResponse{} 920 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[8] 921 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 922 ms.StoreMessageInfo(mi) 923 } 924 925 func (x *SearchNearestEntitiesResponse) String() string { 926 return protoimpl.X.MessageStringOf(x) 927 } 928 929 func (*SearchNearestEntitiesResponse) ProtoMessage() {} 930 931 func (x *SearchNearestEntitiesResponse) ProtoReflect() protoreflect.Message { 932 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[8] 933 if x != nil { 934 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 935 if ms.LoadMessageInfo() == nil { 936 ms.StoreMessageInfo(mi) 937 } 938 return ms 939 } 940 return mi.MessageOf(x) 941 } 942 943 // Deprecated: Use SearchNearestEntitiesResponse.ProtoReflect.Descriptor instead. 944 func (*SearchNearestEntitiesResponse) Descriptor() ([]byte, []int) { 945 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{8} 946 } 947 948 func (x *SearchNearestEntitiesResponse) GetNearestNeighbors() *NearestNeighbors { 949 if x != nil { 950 return x.NearestNeighbors 951 } 952 return nil 953 } 954 955 // Request message for 956 // [FeatureOnlineStoreService.FeatureViewDirectWrite][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.FeatureViewDirectWrite]. 957 type FeatureViewDirectWriteRequest struct { 958 state protoimpl.MessageState 959 sizeCache protoimpl.SizeCache 960 unknownFields protoimpl.UnknownFields 961 962 // FeatureView resource format 963 // `projects/{project}/locations/{location}/featureOnlineStores/{featureOnlineStore}/featureViews/{featureView}` 964 FeatureView string `protobuf:"bytes,1,opt,name=feature_view,json=featureView,proto3" json:"feature_view,omitempty"` 965 // Required. The data keys and associated feature values. 966 DataKeyAndFeatureValues []*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues `protobuf:"bytes,2,rep,name=data_key_and_feature_values,json=dataKeyAndFeatureValues,proto3" json:"data_key_and_feature_values,omitempty"` 967 } 968 969 func (x *FeatureViewDirectWriteRequest) Reset() { 970 *x = FeatureViewDirectWriteRequest{} 971 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[9] 972 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 973 ms.StoreMessageInfo(mi) 974 } 975 976 func (x *FeatureViewDirectWriteRequest) String() string { 977 return protoimpl.X.MessageStringOf(x) 978 } 979 980 func (*FeatureViewDirectWriteRequest) ProtoMessage() {} 981 982 func (x *FeatureViewDirectWriteRequest) ProtoReflect() protoreflect.Message { 983 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[9] 984 if x != nil { 985 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 986 if ms.LoadMessageInfo() == nil { 987 ms.StoreMessageInfo(mi) 988 } 989 return ms 990 } 991 return mi.MessageOf(x) 992 } 993 994 // Deprecated: Use FeatureViewDirectWriteRequest.ProtoReflect.Descriptor instead. 995 func (*FeatureViewDirectWriteRequest) Descriptor() ([]byte, []int) { 996 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{9} 997 } 998 999 func (x *FeatureViewDirectWriteRequest) GetFeatureView() string { 1000 if x != nil { 1001 return x.FeatureView 1002 } 1003 return "" 1004 } 1005 1006 func (x *FeatureViewDirectWriteRequest) GetDataKeyAndFeatureValues() []*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues { 1007 if x != nil { 1008 return x.DataKeyAndFeatureValues 1009 } 1010 return nil 1011 } 1012 1013 // Response message for 1014 // [FeatureOnlineStoreService.FeatureViewDirectWrite][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.FeatureViewDirectWrite]. 1015 type FeatureViewDirectWriteResponse struct { 1016 state protoimpl.MessageState 1017 sizeCache protoimpl.SizeCache 1018 unknownFields protoimpl.UnknownFields 1019 1020 // Response status for the keys listed in 1021 // [FeatureViewDirectWriteResponse.write_responses][google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse.write_responses]. 1022 // 1023 // The error only applies to the 1024 // listed data keys - the stream will remain open for further 1025 // [FeatureOnlineStoreService.FeatureViewDirectWriteRequest][] requests. 1026 // 1027 // Partial failures (e.g. if the first 10 keys of a request fail, but the 1028 // rest succeed) from a single request may result in multiple responses - 1029 // there will be one response for the successful request keys and one response 1030 // for the failing request keys. 1031 Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` 1032 // Details about write for each key. If status is not OK, 1033 // [WriteResponse.data_key][google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse.WriteResponse.data_key] 1034 // will have the key with error, but 1035 // [WriteResponse.online_store_write_time][google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse.WriteResponse.online_store_write_time] 1036 // will not be present. 1037 WriteResponses []*FeatureViewDirectWriteResponse_WriteResponse `protobuf:"bytes,2,rep,name=write_responses,json=writeResponses,proto3" json:"write_responses,omitempty"` 1038 } 1039 1040 func (x *FeatureViewDirectWriteResponse) Reset() { 1041 *x = FeatureViewDirectWriteResponse{} 1042 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[10] 1043 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1044 ms.StoreMessageInfo(mi) 1045 } 1046 1047 func (x *FeatureViewDirectWriteResponse) String() string { 1048 return protoimpl.X.MessageStringOf(x) 1049 } 1050 1051 func (*FeatureViewDirectWriteResponse) ProtoMessage() {} 1052 1053 func (x *FeatureViewDirectWriteResponse) ProtoReflect() protoreflect.Message { 1054 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[10] 1055 if x != nil { 1056 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1057 if ms.LoadMessageInfo() == nil { 1058 ms.StoreMessageInfo(mi) 1059 } 1060 return ms 1061 } 1062 return mi.MessageOf(x) 1063 } 1064 1065 // Deprecated: Use FeatureViewDirectWriteResponse.ProtoReflect.Descriptor instead. 1066 func (*FeatureViewDirectWriteResponse) Descriptor() ([]byte, []int) { 1067 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{10} 1068 } 1069 1070 func (x *FeatureViewDirectWriteResponse) GetStatus() *status.Status { 1071 if x != nil { 1072 return x.Status 1073 } 1074 return nil 1075 } 1076 1077 func (x *FeatureViewDirectWriteResponse) GetWriteResponses() []*FeatureViewDirectWriteResponse_WriteResponse { 1078 if x != nil { 1079 return x.WriteResponses 1080 } 1081 return nil 1082 } 1083 1084 // Request message for [FeatureOnlineStoreService.GenerateFetchAccessToken][]. 1085 type GenerateFetchAccessTokenRequest struct { 1086 state protoimpl.MessageState 1087 sizeCache protoimpl.SizeCache 1088 unknownFields protoimpl.UnknownFields 1089 1090 // FeatureView resource format 1091 // `projects/{project}/locations/{location}/featureOnlineStores/{featureOnlineStore}/featureViews/{featureView}` 1092 FeatureView string `protobuf:"bytes,1,opt,name=feature_view,json=featureView,proto3" json:"feature_view,omitempty"` 1093 } 1094 1095 func (x *GenerateFetchAccessTokenRequest) Reset() { 1096 *x = GenerateFetchAccessTokenRequest{} 1097 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[11] 1098 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1099 ms.StoreMessageInfo(mi) 1100 } 1101 1102 func (x *GenerateFetchAccessTokenRequest) String() string { 1103 return protoimpl.X.MessageStringOf(x) 1104 } 1105 1106 func (*GenerateFetchAccessTokenRequest) ProtoMessage() {} 1107 1108 func (x *GenerateFetchAccessTokenRequest) ProtoReflect() protoreflect.Message { 1109 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[11] 1110 if x != nil { 1111 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1112 if ms.LoadMessageInfo() == nil { 1113 ms.StoreMessageInfo(mi) 1114 } 1115 return ms 1116 } 1117 return mi.MessageOf(x) 1118 } 1119 1120 // Deprecated: Use GenerateFetchAccessTokenRequest.ProtoReflect.Descriptor instead. 1121 func (*GenerateFetchAccessTokenRequest) Descriptor() ([]byte, []int) { 1122 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{11} 1123 } 1124 1125 func (x *GenerateFetchAccessTokenRequest) GetFeatureView() string { 1126 if x != nil { 1127 return x.FeatureView 1128 } 1129 return "" 1130 } 1131 1132 // Response message for [FeatureOnlineStoreService.GenerateFetchAccessToken][]. 1133 type GenerateFetchAccessTokenResponse struct { 1134 state protoimpl.MessageState 1135 sizeCache protoimpl.SizeCache 1136 unknownFields protoimpl.UnknownFields 1137 1138 // The OAuth 2.0 access token. 1139 AccessToken string `protobuf:"bytes,1,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"` 1140 // Token expiration time. This is always set 1141 ExpireTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expire_time,json=expireTime,proto3" json:"expire_time,omitempty"` 1142 } 1143 1144 func (x *GenerateFetchAccessTokenResponse) Reset() { 1145 *x = GenerateFetchAccessTokenResponse{} 1146 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[12] 1147 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1148 ms.StoreMessageInfo(mi) 1149 } 1150 1151 func (x *GenerateFetchAccessTokenResponse) String() string { 1152 return protoimpl.X.MessageStringOf(x) 1153 } 1154 1155 func (*GenerateFetchAccessTokenResponse) ProtoMessage() {} 1156 1157 func (x *GenerateFetchAccessTokenResponse) ProtoReflect() protoreflect.Message { 1158 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[12] 1159 if x != nil { 1160 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1161 if ms.LoadMessageInfo() == nil { 1162 ms.StoreMessageInfo(mi) 1163 } 1164 return ms 1165 } 1166 return mi.MessageOf(x) 1167 } 1168 1169 // Deprecated: Use GenerateFetchAccessTokenResponse.ProtoReflect.Descriptor instead. 1170 func (*GenerateFetchAccessTokenResponse) Descriptor() ([]byte, []int) { 1171 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{12} 1172 } 1173 1174 func (x *GenerateFetchAccessTokenResponse) GetAccessToken() string { 1175 if x != nil { 1176 return x.AccessToken 1177 } 1178 return "" 1179 } 1180 1181 func (x *GenerateFetchAccessTokenResponse) GetExpireTime() *timestamppb.Timestamp { 1182 if x != nil { 1183 return x.ExpireTime 1184 } 1185 return nil 1186 } 1187 1188 // ID that is comprised from several parts (columns). 1189 type FeatureViewDataKey_CompositeKey struct { 1190 state protoimpl.MessageState 1191 sizeCache protoimpl.SizeCache 1192 unknownFields protoimpl.UnknownFields 1193 1194 // Parts to construct Entity ID. Should match with the same ID columns as 1195 // defined in FeatureView in the same order. 1196 Parts []string `protobuf:"bytes,1,rep,name=parts,proto3" json:"parts,omitempty"` 1197 } 1198 1199 func (x *FeatureViewDataKey_CompositeKey) Reset() { 1200 *x = FeatureViewDataKey_CompositeKey{} 1201 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[13] 1202 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1203 ms.StoreMessageInfo(mi) 1204 } 1205 1206 func (x *FeatureViewDataKey_CompositeKey) String() string { 1207 return protoimpl.X.MessageStringOf(x) 1208 } 1209 1210 func (*FeatureViewDataKey_CompositeKey) ProtoMessage() {} 1211 1212 func (x *FeatureViewDataKey_CompositeKey) ProtoReflect() protoreflect.Message { 1213 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[13] 1214 if x != nil { 1215 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1216 if ms.LoadMessageInfo() == nil { 1217 ms.StoreMessageInfo(mi) 1218 } 1219 return ms 1220 } 1221 return mi.MessageOf(x) 1222 } 1223 1224 // Deprecated: Use FeatureViewDataKey_CompositeKey.ProtoReflect.Descriptor instead. 1225 func (*FeatureViewDataKey_CompositeKey) Descriptor() ([]byte, []int) { 1226 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{0, 0} 1227 } 1228 1229 func (x *FeatureViewDataKey_CompositeKey) GetParts() []string { 1230 if x != nil { 1231 return x.Parts 1232 } 1233 return nil 1234 } 1235 1236 // Response structure in the format of key (feature name) and (feature) value 1237 // pair. 1238 type FetchFeatureValuesResponse_FeatureNameValuePairList struct { 1239 state protoimpl.MessageState 1240 sizeCache protoimpl.SizeCache 1241 unknownFields protoimpl.UnknownFields 1242 1243 // List of feature names and values. 1244 Features []*FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair `protobuf:"bytes,1,rep,name=features,proto3" json:"features,omitempty"` 1245 } 1246 1247 func (x *FetchFeatureValuesResponse_FeatureNameValuePairList) Reset() { 1248 *x = FetchFeatureValuesResponse_FeatureNameValuePairList{} 1249 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[14] 1250 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1251 ms.StoreMessageInfo(mi) 1252 } 1253 1254 func (x *FetchFeatureValuesResponse_FeatureNameValuePairList) String() string { 1255 return protoimpl.X.MessageStringOf(x) 1256 } 1257 1258 func (*FetchFeatureValuesResponse_FeatureNameValuePairList) ProtoMessage() {} 1259 1260 func (x *FetchFeatureValuesResponse_FeatureNameValuePairList) ProtoReflect() protoreflect.Message { 1261 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[14] 1262 if x != nil { 1263 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1264 if ms.LoadMessageInfo() == nil { 1265 ms.StoreMessageInfo(mi) 1266 } 1267 return ms 1268 } 1269 return mi.MessageOf(x) 1270 } 1271 1272 // Deprecated: Use FetchFeatureValuesResponse_FeatureNameValuePairList.ProtoReflect.Descriptor instead. 1273 func (*FetchFeatureValuesResponse_FeatureNameValuePairList) Descriptor() ([]byte, []int) { 1274 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{2, 0} 1275 } 1276 1277 func (x *FetchFeatureValuesResponse_FeatureNameValuePairList) GetFeatures() []*FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair { 1278 if x != nil { 1279 return x.Features 1280 } 1281 return nil 1282 } 1283 1284 // Feature name & value pair. 1285 type FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair struct { 1286 state protoimpl.MessageState 1287 sizeCache protoimpl.SizeCache 1288 unknownFields protoimpl.UnknownFields 1289 1290 // Types that are assignable to Data: 1291 // 1292 // *FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair_Value 1293 Data isFetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair_Data `protobuf_oneof:"data"` 1294 // Feature short name. 1295 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 1296 } 1297 1298 func (x *FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair) Reset() { 1299 *x = FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair{} 1300 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[15] 1301 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1302 ms.StoreMessageInfo(mi) 1303 } 1304 1305 func (x *FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair) String() string { 1306 return protoimpl.X.MessageStringOf(x) 1307 } 1308 1309 func (*FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair) ProtoMessage() {} 1310 1311 func (x *FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair) ProtoReflect() protoreflect.Message { 1312 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[15] 1313 if x != nil { 1314 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1315 if ms.LoadMessageInfo() == nil { 1316 ms.StoreMessageInfo(mi) 1317 } 1318 return ms 1319 } 1320 return mi.MessageOf(x) 1321 } 1322 1323 // Deprecated: Use FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair.ProtoReflect.Descriptor instead. 1324 func (*FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair) Descriptor() ([]byte, []int) { 1325 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{2, 0, 0} 1326 } 1327 1328 func (m *FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair) GetData() isFetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair_Data { 1329 if m != nil { 1330 return m.Data 1331 } 1332 return nil 1333 } 1334 1335 func (x *FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair) GetValue() *FeatureValue { 1336 if x, ok := x.GetData().(*FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair_Value); ok { 1337 return x.Value 1338 } 1339 return nil 1340 } 1341 1342 func (x *FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair) GetName() string { 1343 if x != nil { 1344 return x.Name 1345 } 1346 return "" 1347 } 1348 1349 type isFetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair_Data interface { 1350 isFetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair_Data() 1351 } 1352 1353 type FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair_Value struct { 1354 // Feature value. 1355 Value *FeatureValue `protobuf:"bytes,2,opt,name=value,proto3,oneof"` 1356 } 1357 1358 func (*FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair_Value) isFetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair_Data() { 1359 } 1360 1361 // The embedding vector. 1362 type NearestNeighborQuery_Embedding struct { 1363 state protoimpl.MessageState 1364 sizeCache protoimpl.SizeCache 1365 unknownFields protoimpl.UnknownFields 1366 1367 // Optional. Individual value in the embedding. 1368 Value []float32 `protobuf:"fixed32,1,rep,packed,name=value,proto3" json:"value,omitempty"` 1369 } 1370 1371 func (x *NearestNeighborQuery_Embedding) Reset() { 1372 *x = NearestNeighborQuery_Embedding{} 1373 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[16] 1374 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1375 ms.StoreMessageInfo(mi) 1376 } 1377 1378 func (x *NearestNeighborQuery_Embedding) String() string { 1379 return protoimpl.X.MessageStringOf(x) 1380 } 1381 1382 func (*NearestNeighborQuery_Embedding) ProtoMessage() {} 1383 1384 func (x *NearestNeighborQuery_Embedding) ProtoReflect() protoreflect.Message { 1385 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[16] 1386 if x != nil { 1387 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1388 if ms.LoadMessageInfo() == nil { 1389 ms.StoreMessageInfo(mi) 1390 } 1391 return ms 1392 } 1393 return mi.MessageOf(x) 1394 } 1395 1396 // Deprecated: Use NearestNeighborQuery_Embedding.ProtoReflect.Descriptor instead. 1397 func (*NearestNeighborQuery_Embedding) Descriptor() ([]byte, []int) { 1398 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{5, 0} 1399 } 1400 1401 func (x *NearestNeighborQuery_Embedding) GetValue() []float32 { 1402 if x != nil { 1403 return x.Value 1404 } 1405 return nil 1406 } 1407 1408 // String filter is used to search a subset of the entities by using boolean 1409 // rules on string columns. 1410 // For example: if a query specifies string filter 1411 // with 'name = color, allow_tokens = {red, blue}, deny_tokens = {purple}',' 1412 // then that query will match entities that are red or blue, but if those 1413 // points are also purple, then they will be excluded even if they are 1414 // red/blue. Only string filter is supported for now, numeric filter will be 1415 // supported in the near future. 1416 type NearestNeighborQuery_StringFilter struct { 1417 state protoimpl.MessageState 1418 sizeCache protoimpl.SizeCache 1419 unknownFields protoimpl.UnknownFields 1420 1421 // Required. Column names in BigQuery that used as filters. 1422 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 1423 // Optional. The allowed tokens. 1424 AllowTokens []string `protobuf:"bytes,2,rep,name=allow_tokens,json=allowTokens,proto3" json:"allow_tokens,omitempty"` 1425 // Optional. The denied tokens. 1426 DenyTokens []string `protobuf:"bytes,3,rep,name=deny_tokens,json=denyTokens,proto3" json:"deny_tokens,omitempty"` 1427 } 1428 1429 func (x *NearestNeighborQuery_StringFilter) Reset() { 1430 *x = NearestNeighborQuery_StringFilter{} 1431 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[17] 1432 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1433 ms.StoreMessageInfo(mi) 1434 } 1435 1436 func (x *NearestNeighborQuery_StringFilter) String() string { 1437 return protoimpl.X.MessageStringOf(x) 1438 } 1439 1440 func (*NearestNeighborQuery_StringFilter) ProtoMessage() {} 1441 1442 func (x *NearestNeighborQuery_StringFilter) ProtoReflect() protoreflect.Message { 1443 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[17] 1444 if x != nil { 1445 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1446 if ms.LoadMessageInfo() == nil { 1447 ms.StoreMessageInfo(mi) 1448 } 1449 return ms 1450 } 1451 return mi.MessageOf(x) 1452 } 1453 1454 // Deprecated: Use NearestNeighborQuery_StringFilter.ProtoReflect.Descriptor instead. 1455 func (*NearestNeighborQuery_StringFilter) Descriptor() ([]byte, []int) { 1456 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{5, 1} 1457 } 1458 1459 func (x *NearestNeighborQuery_StringFilter) GetName() string { 1460 if x != nil { 1461 return x.Name 1462 } 1463 return "" 1464 } 1465 1466 func (x *NearestNeighborQuery_StringFilter) GetAllowTokens() []string { 1467 if x != nil { 1468 return x.AllowTokens 1469 } 1470 return nil 1471 } 1472 1473 func (x *NearestNeighborQuery_StringFilter) GetDenyTokens() []string { 1474 if x != nil { 1475 return x.DenyTokens 1476 } 1477 return nil 1478 } 1479 1480 // Numeric filter is used to search a subset of the entities by using boolean 1481 // rules on numeric columns. 1482 // For example: 1483 // Database Point 0: {name: “a” value_int: 42} {name: “b” value_float: 1.0} 1484 // Database Point 1: {name: “a” value_int: 10} {name: “b” value_float: 2.0} 1485 // Database Point 2: {name: “a” value_int: -1} {name: “b” value_float: 3.0} 1486 // Query: {name: “a” value_int: 12 operator: LESS} // Matches Point 1, 2 1487 // {name: “b” value_float: 2.0 operator: EQUAL} // Matches Point 1 1488 type NearestNeighborQuery_NumericFilter struct { 1489 state protoimpl.MessageState 1490 sizeCache protoimpl.SizeCache 1491 unknownFields protoimpl.UnknownFields 1492 1493 // The type of Value must be consistent for all datapoints with a given 1494 // name. This is verified at runtime. 1495 // 1496 // Types that are assignable to Value: 1497 // 1498 // *NearestNeighborQuery_NumericFilter_ValueInt 1499 // *NearestNeighborQuery_NumericFilter_ValueFloat 1500 // *NearestNeighborQuery_NumericFilter_ValueDouble 1501 Value isNearestNeighborQuery_NumericFilter_Value `protobuf_oneof:"Value"` 1502 // Required. Column name in BigQuery that used as filters. 1503 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 1504 // Optional. This MUST be specified for queries and must NOT be specified 1505 // for database points. 1506 Op *NearestNeighborQuery_NumericFilter_Operator `protobuf:"varint,5,opt,name=op,proto3,enum=google.cloud.aiplatform.v1beta1.NearestNeighborQuery_NumericFilter_Operator,oneof" json:"op,omitempty"` 1507 } 1508 1509 func (x *NearestNeighborQuery_NumericFilter) Reset() { 1510 *x = NearestNeighborQuery_NumericFilter{} 1511 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[18] 1512 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1513 ms.StoreMessageInfo(mi) 1514 } 1515 1516 func (x *NearestNeighborQuery_NumericFilter) String() string { 1517 return protoimpl.X.MessageStringOf(x) 1518 } 1519 1520 func (*NearestNeighborQuery_NumericFilter) ProtoMessage() {} 1521 1522 func (x *NearestNeighborQuery_NumericFilter) ProtoReflect() protoreflect.Message { 1523 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[18] 1524 if x != nil { 1525 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1526 if ms.LoadMessageInfo() == nil { 1527 ms.StoreMessageInfo(mi) 1528 } 1529 return ms 1530 } 1531 return mi.MessageOf(x) 1532 } 1533 1534 // Deprecated: Use NearestNeighborQuery_NumericFilter.ProtoReflect.Descriptor instead. 1535 func (*NearestNeighborQuery_NumericFilter) Descriptor() ([]byte, []int) { 1536 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{5, 2} 1537 } 1538 1539 func (m *NearestNeighborQuery_NumericFilter) GetValue() isNearestNeighborQuery_NumericFilter_Value { 1540 if m != nil { 1541 return m.Value 1542 } 1543 return nil 1544 } 1545 1546 func (x *NearestNeighborQuery_NumericFilter) GetValueInt() int64 { 1547 if x, ok := x.GetValue().(*NearestNeighborQuery_NumericFilter_ValueInt); ok { 1548 return x.ValueInt 1549 } 1550 return 0 1551 } 1552 1553 func (x *NearestNeighborQuery_NumericFilter) GetValueFloat() float32 { 1554 if x, ok := x.GetValue().(*NearestNeighborQuery_NumericFilter_ValueFloat); ok { 1555 return x.ValueFloat 1556 } 1557 return 0 1558 } 1559 1560 func (x *NearestNeighborQuery_NumericFilter) GetValueDouble() float64 { 1561 if x, ok := x.GetValue().(*NearestNeighborQuery_NumericFilter_ValueDouble); ok { 1562 return x.ValueDouble 1563 } 1564 return 0 1565 } 1566 1567 func (x *NearestNeighborQuery_NumericFilter) GetName() string { 1568 if x != nil { 1569 return x.Name 1570 } 1571 return "" 1572 } 1573 1574 func (x *NearestNeighborQuery_NumericFilter) GetOp() NearestNeighborQuery_NumericFilter_Operator { 1575 if x != nil && x.Op != nil { 1576 return *x.Op 1577 } 1578 return NearestNeighborQuery_NumericFilter_OPERATOR_UNSPECIFIED 1579 } 1580 1581 type isNearestNeighborQuery_NumericFilter_Value interface { 1582 isNearestNeighborQuery_NumericFilter_Value() 1583 } 1584 1585 type NearestNeighborQuery_NumericFilter_ValueInt struct { 1586 // int value type. 1587 ValueInt int64 `protobuf:"varint,2,opt,name=value_int,json=valueInt,proto3,oneof"` 1588 } 1589 1590 type NearestNeighborQuery_NumericFilter_ValueFloat struct { 1591 // float value type. 1592 ValueFloat float32 `protobuf:"fixed32,3,opt,name=value_float,json=valueFloat,proto3,oneof"` 1593 } 1594 1595 type NearestNeighborQuery_NumericFilter_ValueDouble struct { 1596 // double value type. 1597 ValueDouble float64 `protobuf:"fixed64,4,opt,name=value_double,json=valueDouble,proto3,oneof"` 1598 } 1599 1600 func (*NearestNeighborQuery_NumericFilter_ValueInt) isNearestNeighborQuery_NumericFilter_Value() {} 1601 1602 func (*NearestNeighborQuery_NumericFilter_ValueFloat) isNearestNeighborQuery_NumericFilter_Value() {} 1603 1604 func (*NearestNeighborQuery_NumericFilter_ValueDouble) isNearestNeighborQuery_NumericFilter_Value() {} 1605 1606 // Parameters that can be overrided in each query to tune query latency and 1607 // recall. 1608 type NearestNeighborQuery_Parameters struct { 1609 state protoimpl.MessageState 1610 sizeCache protoimpl.SizeCache 1611 unknownFields protoimpl.UnknownFields 1612 1613 // Optional. The number of neighbors to find via approximate search before 1614 // exact reordering is performed; if set, this value must be > 1615 // neighbor_count. 1616 ApproximateNeighborCandidates int32 `protobuf:"varint,1,opt,name=approximate_neighbor_candidates,json=approximateNeighborCandidates,proto3" json:"approximate_neighbor_candidates,omitempty"` 1617 // Optional. The fraction of the number of leaves to search, set at query 1618 // time allows user to tune search performance. This value increase result 1619 // in both search accuracy and latency increase. The value should be between 1620 // 0.0 and 1.0. 1621 LeafNodesSearchFraction float64 `protobuf:"fixed64,2,opt,name=leaf_nodes_search_fraction,json=leafNodesSearchFraction,proto3" json:"leaf_nodes_search_fraction,omitempty"` 1622 } 1623 1624 func (x *NearestNeighborQuery_Parameters) Reset() { 1625 *x = NearestNeighborQuery_Parameters{} 1626 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[19] 1627 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1628 ms.StoreMessageInfo(mi) 1629 } 1630 1631 func (x *NearestNeighborQuery_Parameters) String() string { 1632 return protoimpl.X.MessageStringOf(x) 1633 } 1634 1635 func (*NearestNeighborQuery_Parameters) ProtoMessage() {} 1636 1637 func (x *NearestNeighborQuery_Parameters) ProtoReflect() protoreflect.Message { 1638 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[19] 1639 if x != nil { 1640 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1641 if ms.LoadMessageInfo() == nil { 1642 ms.StoreMessageInfo(mi) 1643 } 1644 return ms 1645 } 1646 return mi.MessageOf(x) 1647 } 1648 1649 // Deprecated: Use NearestNeighborQuery_Parameters.ProtoReflect.Descriptor instead. 1650 func (*NearestNeighborQuery_Parameters) Descriptor() ([]byte, []int) { 1651 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{5, 3} 1652 } 1653 1654 func (x *NearestNeighborQuery_Parameters) GetApproximateNeighborCandidates() int32 { 1655 if x != nil { 1656 return x.ApproximateNeighborCandidates 1657 } 1658 return 0 1659 } 1660 1661 func (x *NearestNeighborQuery_Parameters) GetLeafNodesSearchFraction() float64 { 1662 if x != nil { 1663 return x.LeafNodesSearchFraction 1664 } 1665 return 0 1666 } 1667 1668 // A neighbor of the query vector. 1669 type NearestNeighbors_Neighbor struct { 1670 state protoimpl.MessageState 1671 sizeCache protoimpl.SizeCache 1672 unknownFields protoimpl.UnknownFields 1673 1674 // The id of the similar entity. 1675 EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` 1676 // The distance between the neighbor and the query vector. 1677 Distance float64 `protobuf:"fixed64,2,opt,name=distance,proto3" json:"distance,omitempty"` 1678 // The attributes of the neighbor, e.g. filters, crowding and metadata 1679 // Note that full entities are returned only when "return_full_entity" 1680 // is set to true. Otherwise, only the "entity_id" and "distance" fields 1681 // are populated. 1682 EntityKeyValues *FetchFeatureValuesResponse `protobuf:"bytes,3,opt,name=entity_key_values,json=entityKeyValues,proto3" json:"entity_key_values,omitempty"` 1683 } 1684 1685 func (x *NearestNeighbors_Neighbor) Reset() { 1686 *x = NearestNeighbors_Neighbor{} 1687 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[20] 1688 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1689 ms.StoreMessageInfo(mi) 1690 } 1691 1692 func (x *NearestNeighbors_Neighbor) String() string { 1693 return protoimpl.X.MessageStringOf(x) 1694 } 1695 1696 func (*NearestNeighbors_Neighbor) ProtoMessage() {} 1697 1698 func (x *NearestNeighbors_Neighbor) ProtoReflect() protoreflect.Message { 1699 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[20] 1700 if x != nil { 1701 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1702 if ms.LoadMessageInfo() == nil { 1703 ms.StoreMessageInfo(mi) 1704 } 1705 return ms 1706 } 1707 return mi.MessageOf(x) 1708 } 1709 1710 // Deprecated: Use NearestNeighbors_Neighbor.ProtoReflect.Descriptor instead. 1711 func (*NearestNeighbors_Neighbor) Descriptor() ([]byte, []int) { 1712 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{7, 0} 1713 } 1714 1715 func (x *NearestNeighbors_Neighbor) GetEntityId() string { 1716 if x != nil { 1717 return x.EntityId 1718 } 1719 return "" 1720 } 1721 1722 func (x *NearestNeighbors_Neighbor) GetDistance() float64 { 1723 if x != nil { 1724 return x.Distance 1725 } 1726 return 0 1727 } 1728 1729 func (x *NearestNeighbors_Neighbor) GetEntityKeyValues() *FetchFeatureValuesResponse { 1730 if x != nil { 1731 return x.EntityKeyValues 1732 } 1733 return nil 1734 } 1735 1736 // A data key and associated feature values to write to the feature view. 1737 type FeatureViewDirectWriteRequest_DataKeyAndFeatureValues struct { 1738 state protoimpl.MessageState 1739 sizeCache protoimpl.SizeCache 1740 unknownFields protoimpl.UnknownFields 1741 1742 // The data key. 1743 DataKey *FeatureViewDataKey `protobuf:"bytes,1,opt,name=data_key,json=dataKey,proto3" json:"data_key,omitempty"` 1744 // List of features to write. 1745 Features []*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature `protobuf:"bytes,2,rep,name=features,proto3" json:"features,omitempty"` 1746 } 1747 1748 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues) Reset() { 1749 *x = FeatureViewDirectWriteRequest_DataKeyAndFeatureValues{} 1750 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[21] 1751 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1752 ms.StoreMessageInfo(mi) 1753 } 1754 1755 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues) String() string { 1756 return protoimpl.X.MessageStringOf(x) 1757 } 1758 1759 func (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues) ProtoMessage() {} 1760 1761 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues) ProtoReflect() protoreflect.Message { 1762 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[21] 1763 if x != nil { 1764 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1765 if ms.LoadMessageInfo() == nil { 1766 ms.StoreMessageInfo(mi) 1767 } 1768 return ms 1769 } 1770 return mi.MessageOf(x) 1771 } 1772 1773 // Deprecated: Use FeatureViewDirectWriteRequest_DataKeyAndFeatureValues.ProtoReflect.Descriptor instead. 1774 func (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues) Descriptor() ([]byte, []int) { 1775 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{9, 0} 1776 } 1777 1778 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues) GetDataKey() *FeatureViewDataKey { 1779 if x != nil { 1780 return x.DataKey 1781 } 1782 return nil 1783 } 1784 1785 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues) GetFeatures() []*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature { 1786 if x != nil { 1787 return x.Features 1788 } 1789 return nil 1790 } 1791 1792 // Feature name & value pair. 1793 type FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature struct { 1794 state protoimpl.MessageState 1795 sizeCache protoimpl.SizeCache 1796 unknownFields protoimpl.UnknownFields 1797 1798 // Feature value data to write. 1799 // 1800 // Types that are assignable to DataOneof: 1801 // 1802 // *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_Value 1803 // *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_ValueAndTimestamp 1804 DataOneof isFeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_DataOneof `protobuf_oneof:"data_oneof"` 1805 // Feature short name. 1806 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 1807 } 1808 1809 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature) Reset() { 1810 *x = FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature{} 1811 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[22] 1812 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1813 ms.StoreMessageInfo(mi) 1814 } 1815 1816 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature) String() string { 1817 return protoimpl.X.MessageStringOf(x) 1818 } 1819 1820 func (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature) ProtoMessage() {} 1821 1822 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature) ProtoReflect() protoreflect.Message { 1823 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[22] 1824 if x != nil { 1825 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1826 if ms.LoadMessageInfo() == nil { 1827 ms.StoreMessageInfo(mi) 1828 } 1829 return ms 1830 } 1831 return mi.MessageOf(x) 1832 } 1833 1834 // Deprecated: Use FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature.ProtoReflect.Descriptor instead. 1835 func (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature) Descriptor() ([]byte, []int) { 1836 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{9, 0, 0} 1837 } 1838 1839 func (m *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature) GetDataOneof() isFeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_DataOneof { 1840 if m != nil { 1841 return m.DataOneof 1842 } 1843 return nil 1844 } 1845 1846 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature) GetValue() *FeatureValue { 1847 if x, ok := x.GetDataOneof().(*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_Value); ok { 1848 return x.Value 1849 } 1850 return nil 1851 } 1852 1853 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature) GetValueAndTimestamp() *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp { 1854 if x, ok := x.GetDataOneof().(*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_ValueAndTimestamp); ok { 1855 return x.ValueAndTimestamp 1856 } 1857 return nil 1858 } 1859 1860 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature) GetName() string { 1861 if x != nil { 1862 return x.Name 1863 } 1864 return "" 1865 } 1866 1867 type isFeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_DataOneof interface { 1868 isFeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_DataOneof() 1869 } 1870 1871 type FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_Value struct { 1872 // Feature value. A user provided timestamp may be set in the 1873 // `FeatureValue.metadata.generate_time` field. 1874 Value *FeatureValue `protobuf:"bytes,3,opt,name=value,proto3,oneof"` 1875 } 1876 1877 type FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_ValueAndTimestamp struct { 1878 // Feature value and timestamp. 1879 ValueAndTimestamp *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp `protobuf:"bytes,2,opt,name=value_and_timestamp,json=valueAndTimestamp,proto3,oneof"` 1880 } 1881 1882 func (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_Value) isFeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_DataOneof() { 1883 } 1884 1885 func (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_ValueAndTimestamp) isFeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_DataOneof() { 1886 } 1887 1888 // Feature value and timestamp. 1889 type FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp struct { 1890 state protoimpl.MessageState 1891 sizeCache protoimpl.SizeCache 1892 unknownFields protoimpl.UnknownFields 1893 1894 // The feature value. 1895 Value *FeatureValue `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` 1896 // The feature timestamp to store with this value. 1897 // If not set, then the Feature Store server will generate a timestamp 1898 // when it receives the write request. 1899 Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` 1900 } 1901 1902 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp) Reset() { 1903 *x = FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp{} 1904 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[23] 1905 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1906 ms.StoreMessageInfo(mi) 1907 } 1908 1909 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp) String() string { 1910 return protoimpl.X.MessageStringOf(x) 1911 } 1912 1913 func (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp) ProtoMessage() { 1914 } 1915 1916 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp) ProtoReflect() protoreflect.Message { 1917 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[23] 1918 if x != nil { 1919 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1920 if ms.LoadMessageInfo() == nil { 1921 ms.StoreMessageInfo(mi) 1922 } 1923 return ms 1924 } 1925 return mi.MessageOf(x) 1926 } 1927 1928 // Deprecated: Use FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp.ProtoReflect.Descriptor instead. 1929 func (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp) Descriptor() ([]byte, []int) { 1930 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{9, 0, 0, 0} 1931 } 1932 1933 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp) GetValue() *FeatureValue { 1934 if x != nil { 1935 return x.Value 1936 } 1937 return nil 1938 } 1939 1940 func (x *FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp) GetTimestamp() *timestamppb.Timestamp { 1941 if x != nil { 1942 return x.Timestamp 1943 } 1944 return nil 1945 } 1946 1947 // Details about the write for each key. 1948 type FeatureViewDirectWriteResponse_WriteResponse struct { 1949 state protoimpl.MessageState 1950 sizeCache protoimpl.SizeCache 1951 unknownFields protoimpl.UnknownFields 1952 1953 // What key is this write response associated with. 1954 DataKey *FeatureViewDataKey `protobuf:"bytes,1,opt,name=data_key,json=dataKey,proto3" json:"data_key,omitempty"` 1955 // When the feature values were written to the online store. 1956 // If 1957 // [FeatureViewDirectWriteResponse.status][google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse.status] 1958 // is not OK, this field is not populated. 1959 OnlineStoreWriteTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=online_store_write_time,json=onlineStoreWriteTime,proto3" json:"online_store_write_time,omitempty"` 1960 } 1961 1962 func (x *FeatureViewDirectWriteResponse_WriteResponse) Reset() { 1963 *x = FeatureViewDirectWriteResponse_WriteResponse{} 1964 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[24] 1965 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1966 ms.StoreMessageInfo(mi) 1967 } 1968 1969 func (x *FeatureViewDirectWriteResponse_WriteResponse) String() string { 1970 return protoimpl.X.MessageStringOf(x) 1971 } 1972 1973 func (*FeatureViewDirectWriteResponse_WriteResponse) ProtoMessage() {} 1974 1975 func (x *FeatureViewDirectWriteResponse_WriteResponse) ProtoReflect() protoreflect.Message { 1976 mi := &file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[24] 1977 if x != nil { 1978 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1979 if ms.LoadMessageInfo() == nil { 1980 ms.StoreMessageInfo(mi) 1981 } 1982 return ms 1983 } 1984 return mi.MessageOf(x) 1985 } 1986 1987 // Deprecated: Use FeatureViewDirectWriteResponse_WriteResponse.ProtoReflect.Descriptor instead. 1988 func (*FeatureViewDirectWriteResponse_WriteResponse) Descriptor() ([]byte, []int) { 1989 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP(), []int{10, 0} 1990 } 1991 1992 func (x *FeatureViewDirectWriteResponse_WriteResponse) GetDataKey() *FeatureViewDataKey { 1993 if x != nil { 1994 return x.DataKey 1995 } 1996 return nil 1997 } 1998 1999 func (x *FeatureViewDirectWriteResponse_WriteResponse) GetOnlineStoreWriteTime() *timestamppb.Timestamp { 2000 if x != nil { 2001 return x.OnlineStoreWriteTime 2002 } 2003 return nil 2004 } 2005 2006 var File_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto protoreflect.FileDescriptor 2007 2008 var file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDesc = []byte{ 2009 0x0a, 0x42, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x61, 2010 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 2011 0x31, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 2012 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 2013 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 2014 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 2015 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 2016 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 2017 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 2018 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 2019 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 2020 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 2021 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 2022 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 2023 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 2024 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 2025 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x65, 2026 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 2027 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 2028 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 2029 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 2030 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 2031 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 2032 0x6f, 0x74, 0x6f, 0x22, 0xc4, 0x01, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 2033 0x69, 0x65, 0x77, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x03, 0x6b, 0x65, 2034 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x67, 2035 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 2036 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 2037 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 2038 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 2039 0x69, 0x65, 0x77, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 2040 0x73, 0x69, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x48, 0x00, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 2041 0x73, 0x69, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x1a, 0x24, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 2042 0x73, 0x69, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 2043 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x42, 0x0b, 0x0a, 2044 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0xe9, 0x03, 0x0a, 0x19, 0x46, 2045 0x65, 0x74, 0x63, 0x68, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 2046 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 2047 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x50, 2048 0x0a, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 2049 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x27, 0x0a, 0x25, 0x61, 0x69, 2050 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 2051 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 2052 0x69, 0x65, 0x77, 0x52, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 2053 0x12, 0x53, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 2054 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 2055 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 2056 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 2057 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x07, 0x64, 0x61, 2058 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x5c, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x6f, 2059 0x72, 0x6d, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 2060 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 2061 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 2062 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 2063 0x61, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 2064 0x6d, 0x61, 0x74, 0x12, 0x5d, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x05, 0x20, 2065 0x01, 0x28, 0x0e, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 2066 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 2067 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x65, 0x61, 0x74, 0x75, 2068 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 2069 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 2070 0x61, 0x74, 0x22, 0x45, 0x0a, 0x06, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x16, 0x0a, 0x12, 2071 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 2072 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4b, 0x45, 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 2073 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x52, 2074 0x55, 0x43, 0x54, 0x10, 0x02, 0x1a, 0x02, 0x18, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 2075 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x22, 0xcb, 0x04, 0x0a, 0x1a, 0x46, 0x65, 0x74, 0x63, 0x68, 2076 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 2077 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x76, 0x61, 0x6c, 2078 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 2079 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 2080 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 2081 0x68, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 2082 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x61, 2083 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x48, 2084 0x00, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 2085 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 2086 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 2087 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x70, 2088 0x72, 0x6f, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x61, 2089 0x74, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 2090 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 2091 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 2092 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 2093 0x79, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x1a, 0x9d, 0x02, 0x0a, 0x18, 0x46, 2094 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 2095 0x61, 0x69, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x85, 0x01, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 2096 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x69, 0x2e, 0x67, 0x6f, 0x6f, 2097 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 2098 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x74, 2099 0x63, 0x68, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 2100 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 2101 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x4c, 0x69, 0x73, 0x74, 2102 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 2103 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 2104 0x79, 0x0a, 0x14, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 2105 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 2106 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 2107 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 2108 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 2109 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 2110 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 2111 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x6f, 2112 0x72, 0x6d, 0x61, 0x74, 0x22, 0xa1, 0x02, 0x0a, 0x22, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 2113 0x6e, 0x67, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 2114 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x0c, 0x66, 2115 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 2116 0x09, 0x42, 0x2d, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x27, 0x0a, 0x25, 0x61, 0x69, 0x70, 0x6c, 0x61, 2117 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 2118 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 2119 0x52, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 2120 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 2121 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 2122 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 2123 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x61, 2124 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x12, 2125 0x57, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 2126 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 2127 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 2128 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 2129 0x65, 0x77, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x0a, 0x64, 0x61, 2130 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x88, 0x02, 0x0a, 0x23, 0x53, 0x74, 0x72, 2131 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x65, 0x61, 0x74, 0x75, 2132 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 2133 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 2134 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 2135 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4f, 0x0a, 0x04, 2136 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 2137 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 2138 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x74, 2139 0x63, 0x68, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 2140 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x64, 0x0a, 2141 0x14, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 2142 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 2143 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 2144 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 2145 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 2146 0x52, 0x11, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x57, 0x69, 0x74, 0x68, 0x45, 0x72, 2147 0x72, 0x6f, 0x72, 0x22, 0xba, 0x0a, 0x0a, 0x14, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x4e, 2148 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x22, 0x0a, 0x09, 2149 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 2150 0x03, 0xe0, 0x41, 0x01, 0x48, 0x00, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 2151 0x12, 0x64, 0x0a, 0x09, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 2152 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 2153 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 2154 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x69, 2155 0x67, 0x68, 0x62, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 2156 0x64, 0x69, 0x6e, 0x67, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6d, 0x62, 2157 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a, 0x0e, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 2158 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 2159 0xe0, 0x41, 0x01, 0x52, 0x0d, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x43, 0x6f, 0x75, 2160 0x6e, 0x74, 0x12, 0x6e, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x6c, 2161 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x6f, 0x6f, 2162 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 2163 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x61, 2164 0x72, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 2165 0x79, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x03, 2166 0xe0, 0x41, 0x01, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 2167 0x72, 0x73, 0x12, 0x71, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x66, 0x69, 2168 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x6f, 2169 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 2170 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x65, 2171 0x61, 0x72, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x51, 0x75, 0x65, 2172 0x72, 0x79, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 2173 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 2174 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x55, 0x0a, 0x25, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x6f, 2175 0x77, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 2176 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 2177 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x21, 0x70, 0x65, 0x72, 0x43, 0x72, 2178 0x6f, 0x77, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 2179 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x0a, 2180 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 2181 0x32, 0x40, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 2182 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 2183 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 2184 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 2185 0x72, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 2186 0x65, 0x72, 0x73, 0x1a, 0x26, 0x0a, 0x09, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 2187 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x42, 2188 0x03, 0xe0, 0x41, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x75, 0x0a, 0x0c, 0x53, 2189 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x04, 0x6e, 2190 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 2191 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x6f, 2192 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 2193 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0b, 2194 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 2195 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x6e, 0x79, 0x54, 0x6f, 0x6b, 0x65, 2196 0x6e, 0x73, 0x1a, 0x81, 0x03, 0x0a, 0x0d, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 2197 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x6e, 2198 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 2199 0x49, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6c, 0x6f, 2200 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 2201 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x23, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 2202 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 2203 0x76, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x6e, 2204 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 2205 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x66, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 2206 0x32, 0x4c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 2207 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 2208 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 2209 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 2210 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x03, 2211 0xe0, 0x41, 0x01, 0x48, 0x01, 0x52, 0x02, 0x6f, 0x70, 0x88, 0x01, 0x01, 0x22, 0x78, 0x0a, 0x08, 2212 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x14, 0x4f, 0x50, 0x45, 0x52, 2213 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 2214 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 2215 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 2216 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x52, 0x45, 0x41, 0x54, 2217 0x45, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x47, 0x52, 2218 0x45, 0x41, 0x54, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 2219 0x51, 0x55, 0x41, 0x4c, 0x10, 0x06, 0x42, 0x07, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 2220 0x05, 0x0a, 0x03, 0x5f, 0x6f, 0x70, 0x1a, 0x9b, 0x01, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x61, 0x6d, 2221 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4b, 0x0a, 0x1f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 2222 0x6d, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x5f, 0x63, 0x61, 2223 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 2224 0xe0, 0x41, 0x01, 0x52, 0x1d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 2225 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 2226 0x65, 0x73, 0x12, 0x40, 0x0a, 0x1a, 0x6c, 0x65, 0x61, 0x66, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 2227 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 2228 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x17, 0x6c, 0x65, 0x61, 2229 0x66, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x72, 0x61, 0x63, 2230 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 2231 0x22, 0xf5, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4e, 0x65, 0x61, 0x72, 0x65, 2232 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 2233 0x74, 0x12, 0x50, 0x0a, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 2234 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x27, 0x0a, 2235 0x25, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 2236 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46, 0x65, 0x61, 0x74, 0x75, 2237 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 2238 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 2239 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 2240 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 2241 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x69, 0x67, 2242 0x68, 0x62, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x05, 2243 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x31, 0x0a, 0x12, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 2244 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 2245 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x10, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x46, 0x75, 2246 0x6c, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x9b, 0x02, 0x0a, 0x10, 0x4e, 0x65, 0x61, 2247 0x72, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x73, 0x12, 0x58, 0x0a, 2248 0x09, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 2249 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 2250 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 2251 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 2252 0x6f, 0x72, 0x73, 0x2e, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x09, 0x6e, 0x65, 2253 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x73, 0x1a, 0xac, 0x01, 0x0a, 0x08, 0x4e, 0x65, 0x69, 0x67, 2254 0x68, 0x62, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 2255 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 2256 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 2257 0x01, 0x28, 0x01, 0x52, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x67, 0x0a, 2258 0x11, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 2259 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 2260 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 2261 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 2262 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 2263 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 2264 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x7f, 0x0a, 0x1d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 2265 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 2266 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x11, 0x6e, 0x65, 0x61, 0x72, 0x65, 2267 0x73, 0x74, 0x5f, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 2268 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 2269 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 2270 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x69, 0x67, 2271 0x68, 0x62, 0x6f, 0x72, 0x73, 0x52, 0x10, 0x6e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x4e, 0x65, 2272 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x73, 0x22, 0xaf, 0x07, 0x0a, 0x1d, 0x46, 0x65, 0x61, 0x74, 2273 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 0x72, 0x69, 2274 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x0c, 0x66, 0x65, 0x61, 2275 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 2276 0x2a, 0xfa, 0x41, 0x27, 0x0a, 0x25, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 2277 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 2278 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x66, 0x65, 0x61, 2279 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x99, 0x01, 0x0a, 0x1b, 0x64, 0x61, 0x74, 2280 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 2281 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x56, 2282 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 2283 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 2284 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x69, 0x72, 0x65, 2285 0x63, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 2286 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x41, 0x6e, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 2287 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x17, 0x64, 0x61, 0x74, 2288 0x61, 0x4b, 0x65, 0x79, 0x41, 0x6e, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 2289 0x6c, 0x75, 0x65, 0x73, 0x1a, 0xa2, 0x05, 0x0a, 0x17, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 2290 0x41, 0x6e, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 2291 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 2292 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 2293 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 2294 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 2295 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 2296 0x12, 0x7a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 2297 0x28, 0x0b, 0x32, 0x5e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 2298 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 2299 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 2300 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 2301 0x73, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x41, 0x6e, 0x64, 0x46, 0x65, 0x61, 2302 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 2303 0x72, 0x65, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 0xba, 0x03, 0x0a, 2304 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 2305 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 2306 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 2307 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 2308 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 2309 0xa9, 0x01, 0x0a, 0x13, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x74, 0x69, 2310 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x77, 0x2e, 2311 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 2312 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 2313 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x69, 0x72, 0x65, 0x63, 2314 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x61, 2315 0x74, 0x61, 0x4b, 0x65, 0x79, 0x41, 0x6e, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 2316 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x46, 0x65, 2317 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x64, 0x54, 0x69, 0x6d, 2318 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x11, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x41, 2319 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 2320 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 2321 0x99, 0x01, 0x0a, 0x18, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 2322 0x41, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x43, 0x0a, 0x05, 2323 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 2324 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 2325 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 2326 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 2327 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 2328 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 2329 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 2330 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0c, 0x0a, 0x0a, 0x64, 2331 0x61, 0x74, 0x61, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0xf9, 0x02, 0x0a, 0x1e, 0x46, 0x65, 2332 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 2333 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 2334 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 2335 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 2336 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x76, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 2337 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 2338 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 2339 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 2340 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 2341 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 2342 0x73, 0x65, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 2343 0x52, 0x0e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 2344 0x1a, 0xb2, 0x01, 0x0a, 0x0d, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 2345 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 2346 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 2347 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 2348 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 2349 0x65, 0x77, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61, 0x4b, 2350 0x65, 0x79, 0x12, 0x51, 0x0a, 0x17, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x6f, 2351 0x72, 0x65, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 2352 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 2353 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 2354 0x14, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x57, 0x72, 0x69, 0x74, 2355 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x70, 0x0a, 0x1f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 2356 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 2357 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x0c, 0x66, 0x65, 0x61, 0x74, 2358 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 2359 0xfa, 0x41, 0x27, 0x0a, 0x25, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 2360 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x46, 2361 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x66, 0x65, 0x61, 0x74, 2362 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x22, 0x82, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x6e, 0x65, 2363 0x72, 0x61, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 2364 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 2365 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 2366 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 2367 0x3b, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 2368 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 2369 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 2370 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x2a, 0x62, 0x0a, 0x15, 2371 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x61, 0x74, 0x61, 0x46, 2372 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x24, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 2373 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 2374 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 2375 0x0d, 0x0a, 0x09, 0x4b, 0x45, 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x10, 2376 0x0a, 0x0c, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x10, 0x02, 2377 0x32, 0x83, 0x0c, 0x0a, 0x19, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4f, 0x6e, 0x6c, 0x69, 2378 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9a, 2379 0x02, 0x0a, 0x12, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 2380 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 2381 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 2382 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x65, 0x61, 2383 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 2384 0x74, 0x1a, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 2385 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 2386 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 2387 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8a, 2388 0x01, 0xda, 0x41, 0x16, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 2389 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6b, 2390 0x3a, 0x01, 0x2a, 0x22, 0x66, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x66, 2391 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 2392 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 2393 0x2f, 0x2a, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 2394 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 2395 0x56, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x66, 0x65, 0x74, 0x63, 0x68, 0x46, 0x65, 2396 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0xc3, 0x02, 0x0a, 0x1b, 2397 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x65, 2398 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x2e, 0x67, 0x6f, 2399 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 2400 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 2401 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x74, 0x63, 0x68, 0x46, 0x65, 0x61, 0x74, 2402 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 2403 0x1a, 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 2404 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 2405 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x74, 0x63, 2406 0x68, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 2407 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x01, 0xda, 0x41, 0x17, 0x66, 0x65, 0x61, 0x74, 2408 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x2c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6b, 2409 0x65, 0x79, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x3a, 0x01, 0x2a, 0x22, 0x6f, 0x2f, 0x76, 2410 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 2411 0x76, 0x69, 0x65, 0x77, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 2412 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x66, 0x65, 0x61, 0x74, 2413 0x75, 0x72, 0x65, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 2414 0x2a, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x2a, 2415 0x7d, 0x3a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x74, 0x63, 0x68, 2416 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x28, 0x01, 0x30, 2417 0x01, 0x12, 0x8c, 0x02, 0x0a, 0x15, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4e, 0x65, 0x61, 0x72, 2418 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3d, 0x2e, 0x67, 0x6f, 2419 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 2420 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 2421 0x61, 0x72, 0x63, 0x68, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 2422 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 2423 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 2424 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x61, 2425 0x72, 0x63, 0x68, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 2426 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 2427 0x02, 0x6e, 0x3a, 0x01, 0x2a, 0x22, 0x69, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 2428 0x7b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x3d, 0x70, 0x72, 2429 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 2430 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4f, 0x6e, 0x6c, 0x69, 2431 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 2432 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x73, 0x65, 0x61, 0x72, 0x63, 2433 0x68, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 2434 0x12, 0x89, 0x02, 0x0a, 0x16, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 2435 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x3e, 0x2e, 0x67, 0x6f, 2436 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 2437 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 2438 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 2439 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x67, 0x6f, 2440 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 2441 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 2442 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x57, 2443 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x82, 0xd3, 2444 0xe4, 0x93, 0x02, 0x64, 0x3a, 0x01, 0x2a, 0x22, 0x5f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 2445 0x31, 0x2f, 0x7b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x3d, 2446 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 2447 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4f, 0x6e, 2448 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x66, 0x65, 0x61, 2449 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x64, 0x69, 0x72, 2450 0x65, 0x63, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x98, 0x02, 0x0a, 2451 0x18, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x63, 2452 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 2453 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 2454 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 2455 0x72, 0x61, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 2456 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x6f, 2457 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 2458 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 2459 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 2460 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77, 2461 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x3a, 0x01, 0x2a, 0x22, 0x6c, 0x2f, 0x76, 0x31, 0x62, 0x65, 2462 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x76, 0x69, 0x65, 2463 0x77, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 2464 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 2465 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x66, 2466 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x56, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x67, 2467 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x63, 0x63, 0x65, 2468 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0x4d, 0xca, 0x41, 0x19, 0x61, 0x69, 0x70, 0x6c, 2469 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 2470 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 2471 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 2472 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 2473 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0xf5, 0x01, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 2474 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 2475 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x1e, 2476 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 2477 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 2478 0x5a, 0x43, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 2479 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 2480 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x69, 0x70, 0x6c, 2481 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 2482 0x6f, 0x72, 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 2483 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 2484 0x56, 0x31, 0x42, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 2485 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 2486 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, 2487 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x41, 0x49, 0x50, 0x6c, 0x61, 2488 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 2489 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 2490 } 2491 2492 var ( 2493 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescOnce sync.Once 2494 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescData = file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDesc 2495 ) 2496 2497 func file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescGZIP() []byte { 2498 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescOnce.Do(func() { 2499 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescData) 2500 }) 2501 return file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDescData 2502 } 2503 2504 var file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_enumTypes = make([]protoimpl.EnumInfo, 3) 2505 var file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes = make([]protoimpl.MessageInfo, 25) 2506 var file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_goTypes = []any{ 2507 (FeatureViewDataFormat)(0), // 0: google.cloud.aiplatform.v1beta1.FeatureViewDataFormat 2508 (FetchFeatureValuesRequest_Format)(0), // 1: google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.Format 2509 (NearestNeighborQuery_NumericFilter_Operator)(0), // 2: google.cloud.aiplatform.v1beta1.NearestNeighborQuery.NumericFilter.Operator 2510 (*FeatureViewDataKey)(nil), // 3: google.cloud.aiplatform.v1beta1.FeatureViewDataKey 2511 (*FetchFeatureValuesRequest)(nil), // 4: google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest 2512 (*FetchFeatureValuesResponse)(nil), // 5: google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse 2513 (*StreamingFetchFeatureValuesRequest)(nil), // 6: google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesRequest 2514 (*StreamingFetchFeatureValuesResponse)(nil), // 7: google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesResponse 2515 (*NearestNeighborQuery)(nil), // 8: google.cloud.aiplatform.v1beta1.NearestNeighborQuery 2516 (*SearchNearestEntitiesRequest)(nil), // 9: google.cloud.aiplatform.v1beta1.SearchNearestEntitiesRequest 2517 (*NearestNeighbors)(nil), // 10: google.cloud.aiplatform.v1beta1.NearestNeighbors 2518 (*SearchNearestEntitiesResponse)(nil), // 11: google.cloud.aiplatform.v1beta1.SearchNearestEntitiesResponse 2519 (*FeatureViewDirectWriteRequest)(nil), // 12: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest 2520 (*FeatureViewDirectWriteResponse)(nil), // 13: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse 2521 (*GenerateFetchAccessTokenRequest)(nil), // 14: google.cloud.aiplatform.v1beta1.GenerateFetchAccessTokenRequest 2522 (*GenerateFetchAccessTokenResponse)(nil), // 15: google.cloud.aiplatform.v1beta1.GenerateFetchAccessTokenResponse 2523 (*FeatureViewDataKey_CompositeKey)(nil), // 16: google.cloud.aiplatform.v1beta1.FeatureViewDataKey.CompositeKey 2524 (*FetchFeatureValuesResponse_FeatureNameValuePairList)(nil), // 17: google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse.FeatureNameValuePairList 2525 (*FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair)(nil), // 18: google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse.FeatureNameValuePairList.FeatureNameValuePair 2526 (*NearestNeighborQuery_Embedding)(nil), // 19: google.cloud.aiplatform.v1beta1.NearestNeighborQuery.Embedding 2527 (*NearestNeighborQuery_StringFilter)(nil), // 20: google.cloud.aiplatform.v1beta1.NearestNeighborQuery.StringFilter 2528 (*NearestNeighborQuery_NumericFilter)(nil), // 21: google.cloud.aiplatform.v1beta1.NearestNeighborQuery.NumericFilter 2529 (*NearestNeighborQuery_Parameters)(nil), // 22: google.cloud.aiplatform.v1beta1.NearestNeighborQuery.Parameters 2530 (*NearestNeighbors_Neighbor)(nil), // 23: google.cloud.aiplatform.v1beta1.NearestNeighbors.Neighbor 2531 (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues)(nil), // 24: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues 2532 (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature)(nil), // 25: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues.Feature 2533 (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_FeatureValueAndTimestamp)(nil), // 26: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues.Feature.FeatureValueAndTimestamp 2534 (*FeatureViewDirectWriteResponse_WriteResponse)(nil), // 27: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse.WriteResponse 2535 (*structpb.Struct)(nil), // 28: google.protobuf.Struct 2536 (*status.Status)(nil), // 29: google.rpc.Status 2537 (*timestamppb.Timestamp)(nil), // 30: google.protobuf.Timestamp 2538 (*FeatureValue)(nil), // 31: google.cloud.aiplatform.v1beta1.FeatureValue 2539 } 2540 var file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_depIdxs = []int32{ 2541 16, // 0: google.cloud.aiplatform.v1beta1.FeatureViewDataKey.composite_key:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDataKey.CompositeKey 2542 3, // 1: google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.data_key:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDataKey 2543 0, // 2: google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.data_format:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDataFormat 2544 1, // 3: google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.format:type_name -> google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.Format 2545 17, // 4: google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse.key_values:type_name -> google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse.FeatureNameValuePairList 2546 28, // 5: google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse.proto_struct:type_name -> google.protobuf.Struct 2547 3, // 6: google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse.data_key:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDataKey 2548 3, // 7: google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesRequest.data_keys:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDataKey 2549 0, // 8: google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesRequest.data_format:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDataFormat 2550 29, // 9: google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesResponse.status:type_name -> google.rpc.Status 2551 5, // 10: google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesResponse.data:type_name -> google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse 2552 3, // 11: google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesResponse.data_keys_with_error:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDataKey 2553 19, // 12: google.cloud.aiplatform.v1beta1.NearestNeighborQuery.embedding:type_name -> google.cloud.aiplatform.v1beta1.NearestNeighborQuery.Embedding 2554 20, // 13: google.cloud.aiplatform.v1beta1.NearestNeighborQuery.string_filters:type_name -> google.cloud.aiplatform.v1beta1.NearestNeighborQuery.StringFilter 2555 21, // 14: google.cloud.aiplatform.v1beta1.NearestNeighborQuery.numeric_filters:type_name -> google.cloud.aiplatform.v1beta1.NearestNeighborQuery.NumericFilter 2556 22, // 15: google.cloud.aiplatform.v1beta1.NearestNeighborQuery.parameters:type_name -> google.cloud.aiplatform.v1beta1.NearestNeighborQuery.Parameters 2557 8, // 16: google.cloud.aiplatform.v1beta1.SearchNearestEntitiesRequest.query:type_name -> google.cloud.aiplatform.v1beta1.NearestNeighborQuery 2558 23, // 17: google.cloud.aiplatform.v1beta1.NearestNeighbors.neighbors:type_name -> google.cloud.aiplatform.v1beta1.NearestNeighbors.Neighbor 2559 10, // 18: google.cloud.aiplatform.v1beta1.SearchNearestEntitiesResponse.nearest_neighbors:type_name -> google.cloud.aiplatform.v1beta1.NearestNeighbors 2560 24, // 19: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.data_key_and_feature_values:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues 2561 29, // 20: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse.status:type_name -> google.rpc.Status 2562 27, // 21: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse.write_responses:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse.WriteResponse 2563 30, // 22: google.cloud.aiplatform.v1beta1.GenerateFetchAccessTokenResponse.expire_time:type_name -> google.protobuf.Timestamp 2564 18, // 23: google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse.FeatureNameValuePairList.features:type_name -> google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse.FeatureNameValuePairList.FeatureNameValuePair 2565 31, // 24: google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse.FeatureNameValuePairList.FeatureNameValuePair.value:type_name -> google.cloud.aiplatform.v1beta1.FeatureValue 2566 2, // 25: google.cloud.aiplatform.v1beta1.NearestNeighborQuery.NumericFilter.op:type_name -> google.cloud.aiplatform.v1beta1.NearestNeighborQuery.NumericFilter.Operator 2567 5, // 26: google.cloud.aiplatform.v1beta1.NearestNeighbors.Neighbor.entity_key_values:type_name -> google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse 2568 3, // 27: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues.data_key:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDataKey 2569 25, // 28: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues.features:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues.Feature 2570 31, // 29: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues.Feature.value:type_name -> google.cloud.aiplatform.v1beta1.FeatureValue 2571 26, // 30: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues.Feature.value_and_timestamp:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues.Feature.FeatureValueAndTimestamp 2572 31, // 31: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues.Feature.FeatureValueAndTimestamp.value:type_name -> google.cloud.aiplatform.v1beta1.FeatureValue 2573 30, // 32: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest.DataKeyAndFeatureValues.Feature.FeatureValueAndTimestamp.timestamp:type_name -> google.protobuf.Timestamp 2574 3, // 33: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse.WriteResponse.data_key:type_name -> google.cloud.aiplatform.v1beta1.FeatureViewDataKey 2575 30, // 34: google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse.WriteResponse.online_store_write_time:type_name -> google.protobuf.Timestamp 2576 4, // 35: google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.FetchFeatureValues:input_type -> google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest 2577 6, // 36: google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.StreamingFetchFeatureValues:input_type -> google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesRequest 2578 9, // 37: google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.SearchNearestEntities:input_type -> google.cloud.aiplatform.v1beta1.SearchNearestEntitiesRequest 2579 12, // 38: google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.FeatureViewDirectWrite:input_type -> google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteRequest 2580 14, // 39: google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.GenerateFetchAccessToken:input_type -> google.cloud.aiplatform.v1beta1.GenerateFetchAccessTokenRequest 2581 5, // 40: google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.FetchFeatureValues:output_type -> google.cloud.aiplatform.v1beta1.FetchFeatureValuesResponse 2582 7, // 41: google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.StreamingFetchFeatureValues:output_type -> google.cloud.aiplatform.v1beta1.StreamingFetchFeatureValuesResponse 2583 11, // 42: google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.SearchNearestEntities:output_type -> google.cloud.aiplatform.v1beta1.SearchNearestEntitiesResponse 2584 13, // 43: google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.FeatureViewDirectWrite:output_type -> google.cloud.aiplatform.v1beta1.FeatureViewDirectWriteResponse 2585 15, // 44: google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.GenerateFetchAccessToken:output_type -> google.cloud.aiplatform.v1beta1.GenerateFetchAccessTokenResponse 2586 40, // [40:45] is the sub-list for method output_type 2587 35, // [35:40] is the sub-list for method input_type 2588 35, // [35:35] is the sub-list for extension type_name 2589 35, // [35:35] is the sub-list for extension extendee 2590 0, // [0:35] is the sub-list for field type_name 2591 } 2592 2593 func init() { file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_init() } 2594 func file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_init() { 2595 if File_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto != nil { 2596 return 2597 } 2598 file_google_cloud_aiplatform_v1beta1_featurestore_online_service_proto_init() 2599 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[0].OneofWrappers = []any{ 2600 (*FeatureViewDataKey_Key)(nil), 2601 (*FeatureViewDataKey_CompositeKey_)(nil), 2602 } 2603 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[1].OneofWrappers = []any{ 2604 (*FetchFeatureValuesRequest_Id)(nil), 2605 } 2606 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[2].OneofWrappers = []any{ 2607 (*FetchFeatureValuesResponse_KeyValues)(nil), 2608 (*FetchFeatureValuesResponse_ProtoStruct)(nil), 2609 } 2610 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[5].OneofWrappers = []any{ 2611 (*NearestNeighborQuery_EntityId)(nil), 2612 (*NearestNeighborQuery_Embedding_)(nil), 2613 } 2614 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[15].OneofWrappers = []any{ 2615 (*FetchFeatureValuesResponse_FeatureNameValuePairList_FeatureNameValuePair_Value)(nil), 2616 } 2617 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[18].OneofWrappers = []any{ 2618 (*NearestNeighborQuery_NumericFilter_ValueInt)(nil), 2619 (*NearestNeighborQuery_NumericFilter_ValueFloat)(nil), 2620 (*NearestNeighborQuery_NumericFilter_ValueDouble)(nil), 2621 } 2622 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes[22].OneofWrappers = []any{ 2623 (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_Value)(nil), 2624 (*FeatureViewDirectWriteRequest_DataKeyAndFeatureValues_Feature_ValueAndTimestamp)(nil), 2625 } 2626 type x struct{} 2627 out := protoimpl.TypeBuilder{ 2628 File: protoimpl.DescBuilder{ 2629 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 2630 RawDescriptor: file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDesc, 2631 NumEnums: 3, 2632 NumMessages: 25, 2633 NumExtensions: 0, 2634 NumServices: 1, 2635 }, 2636 GoTypes: file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_goTypes, 2637 DependencyIndexes: file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_depIdxs, 2638 EnumInfos: file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_enumTypes, 2639 MessageInfos: file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_msgTypes, 2640 }.Build() 2641 File_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto = out.File 2642 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_rawDesc = nil 2643 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_goTypes = nil 2644 file_google_cloud_aiplatform_v1beta1_feature_online_store_service_proto_depIdxs = nil 2645 }