1 // Code generated by protoc-gen-go. DO NOT EDIT.
2 // source: google/datastore/v1/query.proto
6 import proto "github.com/golang/protobuf/proto"
9 import _ "google.golang.org/genproto/googleapis/api/annotations"
10 import google_protobuf3 "github.com/golang/protobuf/ptypes/wrappers"
11 import _ "google.golang.org/genproto/googleapis/type/latlng"
13 // Reference imports to suppress errors if they are not otherwise used.
18 // Specifies what data the 'entity' field contains.
19 // A `ResultType` is either implied (for example, in `LookupResponse.missing`
20 // from `datastore.proto`, it is always `KEY_ONLY`) or specified by context
21 // (for example, in message `QueryResultBatch`, field `entity_result_type`
22 // specifies a `ResultType` for all the values in field `entity_results`).
23 type EntityResult_ResultType int32
26 // Unspecified. This value is never used.
27 EntityResult_RESULT_TYPE_UNSPECIFIED EntityResult_ResultType = 0
28 // The key and properties.
29 EntityResult_FULL EntityResult_ResultType = 1
30 // A projected subset of properties. The entity may have no key.
31 EntityResult_PROJECTION EntityResult_ResultType = 2
33 EntityResult_KEY_ONLY EntityResult_ResultType = 3
36 var EntityResult_ResultType_name = map[int32]string{
37 0: "RESULT_TYPE_UNSPECIFIED",
42 var EntityResult_ResultType_value = map[string]int32{
43 "RESULT_TYPE_UNSPECIFIED": 0,
49 func (x EntityResult_ResultType) String() string {
50 return proto.EnumName(EntityResult_ResultType_name, int32(x))
52 func (EntityResult_ResultType) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} }
54 // The sort direction.
55 type PropertyOrder_Direction int32
58 // Unspecified. This value must not be used.
59 PropertyOrder_DIRECTION_UNSPECIFIED PropertyOrder_Direction = 0
61 PropertyOrder_ASCENDING PropertyOrder_Direction = 1
63 PropertyOrder_DESCENDING PropertyOrder_Direction = 2
66 var PropertyOrder_Direction_name = map[int32]string{
67 0: "DIRECTION_UNSPECIFIED",
71 var PropertyOrder_Direction_value = map[string]int32{
72 "DIRECTION_UNSPECIFIED": 0,
77 func (x PropertyOrder_Direction) String() string {
78 return proto.EnumName(PropertyOrder_Direction_name, int32(x))
80 func (PropertyOrder_Direction) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{5, 0} }
82 // A composite filter operator.
83 type CompositeFilter_Operator int32
86 // Unspecified. This value must not be used.
87 CompositeFilter_OPERATOR_UNSPECIFIED CompositeFilter_Operator = 0
88 // The results are required to satisfy each of the combined filters.
89 CompositeFilter_AND CompositeFilter_Operator = 1
92 var CompositeFilter_Operator_name = map[int32]string{
93 0: "OPERATOR_UNSPECIFIED",
96 var CompositeFilter_Operator_value = map[string]int32{
97 "OPERATOR_UNSPECIFIED": 0,
101 func (x CompositeFilter_Operator) String() string {
102 return proto.EnumName(CompositeFilter_Operator_name, int32(x))
104 func (CompositeFilter_Operator) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{7, 0} }
106 // A property filter operator.
107 type PropertyFilter_Operator int32
110 // Unspecified. This value must not be used.
111 PropertyFilter_OPERATOR_UNSPECIFIED PropertyFilter_Operator = 0
113 PropertyFilter_LESS_THAN PropertyFilter_Operator = 1
114 // Less than or equal.
115 PropertyFilter_LESS_THAN_OR_EQUAL PropertyFilter_Operator = 2
117 PropertyFilter_GREATER_THAN PropertyFilter_Operator = 3
118 // Greater than or equal.
119 PropertyFilter_GREATER_THAN_OR_EQUAL PropertyFilter_Operator = 4
121 PropertyFilter_EQUAL PropertyFilter_Operator = 5
123 PropertyFilter_HAS_ANCESTOR PropertyFilter_Operator = 11
126 var PropertyFilter_Operator_name = map[int32]string{
127 0: "OPERATOR_UNSPECIFIED",
129 2: "LESS_THAN_OR_EQUAL",
131 4: "GREATER_THAN_OR_EQUAL",
135 var PropertyFilter_Operator_value = map[string]int32{
136 "OPERATOR_UNSPECIFIED": 0,
138 "LESS_THAN_OR_EQUAL": 2,
140 "GREATER_THAN_OR_EQUAL": 4,
145 func (x PropertyFilter_Operator) String() string {
146 return proto.EnumName(PropertyFilter_Operator_name, int32(x))
148 func (PropertyFilter_Operator) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{8, 0} }
150 // The possible values for the `more_results` field.
151 type QueryResultBatch_MoreResultsType int32
154 // Unspecified. This value is never used.
155 QueryResultBatch_MORE_RESULTS_TYPE_UNSPECIFIED QueryResultBatch_MoreResultsType = 0
156 // There may be additional batches to fetch from this query.
157 QueryResultBatch_NOT_FINISHED QueryResultBatch_MoreResultsType = 1
158 // The query is finished, but there may be more results after the limit.
159 QueryResultBatch_MORE_RESULTS_AFTER_LIMIT QueryResultBatch_MoreResultsType = 2
160 // The query is finished, but there may be more results after the end
162 QueryResultBatch_MORE_RESULTS_AFTER_CURSOR QueryResultBatch_MoreResultsType = 4
163 // The query is finished, and there are no more results.
164 QueryResultBatch_NO_MORE_RESULTS QueryResultBatch_MoreResultsType = 3
167 var QueryResultBatch_MoreResultsType_name = map[int32]string{
168 0: "MORE_RESULTS_TYPE_UNSPECIFIED",
170 2: "MORE_RESULTS_AFTER_LIMIT",
171 4: "MORE_RESULTS_AFTER_CURSOR",
172 3: "NO_MORE_RESULTS",
174 var QueryResultBatch_MoreResultsType_value = map[string]int32{
175 "MORE_RESULTS_TYPE_UNSPECIFIED": 0,
177 "MORE_RESULTS_AFTER_LIMIT": 2,
178 "MORE_RESULTS_AFTER_CURSOR": 4,
179 "NO_MORE_RESULTS": 3,
182 func (x QueryResultBatch_MoreResultsType) String() string {
183 return proto.EnumName(QueryResultBatch_MoreResultsType_name, int32(x))
185 func (QueryResultBatch_MoreResultsType) EnumDescriptor() ([]byte, []int) {
186 return fileDescriptor2, []int{11, 0}
189 // The result of fetching an entity from Datastore.
190 type EntityResult struct {
191 // The resulting entity.
192 Entity *Entity `protobuf:"bytes,1,opt,name=entity" json:"entity,omitempty"`
193 // The version of the entity, a strictly positive number that monotonically
194 // increases with changes to the entity.
196 // This field is set for [`FULL`][google.datastore.v1.EntityResult.ResultType.FULL] entity
199 // For [missing][google.datastore.v1.LookupResponse.missing] entities in `LookupResponse`, this
200 // is the version of the snapshot that was used to look up the entity, and it
201 // is always set except for eventually consistent reads.
202 Version int64 `protobuf:"varint,4,opt,name=version" json:"version,omitempty"`
203 // A cursor that points to the position after the result entity.
204 // Set only when the `EntityResult` is part of a `QueryResultBatch` message.
205 Cursor []byte `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor,omitempty"`
208 func (m *EntityResult) Reset() { *m = EntityResult{} }
209 func (m *EntityResult) String() string { return proto.CompactTextString(m) }
210 func (*EntityResult) ProtoMessage() {}
211 func (*EntityResult) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} }
213 func (m *EntityResult) GetEntity() *Entity {
220 func (m *EntityResult) GetVersion() int64 {
227 func (m *EntityResult) GetCursor() []byte {
234 // A query for entities.
236 // The projection to return. Defaults to returning all properties.
237 Projection []*Projection `protobuf:"bytes,2,rep,name=projection" json:"projection,omitempty"`
238 // The kinds to query (if empty, returns entities of all kinds).
239 // Currently at most 1 kind may be specified.
240 Kind []*KindExpression `protobuf:"bytes,3,rep,name=kind" json:"kind,omitempty"`
241 // The filter to apply.
242 Filter *Filter `protobuf:"bytes,4,opt,name=filter" json:"filter,omitempty"`
243 // The order to apply to the query results (if empty, order is unspecified).
244 Order []*PropertyOrder `protobuf:"bytes,5,rep,name=order" json:"order,omitempty"`
245 // The properties to make distinct. The query results will contain the first
246 // result for each distinct combination of values for the given properties
247 // (if empty, all results are returned).
248 DistinctOn []*PropertyReference `protobuf:"bytes,6,rep,name=distinct_on,json=distinctOn" json:"distinct_on,omitempty"`
249 // A starting point for the query results. Query cursors are
250 // returned in query result batches and
251 // [can only be used to continue the same query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets).
252 StartCursor []byte `protobuf:"bytes,7,opt,name=start_cursor,json=startCursor,proto3" json:"start_cursor,omitempty"`
253 // An ending point for the query results. Query cursors are
254 // returned in query result batches and
255 // [can only be used to limit the same query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets).
256 EndCursor []byte `protobuf:"bytes,8,opt,name=end_cursor,json=endCursor,proto3" json:"end_cursor,omitempty"`
257 // The number of results to skip. Applies before limit, but after all other
258 // constraints. Optional. Must be >= 0 if specified.
259 Offset int32 `protobuf:"varint,10,opt,name=offset" json:"offset,omitempty"`
260 // The maximum number of results to return. Applies after all other
261 // constraints. Optional.
262 // Unspecified is interpreted as no limit.
263 // Must be >= 0 if specified.
264 Limit *google_protobuf3.Int32Value `protobuf:"bytes,12,opt,name=limit" json:"limit,omitempty"`
267 func (m *Query) Reset() { *m = Query{} }
268 func (m *Query) String() string { return proto.CompactTextString(m) }
269 func (*Query) ProtoMessage() {}
270 func (*Query) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} }
272 func (m *Query) GetProjection() []*Projection {
279 func (m *Query) GetKind() []*KindExpression {
286 func (m *Query) GetFilter() *Filter {
293 func (m *Query) GetOrder() []*PropertyOrder {
300 func (m *Query) GetDistinctOn() []*PropertyReference {
307 func (m *Query) GetStartCursor() []byte {
314 func (m *Query) GetEndCursor() []byte {
321 func (m *Query) GetOffset() int32 {
328 func (m *Query) GetLimit() *google_protobuf3.Int32Value {
335 // A representation of a kind.
336 type KindExpression struct {
337 // The name of the kind.
338 Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
341 func (m *KindExpression) Reset() { *m = KindExpression{} }
342 func (m *KindExpression) String() string { return proto.CompactTextString(m) }
343 func (*KindExpression) ProtoMessage() {}
344 func (*KindExpression) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} }
346 func (m *KindExpression) GetName() string {
353 // A reference to a property relative to the kind expressions.
354 type PropertyReference struct {
355 // The name of the property.
356 // If name includes "."s, it may be interpreted as a property name path.
357 Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
360 func (m *PropertyReference) Reset() { *m = PropertyReference{} }
361 func (m *PropertyReference) String() string { return proto.CompactTextString(m) }
362 func (*PropertyReference) ProtoMessage() {}
363 func (*PropertyReference) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} }
365 func (m *PropertyReference) GetName() string {
372 // A representation of a property in a projection.
373 type Projection struct {
374 // The property to project.
375 Property *PropertyReference `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"`
378 func (m *Projection) Reset() { *m = Projection{} }
379 func (m *Projection) String() string { return proto.CompactTextString(m) }
380 func (*Projection) ProtoMessage() {}
381 func (*Projection) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} }
383 func (m *Projection) GetProperty() *PropertyReference {
390 // The desired order for a specific property.
391 type PropertyOrder struct {
392 // The property to order by.
393 Property *PropertyReference `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"`
394 // The direction to order by. Defaults to `ASCENDING`.
395 Direction PropertyOrder_Direction `protobuf:"varint,2,opt,name=direction,enum=google.datastore.v1.PropertyOrder_Direction" json:"direction,omitempty"`
398 func (m *PropertyOrder) Reset() { *m = PropertyOrder{} }
399 func (m *PropertyOrder) String() string { return proto.CompactTextString(m) }
400 func (*PropertyOrder) ProtoMessage() {}
401 func (*PropertyOrder) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} }
403 func (m *PropertyOrder) GetProperty() *PropertyReference {
410 func (m *PropertyOrder) GetDirection() PropertyOrder_Direction {
414 return PropertyOrder_DIRECTION_UNSPECIFIED
417 // A holder for any type of filter.
419 // The type of filter.
421 // Types that are valid to be assigned to FilterType:
422 // *Filter_CompositeFilter
423 // *Filter_PropertyFilter
424 FilterType isFilter_FilterType `protobuf_oneof:"filter_type"`
427 func (m *Filter) Reset() { *m = Filter{} }
428 func (m *Filter) String() string { return proto.CompactTextString(m) }
429 func (*Filter) ProtoMessage() {}
430 func (*Filter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} }
432 type isFilter_FilterType interface {
433 isFilter_FilterType()
436 type Filter_CompositeFilter struct {
437 CompositeFilter *CompositeFilter `protobuf:"bytes,1,opt,name=composite_filter,json=compositeFilter,oneof"`
439 type Filter_PropertyFilter struct {
440 PropertyFilter *PropertyFilter `protobuf:"bytes,2,opt,name=property_filter,json=propertyFilter,oneof"`
443 func (*Filter_CompositeFilter) isFilter_FilterType() {}
444 func (*Filter_PropertyFilter) isFilter_FilterType() {}
446 func (m *Filter) GetFilterType() isFilter_FilterType {
453 func (m *Filter) GetCompositeFilter() *CompositeFilter {
454 if x, ok := m.GetFilterType().(*Filter_CompositeFilter); ok {
455 return x.CompositeFilter
460 func (m *Filter) GetPropertyFilter() *PropertyFilter {
461 if x, ok := m.GetFilterType().(*Filter_PropertyFilter); ok {
462 return x.PropertyFilter
467 // XXX_OneofFuncs is for the internal use of the proto package.
468 func (*Filter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
469 return _Filter_OneofMarshaler, _Filter_OneofUnmarshaler, _Filter_OneofSizer, []interface{}{
470 (*Filter_CompositeFilter)(nil),
471 (*Filter_PropertyFilter)(nil),
475 func _Filter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
478 switch x := m.FilterType.(type) {
479 case *Filter_CompositeFilter:
480 b.EncodeVarint(1<<3 | proto.WireBytes)
481 if err := b.EncodeMessage(x.CompositeFilter); err != nil {
484 case *Filter_PropertyFilter:
485 b.EncodeVarint(2<<3 | proto.WireBytes)
486 if err := b.EncodeMessage(x.PropertyFilter); err != nil {
491 return fmt.Errorf("Filter.FilterType has unexpected type %T", x)
496 func _Filter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
499 case 1: // filter_type.composite_filter
500 if wire != proto.WireBytes {
501 return true, proto.ErrInternalBadWireType
503 msg := new(CompositeFilter)
504 err := b.DecodeMessage(msg)
505 m.FilterType = &Filter_CompositeFilter{msg}
507 case 2: // filter_type.property_filter
508 if wire != proto.WireBytes {
509 return true, proto.ErrInternalBadWireType
511 msg := new(PropertyFilter)
512 err := b.DecodeMessage(msg)
513 m.FilterType = &Filter_PropertyFilter{msg}
520 func _Filter_OneofSizer(msg proto.Message) (n int) {
523 switch x := m.FilterType.(type) {
524 case *Filter_CompositeFilter:
525 s := proto.Size(x.CompositeFilter)
526 n += proto.SizeVarint(1<<3 | proto.WireBytes)
527 n += proto.SizeVarint(uint64(s))
529 case *Filter_PropertyFilter:
530 s := proto.Size(x.PropertyFilter)
531 n += proto.SizeVarint(2<<3 | proto.WireBytes)
532 n += proto.SizeVarint(uint64(s))
536 panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
541 // A filter that merges multiple other filters using the given operator.
542 type CompositeFilter struct {
543 // The operator for combining multiple filters.
544 Op CompositeFilter_Operator `protobuf:"varint,1,opt,name=op,enum=google.datastore.v1.CompositeFilter_Operator" json:"op,omitempty"`
545 // The list of filters to combine.
546 // Must contain at least one filter.
547 Filters []*Filter `protobuf:"bytes,2,rep,name=filters" json:"filters,omitempty"`
550 func (m *CompositeFilter) Reset() { *m = CompositeFilter{} }
551 func (m *CompositeFilter) String() string { return proto.CompactTextString(m) }
552 func (*CompositeFilter) ProtoMessage() {}
553 func (*CompositeFilter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} }
555 func (m *CompositeFilter) GetOp() CompositeFilter_Operator {
559 return CompositeFilter_OPERATOR_UNSPECIFIED
562 func (m *CompositeFilter) GetFilters() []*Filter {
569 // A filter on a specific property.
570 type PropertyFilter struct {
571 // The property to filter by.
572 Property *PropertyReference `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"`
573 // The operator to filter by.
574 Op PropertyFilter_Operator `protobuf:"varint,2,opt,name=op,enum=google.datastore.v1.PropertyFilter_Operator" json:"op,omitempty"`
575 // The value to compare the property to.
576 Value *Value `protobuf:"bytes,3,opt,name=value" json:"value,omitempty"`
579 func (m *PropertyFilter) Reset() { *m = PropertyFilter{} }
580 func (m *PropertyFilter) String() string { return proto.CompactTextString(m) }
581 func (*PropertyFilter) ProtoMessage() {}
582 func (*PropertyFilter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} }
584 func (m *PropertyFilter) GetProperty() *PropertyReference {
591 func (m *PropertyFilter) GetOp() PropertyFilter_Operator {
595 return PropertyFilter_OPERATOR_UNSPECIFIED
598 func (m *PropertyFilter) GetValue() *Value {
605 // A [GQL query](https://cloud.google.com/datastore/docs/apis/gql/gql_reference).
606 type GqlQuery struct {
607 // A string of the format described
608 // [here](https://cloud.google.com/datastore/docs/apis/gql/gql_reference).
609 QueryString string `protobuf:"bytes,1,opt,name=query_string,json=queryString" json:"query_string,omitempty"`
610 // When false, the query string must not contain any literals and instead must
611 // bind all values. For example,
612 // `SELECT * FROM Kind WHERE a = 'string literal'` is not allowed, while
613 // `SELECT * FROM Kind WHERE a = @value` is.
614 AllowLiterals bool `protobuf:"varint,2,opt,name=allow_literals,json=allowLiterals" json:"allow_literals,omitempty"`
615 // For each non-reserved named binding site in the query string, there must be
616 // a named parameter with that name, but not necessarily the inverse.
618 // Key must match regex `[A-Za-z_$][A-Za-z_$0-9]*`, must not match regex
619 // `__.*__`, and must not be `""`.
620 NamedBindings map[string]*GqlQueryParameter `protobuf:"bytes,5,rep,name=named_bindings,json=namedBindings" json:"named_bindings,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
621 // Numbered binding site @1 references the first numbered parameter,
622 // effectively using 1-based indexing, rather than the usual 0.
624 // For each binding site numbered i in `query_string`, there must be an i-th
625 // numbered parameter. The inverse must also be true.
626 PositionalBindings []*GqlQueryParameter `protobuf:"bytes,4,rep,name=positional_bindings,json=positionalBindings" json:"positional_bindings,omitempty"`
629 func (m *GqlQuery) Reset() { *m = GqlQuery{} }
630 func (m *GqlQuery) String() string { return proto.CompactTextString(m) }
631 func (*GqlQuery) ProtoMessage() {}
632 func (*GqlQuery) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{9} }
634 func (m *GqlQuery) GetQueryString() string {
641 func (m *GqlQuery) GetAllowLiterals() bool {
643 return m.AllowLiterals
648 func (m *GqlQuery) GetNamedBindings() map[string]*GqlQueryParameter {
650 return m.NamedBindings
655 func (m *GqlQuery) GetPositionalBindings() []*GqlQueryParameter {
657 return m.PositionalBindings
662 // A binding parameter for a GQL query.
663 type GqlQueryParameter struct {
664 // The type of parameter.
666 // Types that are valid to be assigned to ParameterType:
667 // *GqlQueryParameter_Value
668 // *GqlQueryParameter_Cursor
669 ParameterType isGqlQueryParameter_ParameterType `protobuf_oneof:"parameter_type"`
672 func (m *GqlQueryParameter) Reset() { *m = GqlQueryParameter{} }
673 func (m *GqlQueryParameter) String() string { return proto.CompactTextString(m) }
674 func (*GqlQueryParameter) ProtoMessage() {}
675 func (*GqlQueryParameter) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{10} }
677 type isGqlQueryParameter_ParameterType interface {
678 isGqlQueryParameter_ParameterType()
681 type GqlQueryParameter_Value struct {
682 Value *Value `protobuf:"bytes,2,opt,name=value,oneof"`
684 type GqlQueryParameter_Cursor struct {
685 Cursor []byte `protobuf:"bytes,3,opt,name=cursor,proto3,oneof"`
688 func (*GqlQueryParameter_Value) isGqlQueryParameter_ParameterType() {}
689 func (*GqlQueryParameter_Cursor) isGqlQueryParameter_ParameterType() {}
691 func (m *GqlQueryParameter) GetParameterType() isGqlQueryParameter_ParameterType {
693 return m.ParameterType
698 func (m *GqlQueryParameter) GetValue() *Value {
699 if x, ok := m.GetParameterType().(*GqlQueryParameter_Value); ok {
705 func (m *GqlQueryParameter) GetCursor() []byte {
706 if x, ok := m.GetParameterType().(*GqlQueryParameter_Cursor); ok {
712 // XXX_OneofFuncs is for the internal use of the proto package.
713 func (*GqlQueryParameter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
714 return _GqlQueryParameter_OneofMarshaler, _GqlQueryParameter_OneofUnmarshaler, _GqlQueryParameter_OneofSizer, []interface{}{
715 (*GqlQueryParameter_Value)(nil),
716 (*GqlQueryParameter_Cursor)(nil),
720 func _GqlQueryParameter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
721 m := msg.(*GqlQueryParameter)
723 switch x := m.ParameterType.(type) {
724 case *GqlQueryParameter_Value:
725 b.EncodeVarint(2<<3 | proto.WireBytes)
726 if err := b.EncodeMessage(x.Value); err != nil {
729 case *GqlQueryParameter_Cursor:
730 b.EncodeVarint(3<<3 | proto.WireBytes)
731 b.EncodeRawBytes(x.Cursor)
734 return fmt.Errorf("GqlQueryParameter.ParameterType has unexpected type %T", x)
739 func _GqlQueryParameter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
740 m := msg.(*GqlQueryParameter)
742 case 2: // parameter_type.value
743 if wire != proto.WireBytes {
744 return true, proto.ErrInternalBadWireType
747 err := b.DecodeMessage(msg)
748 m.ParameterType = &GqlQueryParameter_Value{msg}
750 case 3: // parameter_type.cursor
751 if wire != proto.WireBytes {
752 return true, proto.ErrInternalBadWireType
754 x, err := b.DecodeRawBytes(true)
755 m.ParameterType = &GqlQueryParameter_Cursor{x}
762 func _GqlQueryParameter_OneofSizer(msg proto.Message) (n int) {
763 m := msg.(*GqlQueryParameter)
765 switch x := m.ParameterType.(type) {
766 case *GqlQueryParameter_Value:
767 s := proto.Size(x.Value)
768 n += proto.SizeVarint(2<<3 | proto.WireBytes)
769 n += proto.SizeVarint(uint64(s))
771 case *GqlQueryParameter_Cursor:
772 n += proto.SizeVarint(3<<3 | proto.WireBytes)
773 n += proto.SizeVarint(uint64(len(x.Cursor)))
777 panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
782 // A batch of results produced by a query.
783 type QueryResultBatch struct {
784 // The number of results skipped, typically because of an offset.
785 SkippedResults int32 `protobuf:"varint,6,opt,name=skipped_results,json=skippedResults" json:"skipped_results,omitempty"`
786 // A cursor that points to the position after the last skipped result.
787 // Will be set when `skipped_results` != 0.
788 SkippedCursor []byte `protobuf:"bytes,3,opt,name=skipped_cursor,json=skippedCursor,proto3" json:"skipped_cursor,omitempty"`
789 // The result type for every entity in `entity_results`.
790 EntityResultType EntityResult_ResultType `protobuf:"varint,1,opt,name=entity_result_type,json=entityResultType,enum=google.datastore.v1.EntityResult_ResultType" json:"entity_result_type,omitempty"`
791 // The results for this batch.
792 EntityResults []*EntityResult `protobuf:"bytes,2,rep,name=entity_results,json=entityResults" json:"entity_results,omitempty"`
793 // A cursor that points to the position after the last result in the batch.
794 EndCursor []byte `protobuf:"bytes,4,opt,name=end_cursor,json=endCursor,proto3" json:"end_cursor,omitempty"`
795 // The state of the query after the current batch.
796 MoreResults QueryResultBatch_MoreResultsType `protobuf:"varint,5,opt,name=more_results,json=moreResults,enum=google.datastore.v1.QueryResultBatch_MoreResultsType" json:"more_results,omitempty"`
797 // The version number of the snapshot this batch was returned from.
798 // This applies to the range of results from the query's `start_cursor` (or
799 // the beginning of the query if no cursor was given) to this batch's
800 // `end_cursor` (not the query's `end_cursor`).
802 // In a single transaction, subsequent query result batches for the same query
803 // can have a greater snapshot version number. Each batch's snapshot version
804 // is valid for all preceding batches.
805 // The value will be zero for eventually consistent queries.
806 SnapshotVersion int64 `protobuf:"varint,7,opt,name=snapshot_version,json=snapshotVersion" json:"snapshot_version,omitempty"`
809 func (m *QueryResultBatch) Reset() { *m = QueryResultBatch{} }
810 func (m *QueryResultBatch) String() string { return proto.CompactTextString(m) }
811 func (*QueryResultBatch) ProtoMessage() {}
812 func (*QueryResultBatch) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{11} }
814 func (m *QueryResultBatch) GetSkippedResults() int32 {
816 return m.SkippedResults
821 func (m *QueryResultBatch) GetSkippedCursor() []byte {
823 return m.SkippedCursor
828 func (m *QueryResultBatch) GetEntityResultType() EntityResult_ResultType {
830 return m.EntityResultType
832 return EntityResult_RESULT_TYPE_UNSPECIFIED
835 func (m *QueryResultBatch) GetEntityResults() []*EntityResult {
837 return m.EntityResults
842 func (m *QueryResultBatch) GetEndCursor() []byte {
849 func (m *QueryResultBatch) GetMoreResults() QueryResultBatch_MoreResultsType {
853 return QueryResultBatch_MORE_RESULTS_TYPE_UNSPECIFIED
856 func (m *QueryResultBatch) GetSnapshotVersion() int64 {
858 return m.SnapshotVersion
864 proto.RegisterType((*EntityResult)(nil), "google.datastore.v1.EntityResult")
865 proto.RegisterType((*Query)(nil), "google.datastore.v1.Query")
866 proto.RegisterType((*KindExpression)(nil), "google.datastore.v1.KindExpression")
867 proto.RegisterType((*PropertyReference)(nil), "google.datastore.v1.PropertyReference")
868 proto.RegisterType((*Projection)(nil), "google.datastore.v1.Projection")
869 proto.RegisterType((*PropertyOrder)(nil), "google.datastore.v1.PropertyOrder")
870 proto.RegisterType((*Filter)(nil), "google.datastore.v1.Filter")
871 proto.RegisterType((*CompositeFilter)(nil), "google.datastore.v1.CompositeFilter")
872 proto.RegisterType((*PropertyFilter)(nil), "google.datastore.v1.PropertyFilter")
873 proto.RegisterType((*GqlQuery)(nil), "google.datastore.v1.GqlQuery")
874 proto.RegisterType((*GqlQueryParameter)(nil), "google.datastore.v1.GqlQueryParameter")
875 proto.RegisterType((*QueryResultBatch)(nil), "google.datastore.v1.QueryResultBatch")
876 proto.RegisterEnum("google.datastore.v1.EntityResult_ResultType", EntityResult_ResultType_name, EntityResult_ResultType_value)
877 proto.RegisterEnum("google.datastore.v1.PropertyOrder_Direction", PropertyOrder_Direction_name, PropertyOrder_Direction_value)
878 proto.RegisterEnum("google.datastore.v1.CompositeFilter_Operator", CompositeFilter_Operator_name, CompositeFilter_Operator_value)
879 proto.RegisterEnum("google.datastore.v1.PropertyFilter_Operator", PropertyFilter_Operator_name, PropertyFilter_Operator_value)
880 proto.RegisterEnum("google.datastore.v1.QueryResultBatch_MoreResultsType", QueryResultBatch_MoreResultsType_name, QueryResultBatch_MoreResultsType_value)
883 func init() { proto.RegisterFile("google/datastore/v1/query.proto", fileDescriptor2) }
885 var fileDescriptor2 = []byte{
886 // 1301 bytes of a gzipped FileDescriptorProto
887 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x92, 0xd3, 0xc6,
888 0x12, 0x5e, 0xc9, 0x3f, 0x6b, 0xb7, 0xff, 0xc4, 0x70, 0x0e, 0x88, 0x05, 0x0e, 0xbb, 0x82, 0x73,
889 0xd8, 0x53, 0x05, 0x36, 0x6b, 0x8a, 0x0a, 0x95, 0x90, 0x4a, 0xf9, 0x47, 0xbb, 0x36, 0x18, 0xcb,
890 0x3b, 0xf6, 0x42, 0xe0, 0x46, 0x25, 0xec, 0x59, 0xa3, 0x20, 0x4b, 0x62, 0xa4, 0x5d, 0xb2, 0x97,
891 0x79, 0x88, 0x54, 0xe5, 0x19, 0xf2, 0x00, 0xb9, 0xc8, 0x03, 0x24, 0x79, 0x88, 0x5c, 0xe7, 0x3a,
892 0x8f, 0x90, 0xd2, 0xcc, 0xc8, 0x7f, 0x6b, 0xcc, 0x5e, 0x70, 0xa7, 0xe9, 0xf9, 0xbe, 0xaf, 0xa7,
893 0x7b, 0x7a, 0x5a, 0x0d, 0xb7, 0xc6, 0x9e, 0x37, 0x76, 0x48, 0x65, 0x64, 0x85, 0x56, 0x10, 0x7a,
894 0x94, 0x54, 0x4e, 0xf7, 0x2a, 0xef, 0x4f, 0x08, 0x3d, 0x2b, 0xfb, 0xd4, 0x0b, 0x3d, 0x74, 0x99,
895 0x03, 0xca, 0x53, 0x40, 0xf9, 0x74, 0x6f, 0xeb, 0x86, 0x60, 0x59, 0xbe, 0x5d, 0xb1, 0x5c, 0xd7,
896 0x0b, 0xad, 0xd0, 0xf6, 0xdc, 0x80, 0x53, 0xb6, 0xb6, 0x57, 0x69, 0x12, 0x37, 0xb4, 0x43, 0x21,
897 0xba, 0xf5, 0x1f, 0x81, 0x60, 0xab, 0x37, 0x27, 0xc7, 0x95, 0x0f, 0xd4, 0xf2, 0x7d, 0x42, 0x63,
898 0x05, 0x55, 0xec, 0x87, 0x67, 0x3e, 0xa9, 0x38, 0x56, 0xe8, 0xb8, 0x63, 0xbe, 0xa3, 0xfd, 0x21,
899 0x41, 0x5e, 0x67, 0x52, 0x98, 0x04, 0x27, 0x4e, 0x88, 0x1e, 0x42, 0x9a, 0x4b, 0xab, 0xd2, 0xb6,
900 0xb4, 0x9b, 0xab, 0x5e, 0x2f, 0xaf, 0x38, 0x70, 0x59, 0x50, 0x04, 0x14, 0xa9, 0xb0, 0x79, 0x4a,
901 0x68, 0x60, 0x7b, 0xae, 0x9a, 0xdc, 0x96, 0x76, 0x13, 0x38, 0x5e, 0xa2, 0x2b, 0x90, 0x1e, 0x9e,
902 0xd0, 0xc0, 0xa3, 0x6a, 0x62, 0x5b, 0xda, 0xcd, 0x63, 0xb1, 0xd2, 0x0e, 0x01, 0xb8, 0xc3, 0xc1,
903 0x99, 0x4f, 0xd0, 0x75, 0xb8, 0x8a, 0xf5, 0xfe, 0x51, 0x67, 0x60, 0x0e, 0x5e, 0xf5, 0x74, 0xf3,
904 0xa8, 0xdb, 0xef, 0xe9, 0x8d, 0xf6, 0x7e, 0x5b, 0x6f, 0x2a, 0x1b, 0x28, 0x03, 0xc9, 0xfd, 0xa3,
905 0x4e, 0x47, 0x91, 0x50, 0x11, 0xa0, 0x87, 0x8d, 0xa7, 0x7a, 0x63, 0xd0, 0x36, 0xba, 0x8a, 0x8c,
906 0xf2, 0x90, 0x79, 0xa6, 0xbf, 0x32, 0x8d, 0x6e, 0xe7, 0x95, 0x92, 0xd0, 0x7e, 0x4b, 0x40, 0xea,
907 0x30, 0xca, 0x34, 0xfa, 0x06, 0xc0, 0xa7, 0xde, 0x77, 0x64, 0x18, 0x65, 0x51, 0x95, 0xb7, 0x13,
908 0xbb, 0xb9, 0xea, 0xad, 0x95, 0x71, 0xf4, 0xa6, 0x30, 0x3c, 0x47, 0x41, 0x5f, 0x40, 0xf2, 0x9d,
909 0xed, 0x8e, 0xd4, 0x04, 0xa3, 0xde, 0x5e, 0x49, 0x7d, 0x66, 0xbb, 0x23, 0xfd, 0x7b, 0x9f, 0x92,
910 0x20, 0x0a, 0x14, 0x33, 0x42, 0x94, 0xbd, 0x63, 0xdb, 0x09, 0x09, 0x65, 0x79, 0xf8, 0x58, 0xf6,
911 0xf6, 0x19, 0x04, 0x0b, 0x28, 0x7a, 0x0c, 0x29, 0x8f, 0x8e, 0x08, 0x55, 0x53, 0xcc, 0x9d, 0xf6,
912 0xb1, 0x93, 0xfa, 0x84, 0x86, 0x67, 0x46, 0x84, 0xc4, 0x9c, 0x80, 0x0e, 0x20, 0x37, 0xb2, 0x83,
913 0xd0, 0x76, 0x87, 0xa1, 0xe9, 0xb9, 0x6a, 0x9a, 0xf1, 0xff, 0xb7, 0x96, 0x8f, 0xc9, 0x31, 0xa1,
914 0xc4, 0x1d, 0x12, 0x0c, 0x31, 0xd5, 0x70, 0xd1, 0x0e, 0xe4, 0x83, 0xd0, 0xa2, 0xa1, 0x29, 0x2e,
915 0x6b, 0x93, 0x5d, 0x56, 0x8e, 0xd9, 0x1a, 0xcc, 0x84, 0x6e, 0x02, 0x10, 0x77, 0x14, 0x03, 0x32,
916 0x0c, 0x90, 0x25, 0xee, 0x48, 0x6c, 0x5f, 0x81, 0xb4, 0x77, 0x7c, 0x1c, 0x90, 0x50, 0x85, 0x6d,
917 0x69, 0x37, 0x85, 0xc5, 0x0a, 0xed, 0x41, 0xca, 0xb1, 0x27, 0x76, 0xa8, 0xe6, 0x17, 0x13, 0x12,
918 0x97, 0x6a, 0xb9, 0xed, 0x86, 0x0f, 0xab, 0x2f, 0x2c, 0xe7, 0x84, 0x60, 0x8e, 0xd4, 0xee, 0x40,
919 0x71, 0x31, 0xb9, 0x08, 0x41, 0xd2, 0xb5, 0x26, 0x84, 0x95, 0x64, 0x16, 0xb3, 0x6f, 0xed, 0x2e,
920 0x5c, 0x3a, 0x17, 0xd3, 0x14, 0x28, 0xcf, 0x01, 0x7b, 0x00, 0xb3, 0x6b, 0x46, 0x75, 0xc8, 0xf8,
921 0x82, 0x26, 0x2a, 0xfc, 0xa2, 0xf9, 0x9a, 0xf2, 0xb4, 0xbf, 0x24, 0x28, 0x2c, 0xdc, 0xc7, 0xe7,
922 0x50, 0x45, 0x4f, 0x21, 0x3b, 0xb2, 0xe9, 0xb4, 0x68, 0xa5, 0xdd, 0x62, 0xf5, 0xde, 0xa7, 0x4b,
923 0xa1, 0xdc, 0x8c, 0x39, 0x78, 0x46, 0xd7, 0x74, 0xc8, 0x4e, 0xed, 0xe8, 0x1a, 0xfc, 0xbb, 0xd9,
924 0xc6, 0xfc, 0xd5, 0x2c, 0xbd, 0xad, 0x02, 0x64, 0x6b, 0xfd, 0x86, 0xde, 0x6d, 0xb6, 0xbb, 0x07,
925 0xfc, 0x81, 0x35, 0xf5, 0xe9, 0x5a, 0xd6, 0x7e, 0x95, 0x20, 0xcd, 0x8b, 0x15, 0x1d, 0x82, 0x32,
926 0xf4, 0x26, 0xbe, 0x17, 0xd8, 0x21, 0x31, 0x45, 0x8d, 0xf3, 0x48, 0xef, 0xac, 0x3c, 0x64, 0x23,
927 0x06, 0x73, 0x7e, 0x6b, 0x03, 0x97, 0x86, 0x8b, 0x26, 0xd4, 0x85, 0x52, 0x1c, 0x7c, 0xac, 0x28,
928 0x33, 0xc5, 0xdb, 0x6b, 0xc3, 0x9e, 0x0a, 0x16, 0xfd, 0x05, 0x4b, 0xbd, 0x00, 0x39, 0x2e, 0x63,
929 0x46, 0x7d, 0x4e, 0xfb, 0x45, 0x82, 0xd2, 0xd2, 0x29, 0xd0, 0xd7, 0x20, 0x7b, 0x3e, 0x3b, 0x77,
930 0xb1, 0x7a, 0xff, 0x22, 0xe7, 0x2e, 0x1b, 0x3e, 0xa1, 0x56, 0xe8, 0x51, 0x2c, 0x7b, 0x3e, 0x7a,
931 0x04, 0x9b, 0xdc, 0x43, 0x20, 0xba, 0xca, 0xda, 0xf7, 0x1d, 0x63, 0xb5, 0xfb, 0x90, 0x89, 0x65,
932 0x90, 0x0a, 0xff, 0x32, 0x7a, 0x3a, 0xae, 0x0d, 0x0c, 0xbc, 0x74, 0x17, 0x9b, 0x90, 0xa8, 0x75,
933 0x9b, 0x8a, 0xa4, 0xfd, 0x29, 0x43, 0x71, 0x31, 0xd8, 0xcf, 0x52, 0x5f, 0x4f, 0x58, 0xec, 0x17,
934 0x29, 0xac, 0x55, 0xa1, 0x3f, 0x80, 0xd4, 0x69, 0xf4, 0x48, 0x59, 0x1f, 0xcf, 0x55, 0xb7, 0x56,
935 0x0a, 0x88, 0x67, 0xcc, 0x80, 0xda, 0x8f, 0xd2, 0x85, 0xc2, 0x2e, 0x40, 0xb6, 0xa3, 0xf7, 0xfb,
936 0xe6, 0xa0, 0x55, 0xeb, 0x2a, 0x12, 0xba, 0x02, 0x68, 0xba, 0x34, 0x0d, 0x6c, 0xea, 0x87, 0x47,
937 0xb5, 0x8e, 0x22, 0x23, 0x05, 0xf2, 0x07, 0x58, 0xaf, 0x0d, 0x74, 0xcc, 0x91, 0x89, 0xa8, 0xac,
938 0xe7, 0x2d, 0x33, 0x70, 0x12, 0x65, 0x21, 0xc5, 0x3f, 0x53, 0x11, 0xaf, 0x55, 0xeb, 0x9b, 0xb5,
939 0x6e, 0x43, 0xef, 0x0f, 0x0c, 0xac, 0xe4, 0xb4, 0xbf, 0x65, 0xc8, 0x1c, 0xbc, 0x77, 0xf8, 0xaf,
940 0x62, 0x07, 0xf2, 0xec, 0xef, 0x6c, 0x06, 0x21, 0xb5, 0xdd, 0xb1, 0xe8, 0x30, 0x39, 0x66, 0xeb,
941 0x33, 0x13, 0xfa, 0x2f, 0x14, 0x2d, 0xc7, 0xf1, 0x3e, 0x98, 0x8e, 0x1d, 0x12, 0x6a, 0x39, 0x01,
942 0xcb, 0x61, 0x06, 0x17, 0x98, 0xb5, 0x23, 0x8c, 0xe8, 0x25, 0x14, 0xa3, 0x76, 0x33, 0x32, 0xdf,
943 0xd8, 0xee, 0xc8, 0x76, 0xc7, 0x81, 0x68, 0xe7, 0x0f, 0x56, 0x66, 0x2a, 0x3e, 0x40, 0xb9, 0x1b,
944 0x71, 0xea, 0x82, 0xa2, 0xbb, 0x21, 0x3d, 0xc3, 0x05, 0x77, 0xde, 0x86, 0x5e, 0xc2, 0x65, 0x56,
945 0x91, 0xb6, 0xe7, 0x5a, 0xce, 0x4c, 0x3d, 0xb9, 0xa6, 0xd9, 0xc7, 0xea, 0x3d, 0x8b, 0x5a, 0x13,
946 0x12, 0xd5, 0x22, 0x9a, 0x49, 0xc4, 0xc2, 0x5b, 0x6f, 0x01, 0x9d, 0xf7, 0x8e, 0x14, 0x48, 0xbc,
947 0x23, 0x67, 0x22, 0x11, 0xd1, 0x27, 0x7a, 0x12, 0x5f, 0xbd, 0xbc, 0xa6, 0xf2, 0xce, 0xbb, 0xe4,
948 0xa4, 0x2f, 0xe5, 0xc7, 0x92, 0x16, 0xc0, 0xa5, 0x73, 0xfb, 0xa8, 0xba, 0x28, 0xbb, 0xa6, 0xa2,
949 0x5a, 0x1b, 0x42, 0x0c, 0xa9, 0x8b, 0xe3, 0x44, 0x6b, 0x23, 0x1e, 0x28, 0xea, 0x0a, 0x14, 0xfd,
950 0x58, 0x9a, 0xbf, 0xff, 0xdf, 0x93, 0xa0, 0x30, 0x97, 0x7c, 0xd0, 0xa8, 0x5b, 0xe1, 0xf0, 0x2d,
951 0xba, 0x0b, 0xa5, 0xe0, 0x9d, 0xed, 0xfb, 0x64, 0x64, 0x52, 0x66, 0x0e, 0xd4, 0x34, 0xfb, 0x5f,
952 0x15, 0x85, 0x99, 0x83, 0x83, 0xe8, 0xd6, 0x63, 0xe0, 0xc2, 0x00, 0x53, 0x10, 0x56, 0xf1, 0xdb,
953 0x7b, 0x0d, 0x88, 0xcf, 0x40, 0x42, 0x8e, 0xb9, 0x16, 0x0d, 0xe6, 0xde, 0xba, 0xd1, 0x89, 0xa1,
954 0xcb, 0xb3, 0x19, 0x08, 0x2b, 0x64, 0x6e, 0x83, 0x4d, 0x45, 0x2d, 0x28, 0x2e, 0x68, 0xc7, 0x4d,
955 0x67, 0xe7, 0x93, 0xba, 0xb8, 0x30, 0x2f, 0x16, 0x2c, 0xfd, 0xbb, 0x93, 0xcb, 0xff, 0xee, 0x6f,
956 0x21, 0x3f, 0xf1, 0x28, 0x99, 0xba, 0x49, 0xb1, 0xe3, 0x3f, 0x5a, 0xe9, 0x66, 0x39, 0xa3, 0xe5,
957 0xe7, 0x1e, 0x25, 0xc2, 0x0f, 0x8b, 0x23, 0x37, 0x99, 0x19, 0xd0, 0xff, 0x41, 0x09, 0x5c, 0xcb,
958 0x0f, 0xde, 0x7a, 0xa1, 0x19, 0x4f, 0x88, 0x9b, 0x6c, 0x42, 0x2c, 0xc5, 0xf6, 0x17, 0xdc, 0xac,
959 0xfd, 0x24, 0x41, 0x69, 0x49, 0x0b, 0xed, 0xc0, 0xcd, 0xe7, 0x06, 0xd6, 0x4d, 0x3e, 0x1c, 0xf6,
960 0x57, 0x4d, 0x87, 0x0a, 0xe4, 0xbb, 0xc6, 0xc0, 0xdc, 0x6f, 0x77, 0xdb, 0xfd, 0x96, 0xde, 0x54,
961 0x24, 0x74, 0x03, 0xd4, 0x05, 0x52, 0x6d, 0x3f, 0x6a, 0x11, 0x9d, 0xf6, 0xf3, 0xf6, 0x40, 0x91,
962 0xd1, 0x4d, 0xb8, 0xb6, 0x62, 0xb7, 0x71, 0x84, 0xfb, 0x06, 0x56, 0x92, 0xe8, 0x32, 0x94, 0xba,
963 0x86, 0x39, 0x8f, 0x50, 0x12, 0xf5, 0x1f, 0x24, 0xb8, 0x3a, 0xf4, 0x26, 0xab, 0xf2, 0x51, 0x07,
964 0x5e, 0xd5, 0xd1, 0x34, 0xd3, 0x93, 0x5e, 0x3f, 0x11, 0x90, 0xb1, 0xe7, 0x58, 0xee, 0xb8, 0xec,
965 0xd1, 0x71, 0x65, 0x4c, 0x5c, 0x36, 0xeb, 0x54, 0xf8, 0x96, 0xe5, 0xdb, 0xc1, 0xc2, 0x24, 0xff,
966 0xd5, 0x74, 0xf1, 0xb3, 0x7c, 0xed, 0x80, 0xd3, 0x1b, 0x8e, 0x77, 0x32, 0x2a, 0x37, 0xa7, 0x7e,
967 0x5e, 0xec, 0xbd, 0x49, 0x33, 0x91, 0x87, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x2f, 0x61,
968 0x5a, 0x61, 0x0c, 0x00, 0x00,